diff --git a/pkg/protocols/offlinehttp/request.go b/pkg/protocols/offlinehttp/request.go index e913e02d8..772f21ce2 100644 --- a/pkg/protocols/offlinehttp/request.go +++ b/pkg/protocols/offlinehttp/request.go @@ -29,8 +29,16 @@ func (request *Request) Type() templateTypes.ProtocolType { return templateTypes.OfflineHTTPProtocol } +// RawInputMode is a flag to indicate if the input is raw input +// rather than a file path +var RawInputMode = false + // ExecuteWithResults executes the protocol requests and returns results instead of writing them. func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, previous output.InternalEvent, callback protocols.OutputEventCallback) error { + if RawInputMode { + return request.executeRawInput(input.MetaInput.Input, input, callback) + } + wg, err := syncutil.New(syncutil.WithSize(request.options.Options.BulkSize)) if err != nil { return err @@ -66,43 +74,10 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, } dataStr := conversion.String(buffer) - resp, err := readResponseFromString(dataStr) - if err != nil { - gologger.Error().Msgf("Could not read raw response %s: %s\n", data, err) + if err := request.executeRawInput(dataStr, input, callback); err != nil { + gologger.Error().Msgf("Could not execute raw input %s: %s\n", data, err) return } - - if request.options.Options.Debug || request.options.Options.DebugRequests { - gologger.Info().Msgf("[%s] Dumped offline-http request for %s", request.options.TemplateID, data) - gologger.Print().Msgf("%s", dataStr) - } - gologger.Verbose().Msgf("[%s] Sent OFFLINE-HTTP request to %s", request.options.TemplateID, data) - - dumpedResponse, err := httputil.DumpResponse(resp, true) - if err != nil { - gologger.Error().Msgf("Could not dump raw http response %s: %s\n", data, err) - return - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - gologger.Error().Msgf("Could not read raw http response body %s: %s\n", data, err) - return - } - - outputEvent := request.responseToDSLMap(resp, data, data, data, conversion.String(dumpedResponse), conversion.String(body), utils.HeadersToString(resp.Header), 0, nil) - // add response fields to template context and merge templatectx variables to output event - request.options.AddTemplateVars(input.MetaInput, request.Type(), request.GetID(), outputEvent) - if request.options.HasTemplateCtx(input.MetaInput) { - outputEvent = generators.MergeMaps(outputEvent, request.options.GetTemplateCtx(input.MetaInput).GetAll()) - } - outputEvent["ip"] = "" - for k, v := range previous { - outputEvent[k] = v - } - - event := eventcreator.CreateEvent(request, outputEvent, request.options.Options.Debug || request.options.Options.DebugResponse) - callback(event) }(data) }) wg.Wait() @@ -114,3 +89,38 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, request.options.Progress.IncrementRequests() return nil } + +func (request *Request) executeRawInput(data string, input *contextargs.Context, callback protocols.OutputEventCallback) error { + resp, err := readResponseFromString(data) + if err != nil { + return errors.Wrap(err, "could not read raw response") + } + + if request.options.Options.Debug || request.options.Options.DebugRequests { + gologger.Info().Msgf("[%s] Dumped offline-http request for %s", request.options.TemplateID, data) + gologger.Print().Msgf("%s", data) + } + gologger.Verbose().Msgf("[%s] Sent OFFLINE-HTTP request to %s", request.options.TemplateID, data) + + dumpedResponse, err := httputil.DumpResponse(resp, true) + if err != nil { + return errors.Wrap(err, "could not dump raw http response") + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + return errors.Wrap(err, "could not read raw http response body") + } + + outputEvent := request.responseToDSLMap(resp, data, data, data, conversion.String(dumpedResponse), conversion.String(body), utils.HeadersToString(resp.Header), 0, nil) + // add response fields to template context and merge templatectx variables to output event + request.options.AddTemplateVars(input.MetaInput, request.Type(), request.GetID(), outputEvent) + if request.options.HasTemplateCtx(input.MetaInput) { + outputEvent = generators.MergeMaps(outputEvent, request.options.GetTemplateCtx(input.MetaInput).GetAll()) + } + outputEvent["ip"] = "" + + event := eventcreator.CreateEvent(request, outputEvent, request.options.Options.Debug || request.options.Options.DebugResponse) + callback(event) + return nil +}