Path: blob/dev/pkg/protocols/common/helpers/eventcreator/eventcreator.go
2073 views
package eventcreator12import (3"github.com/projectdiscovery/gologger"4"github.com/projectdiscovery/nuclei/v3/pkg/operators"5"github.com/projectdiscovery/nuclei/v3/pkg/output"6"github.com/projectdiscovery/nuclei/v3/pkg/protocols"7"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/utils/vardump"8"golang.org/x/text/cases"9"golang.org/x/text/language"10)1112// CreateEvent wraps the outputEvent with the result of the operators defined on the request13func CreateEvent(request protocols.Request, outputEvent output.InternalEvent, isResponseDebug bool) *output.InternalWrappedEvent {14return CreateEventWithAdditionalOptions(request, outputEvent, isResponseDebug, nil)15}1617// CreateEventWithAdditionalOptions wraps the outputEvent with the result of the operators defined on the request18// and enables extending the resulting event with additional attributes or values.19func CreateEventWithAdditionalOptions(request protocols.Request, outputEvent output.InternalEvent, isResponseDebug bool,20addAdditionalOptions func(internalWrappedEvent *output.InternalWrappedEvent)) *output.InternalWrappedEvent {21event := &output.InternalWrappedEvent{InternalEvent: outputEvent}2223// Dump response variables if ran in debug mode24if vardump.EnableVarDump {25protoName := cases.Title(language.English).String(request.Type().String())26gologger.Debug().Msgf("%v Protocol response variables: %s\n", protoName, vardump.DumpVariables(outputEvent))27}28for _, compiledOperator := range request.GetCompiledOperators() {29if compiledOperator != nil {30result, ok := compiledOperator.Execute(outputEvent, request.Match, request.Extract, isResponseDebug)31if ok && result != nil {32// if result has both extracted values and dynamic values, put dynamic values in data33// and remove dynamic values to avoid skipping legitimate event34if (len(result.Extracts) > 0 || len(result.OutputExtracts) > 0) && len(result.DynamicValues) > 0 {35for k, v := range result.DynamicValues {36event.InternalEvent[k] = v37}38result.DynamicValues = nil39}40event.OperatorsResult = result41if addAdditionalOptions != nil {42addAdditionalOptions(event)43}44event.Results = append(event.Results, request.MakeResultEvent(event)...)45}46}47}48return event49}5051func CreateEventWithOperatorResults(request protocols.Request, internalEvent output.InternalEvent, operatorResult *operators.Result) *output.InternalWrappedEvent {52event := &output.InternalWrappedEvent{InternalEvent: internalEvent}53event.OperatorsResult = operatorResult54event.Results = append(event.Results, request.MakeResultEvent(event)...)55return event56}575859