RES-84 # Improve Nuclei CLI interface (WIP)

* moved the Severity "enum" back to Nuclei (1 unit test failing)
This commit is contained in:
forgedhallpass 2021-07-16 17:28:13 +03:00
parent 6588e8b7ac
commit 2635c65ce2
34 changed files with 375 additions and 112 deletions

6
.gitignore vendored
View File

@ -1,7 +1,7 @@
cmd/nuclei/nuclei*
v2/cmd/nuclei/nuclei
.idea .idea
v2/cmd/nuclei/nuclei
v2/cmd/nuclei/main
v2/cmd/integration-test/integration-test
integration_tests/integration-test integration_tests/integration-test
integration_tests/nuclei integration_tests/nuclei
v2/cmd/integration-test/integration-test
bin bin

View File

@ -5,6 +5,7 @@ import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/nuclei/v2/internal/runner" "github.com/projectdiscovery/nuclei/v2/internal/runner"
"github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/types" "github.com/projectdiscovery/nuclei/v2/pkg/types"
"os" "os"
"path" "path"
@ -49,7 +50,7 @@ based on templates offering massive extensibility and ease of use.`)
set.StringSliceVarP(&options.Templates, "templates", "t", []string{}, "Templates to run, supports single and multiple templates using directory.") set.StringSliceVarP(&options.Templates, "templates", "t", []string{}, "Templates to run, supports single and multiple templates using directory.")
set.StringSliceVarP(&options.Workflows, "workflows", "w", []string{}, "Workflows to run for nuclei") set.StringSliceVarP(&options.Workflows, "workflows", "w", []string{}, "Workflows to run for nuclei")
set.StringSliceVarP(&options.ExcludedTemplates, "exclude", "exclude-templates", []string{}, "Templates to exclude, supports single and multiple templates using directory.") set.StringSliceVarP(&options.ExcludedTemplates, "exclude", "exclude-templates", []string{}, "Templates to exclude, supports single and multiple templates using directory.")
set.SeverityVarP(&options.Severity, "severity", "impact", goflags.Severities{}, fmt.Sprintf("Templates to run based on severity. Possible values: %s", goflags.GetSupportedSeverities().String())) set.VarP(&options.Severities, "severity", "impact", fmt.Sprintf("Templates to run based on severity. Possible values: %s", severity.GetSupportedSeverities().String()))
set.StringSliceVar(&options.Author, "author", []string{}, "Templates to run based on author") set.StringSliceVar(&options.Author, "author", []string{}, "Templates to run based on author")
set.StringSliceVar(&options.IncludeTemplates, "include-templates", []string{}, "Templates to force run even if they are in denylist") set.StringSliceVar(&options.IncludeTemplates, "include-templates", []string{}, "Templates to force run even if they are in denylist")
set.StringSliceVar(&options.IncludeTags, "include-tags", []string{}, "Tags to force run even if they are in denylist") set.StringSliceVar(&options.IncludeTags, "include-tags", []string{}, "Tags to force run even if they are in denylist")

View File

@ -2,37 +2,37 @@ package colorizer
import ( import (
"github.com/logrusorgru/aurora" "github.com/logrusorgru/aurora"
"github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/nuclei/v2/internal/severity"
) )
const ( const (
fgOrange uint8 = 208 fgOrange uint8 = 208
) )
func GetColor(colorizer aurora.Aurora, severity goflags.Severity) string { func GetColor(colorizer aurora.Aurora, templateSeverity severity.Severity) string {
var method func(arg interface{}) aurora.Value var method func(arg interface{}) aurora.Value
switch severity { switch templateSeverity {
case goflags.Info: case severity.Info:
method = colorizer.Blue method = colorizer.Blue
case goflags.Low: case severity.Low:
method = colorizer.Green method = colorizer.Green
case goflags.Medium: case severity.Medium:
method = colorizer.Yellow method = colorizer.Yellow
case goflags.High: case severity.High:
method = func(stringValue interface{}) aurora.Value { return colorizer.Index(fgOrange, stringValue) } method = func(stringValue interface{}) aurora.Value { return colorizer.Index(fgOrange, stringValue) }
case goflags.Critical: case severity.Critical:
method = colorizer.Red method = colorizer.Red
default: default:
gologger.Warning().Msgf("The '%s' severity does not have an color associated!", severity) gologger.Warning().Msgf("The '%s' severity does not have an color associated!", templateSeverity)
method = colorizer.White method = colorizer.White
} }
return method(severity.String()).String() return method(templateSeverity.String()).String()
} }
func New(aurora aurora.Aurora) func(goflags.Severity) string { func New(aurora aurora.Aurora) func(severity.Severity) string {
return func(severity goflags.Severity) string { return func(severity severity.Severity) string {
return GetColor(aurora, severity) return GetColor(aurora, severity)
} }
} }

View File

@ -3,7 +3,7 @@ package runner
import ( import (
"bufio" "bufio"
"fmt" "fmt"
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/parsers" "github.com/projectdiscovery/nuclei/v2/pkg/parsers"
"github.com/projectdiscovery/nuclei/v2/pkg/utils" "github.com/projectdiscovery/nuclei/v2/pkg/utils"
"os" "os"
@ -52,7 +52,7 @@ type Runner struct {
progress progress.Progress progress progress.Progress
colorizer aurora.Aurora colorizer aurora.Aurora
issuesClient *reporting.Client issuesClient *reporting.Client
addColor func(goflags.Severity) string addColor func(severity.Severity) string
browser *engine.Browser browser *engine.Browser
ratelimiter ratelimit.Limiter ratelimiter ratelimit.Limiter
} }
@ -298,7 +298,7 @@ func (r *Runner) RunEnumeration() error {
ExcludeTags: r.options.ExcludeTags, ExcludeTags: r.options.ExcludeTags,
IncludeTemplates: r.options.IncludeTemplates, IncludeTemplates: r.options.IncludeTemplates,
Authors: r.options.Author, Authors: r.options.Author,
Severities: r.options.Severity, Severities: r.options.Severities,
IncludeTags: r.options.IncludeTags, IncludeTags: r.options.IncludeTags,
TemplatesDirectory: r.options.TemplatesDirectory, TemplatesDirectory: r.options.TemplatesDirectory,
Catalog: r.catalog, Catalog: r.catalog,

View File

@ -3,7 +3,7 @@ package runner
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"io/ioutil" "io/ioutil"
"os" "os"
"strings" "strings"
@ -36,7 +36,7 @@ func (r *Runner) parseTemplateFile(file string) (*templates.Template, error) {
return template, nil return template, nil
} }
func (r *Runner) templateLogMsg(id string, name string, author string, severity goflags.Severity) string { func (r *Runner) templateLogMsg(id string, name string, author string, severity severity.Severity) string {
// Display the message for the template // Display the message for the template
return fmt.Sprintf("[%s] %s (%s) [%s]", return fmt.Sprintf("[%s] %s (%s) [%s]",
r.colorizer.BrightBlue(id).String(), r.colorizer.BrightBlue(id).String(),

View File

@ -0,0 +1,46 @@
package severity
import (
"errors"
"fmt"
"strings"
"github.com/projectdiscovery/goflags"
)
type Severities []Severity
func (severities Severities) String() string {
return strings.Join(severities.ToStringArray(), ", ")
}
func (severities *Severities) Set(value string) error {
if inputSeverities, err := goflags.ToStringSlice(value); err != nil {
return err
} else {
for _, inputSeverity := range inputSeverities {
if err := setSeverity(severities, inputSeverity); err != nil {
return err
}
}
return nil
}
}
func setSeverity(severities *Severities, value string) error {
computedSeverity, err := toSeverity(value)
if err != nil {
return errors.New(fmt.Sprintf("'%s' is not a valid severity!", value))
}
// TODO change the Severities type to map[Severity]interface{}, where the values are struct{}{}, to "simulates" a "set" data structure
*severities = append(*severities, computedSeverity)
return nil
}
func (severities *Severities) ToStringArray() []string {
var result []string
for _, severity := range *severities {
result = append(result, severity.String())
}
return result
}

View File

@ -0,0 +1,122 @@
package severity
import (
"encoding/json"
"github.com/pkg/errors"
"strings"
)
type Severity int
const (
Info Severity = iota
Low
Medium
High
Critical
limit
)
var severityMappings = map[Severity]string{
Info: "info",
Low: "low",
Medium: "medium",
High: "high",
Critical: "critical",
}
func toSeverity(valueToMap string) (Severity, error) {
normalizedValue := normalizeValue(valueToMap)
for key, currentValue := range severityMappings {
if normalizedValue == currentValue {
return key, nil
}
}
return -1, errors.New("Invalid severity: " + valueToMap)
}
func GetSupportedSeverities() Severities {
var result []Severity
for index := Severity(0); index < limit; index++ {
result = append(result, index)
}
return result
}
func normalizeValue(value string) string {
return strings.TrimSpace(strings.ToLower(value))
}
func (severity Severity) normalize() string {
return normalizeValue(severity.String())
}
func (severity Severity) String() string {
return severityMappings[severity]
}
type SeverityHolder struct {
Severity Severity
}
func (severityHolder SeverityHolder) MarshalYAML() (interface{}, error) {
if value, found := severityMappings[severityHolder.Severity]; found {
return &struct{ Severity string }{value}, nil // TODO see if the new struct can be dynamically created using reflection to make it refactor safe
} else {
panic("Invalid field to marshall")
}
}
func (severityHolder SeverityHolder) MarshalJSON() ([]byte, error) {
if value, found := severityMappings[severityHolder.Severity]; found {
return json.Marshal(&struct{ Severity string }{value}) // TODO see if the new struct can be dynamically created using reflection to make it refactor safe
} else {
panic("Invalid field to marshall")
}
}
func (severityHolder *SeverityHolder) UnmarshalYAML(unmarshal func(interface{}) error) error {
var marshalledSeverity string
if err := unmarshal(&marshalledSeverity); err != nil {
return err
}
computedSeverity, err := toSeverity(marshalledSeverity)
if err != nil {
return err
}
severityHolder.Severity = computedSeverity
return nil
}
func (severityHolder *SeverityHolder) UnmarshalJSON(data []byte) error {
var objMap map[string]string
if err := json.Unmarshal(data, &objMap); err != nil {
return err
}
return mapToSeverity(objMap, severityHolder)
}
func mapToSeverity(objMap map[string]string, severity *SeverityHolder) error {
if len(objMap) != 1 {
return errors.New("There can only be one severity defined")
}
stringSeverity := getFirstValue(objMap)
if readableSeverity, err := toSeverity(stringSeverity); err == nil {
severity = &SeverityHolder{readableSeverity}
return nil
} else {
return err
}
}
func getFirstValue(stringMap map[string]string) string {
var result string
for _, value := range stringMap {
result = value
break
}
return result
}

View File

@ -0,0 +1,91 @@
package severity
import (
"encoding/json"
"fmt"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v2"
"testing"
)
func TestJsonUnmarshal(t *testing.T) {
testUnmarshal(t, json.Unmarshal, createJson)
}
func TestYamlUnmarshal(t *testing.T) {
testUnmarshal(t, yaml.Unmarshal, createYaml)
}
func TestJsonUnmarshalFail(t *testing.T) {
testUnmarshalFail(t, json.Unmarshal, createJson)
}
func TestYamlUnmarshalFail(t *testing.T) {
testUnmarshalFail(t, yaml.Unmarshal, createYaml)
}
func TestJsonMarshalFails(t *testing.T) {
testMarshallerFails(t, json.Marshal)
}
func TestYamlMarshalFails(t *testing.T) {
testMarshallerFails(t, yaml.Marshal)
}
func TestJsonMarshalSucceed(t *testing.T) {
testMarshal(t, json.Marshal, createJson)
}
func TestYamlMarshal(t *testing.T) {
testMarshal(t, yaml.Marshal, createYaml)
}
func testUnmarshal(t *testing.T, unmarshaller func(data []byte, v interface{}) error, payloadCreator func(value string) string) {
payloads := [...]string{
payloadCreator("Info"),
payloadCreator("info"),
payloadCreator("inFo "),
payloadCreator("infO "),
payloadCreator(" INFO "),
}
for _, payload := range payloads {
t.Run(payload, func(t *testing.T) {
result := unmarshal(payload, unmarshaller)
assert.Equal(t, result.Severity, Info)
assert.Equal(t, result.Severity.String(), "info")
})
}
}
func testMarshal(t *testing.T, marshaller func(v interface{}) ([]byte, error), payloadCreator func(value string) string) {
for _, severity := range GetSupportedSeverities() {
result, _ := marshaller(&SeverityHolder{Severity: severity})
assert.Equal(t, string(result), payloadCreator(severity.String()))
}
}
func testUnmarshalFail(t *testing.T, unmarshaller func(data []byte, v interface{}) error, payloadCreator func(value string) string) bool {
return assert.Panics(t, func() { unmarshal(payloadCreator("invalid"), unmarshaller) })
}
func testMarshallerFails(t *testing.T, marshaller func(v interface{}) ([]byte, error)) {
assert.Panics(t, func() { marshaller(&SeverityHolder{Severity: 13}) })
}
func unmarshal(value string, unmarshaller func(data []byte, v interface{}) error) SeverityHolder {
severityStruct := SeverityHolder{}
var err = unmarshaller([]byte(value), &severityStruct)
if err != nil {
panic(err)
}
return severityStruct
}
func createJson(severityString string) string {
return fmt.Sprintf(`{"Severity":"%s"}`, severityString)
}
func createYaml(value string) string {
return "severity: " + value + "\n"
}

View File

@ -2,8 +2,8 @@ package testutils
import ( import (
"github.com/logrusorgru/aurora" "github.com/logrusorgru/aurora"
"github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/gologger/levels" "github.com/projectdiscovery/gologger/levels"
"github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/catalog" "github.com/projectdiscovery/nuclei/v2/pkg/catalog"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"github.com/projectdiscovery/nuclei/v2/pkg/output" "github.com/projectdiscovery/nuclei/v2/pkg/output"
@ -46,7 +46,7 @@ var DefaultOptions = &types.Options{
Retries: 1, Retries: 1,
RateLimit: 150, RateLimit: 150,
ProjectPath: "", ProjectPath: "",
Severity: goflags.Severities{}, Severities: severity.Severities{},
Target: "", Target: "",
Targets: "", Targets: "",
Output: "", Output: "",

View File

@ -2,7 +2,7 @@ package filter
import ( import (
"errors" "errors"
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/utils" "github.com/projectdiscovery/nuclei/v2/pkg/utils"
"strings" "strings"
) )
@ -10,7 +10,7 @@ import (
// TagFilter is used to filter nuclei templates for tag based execution // TagFilter is used to filter nuclei templates for tag based execution
type TagFilter struct { type TagFilter struct {
allowedTags map[string]struct{} allowedTags map[string]struct{}
severities map[goflags.Severity]struct{} severities map[severity.Severity]struct{}
authors map[string]struct{} authors map[string]struct{}
block map[string]struct{} block map[string]struct{}
matchAllows map[string]struct{} matchAllows map[string]struct{}
@ -27,7 +27,7 @@ var ErrExcluded = errors.New("the template was excluded")
// matchAllows section. // matchAllows section.
// //
// It returns true if the tag is specified, or false. // It returns true if the tag is specified, or false.
func (tagFilter *TagFilter) Match(templateTags, templateAuthors []string, severity goflags.Severity) (bool, error) { func (tagFilter *TagFilter) Match(templateTags, templateAuthors []string, severity severity.Severity) (bool, error) {
for _, templateTag := range templateTags { for _, templateTag := range templateTags {
_, blocked := tagFilter.block[templateTag] _, blocked := tagFilter.block[templateTag]
_, allowed := tagFilter.matchAllows[templateTag] _, allowed := tagFilter.matchAllows[templateTag]
@ -82,7 +82,7 @@ func isTagMatch(templateTags []string, tagFilter *TagFilter) bool {
// MatchWithWorkflowTags takes an addition list of allowed tags // MatchWithWorkflowTags takes an addition list of allowed tags
// and returns true if the match was successful. // and returns true if the match was successful.
func (tagFilter *TagFilter) MatchWithWorkflowTags(templateTags, templateAuthors []string, templateSeverity goflags.Severity, workflowTags []string) (bool, error) { func (tagFilter *TagFilter) MatchWithWorkflowTags(templateTags, templateAuthors []string, templateSeverity severity.Severity, workflowTags []string) (bool, error) {
workflowAllowedTagMap := make(map[string]struct{}) workflowAllowedTagMap := make(map[string]struct{})
for _, workflowTag := range workflowTags { for _, workflowTag := range workflowTags {
@ -129,7 +129,7 @@ type Config struct {
Tags []string Tags []string
ExcludeTags []string ExcludeTags []string
Authors []string Authors []string
Severities goflags.Severities Severities severity.Severities
IncludeTags []string IncludeTags []string
} }
@ -140,7 +140,7 @@ func New(config *Config) *TagFilter {
filter := &TagFilter{ filter := &TagFilter{
allowedTags: make(map[string]struct{}), allowedTags: make(map[string]struct{}),
authors: make(map[string]struct{}), authors: make(map[string]struct{}),
severities: make(map[goflags.Severity]struct{}), severities: make(map[severity.Severity]struct{}),
block: make(map[string]struct{}), block: make(map[string]struct{}),
matchAllows: make(map[string]struct{}), matchAllows: make(map[string]struct{}),
} }

View File

@ -1,7 +1,7 @@
package filter package filter
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -14,11 +14,11 @@ func TestTagBasedFilter(t *testing.T) {
filter := New(config) filter := New(config)
t.Run("true", func(t *testing.T) { t.Run("true", func(t *testing.T) {
matched, _ := filter.Match([]string{"jira"}, []string{"pdteam"}, goflags.Low) matched, _ := filter.Match([]string{"jira"}, []string{"pdteam"}, severity.Low)
require.True(t, matched, "could not get correct match") require.True(t, matched, "could not get correct match")
}) })
t.Run("false", func(t *testing.T) { t.Run("false", func(t *testing.T) {
matched, _ := filter.Match([]string{"consul"}, []string{"pdteam"}, goflags.Low) matched, _ := filter.Match([]string{"consul"}, []string{"pdteam"}, severity.Low)
require.False(t, matched, "could not get correct match") require.False(t, matched, "could not get correct match")
}) })
t.Run("not-match-excludes", func(t *testing.T) { t.Run("not-match-excludes", func(t *testing.T) {
@ -26,7 +26,7 @@ func TestTagBasedFilter(t *testing.T) {
ExcludeTags: []string{"dos"}, ExcludeTags: []string{"dos"},
} }
filter := New(config) filter := New(config)
matched, err := filter.Match([]string{"dos"}, []string{"pdteam"}, goflags.Low) matched, err := filter.Match([]string{"dos"}, []string{"pdteam"}, severity.Low)
require.False(t, matched, "could not get correct match") require.False(t, matched, "could not get correct match")
require.Equal(t, ErrExcluded, err, "could not get correct error") require.Equal(t, ErrExcluded, err, "could not get correct error")
}) })
@ -37,7 +37,7 @@ func TestTagBasedFilter(t *testing.T) {
IncludeTags: []string{"fuzz"}, IncludeTags: []string{"fuzz"},
} }
filter := New(config) filter := New(config)
matched, err := filter.Match([]string{"fuzz"}, []string{"pdteam"}, goflags.Low) matched, err := filter.Match([]string{"fuzz"}, []string{"pdteam"}, severity.Low)
require.Nil(t, err, "could not get match") require.Nil(t, err, "could not get match")
require.True(t, matched, "could not get correct match") require.True(t, matched, "could not get correct match")
}) })
@ -47,7 +47,7 @@ func TestTagBasedFilter(t *testing.T) {
ExcludeTags: []string{"fuzz"}, ExcludeTags: []string{"fuzz"},
} }
filter := New(config) filter := New(config)
matched, err := filter.Match([]string{"fuzz"}, []string{"pdteam"}, goflags.Low) matched, err := filter.Match([]string{"fuzz"}, []string{"pdteam"}, severity.Low)
require.Nil(t, err, "could not get match") require.Nil(t, err, "could not get match")
require.True(t, matched, "could not get correct match") require.True(t, matched, "could not get correct match")
}) })
@ -56,31 +56,31 @@ func TestTagBasedFilter(t *testing.T) {
Authors: []string{"pdteam"}, Authors: []string{"pdteam"},
} }
filter := New(config) filter := New(config)
matched, _ := filter.Match([]string{"fuzz"}, []string{"pdteam"}, goflags.Low) matched, _ := filter.Match([]string{"fuzz"}, []string{"pdteam"}, severity.Low)
require.True(t, matched, "could not get correct match") require.True(t, matched, "could not get correct match")
}) })
t.Run("match-severity", func(t *testing.T) { t.Run("match-severity", func(t *testing.T) {
config := &Config{ config := &Config{
Severities: goflags.Severities{goflags.High}, Severities: severity.Severities{severity.High},
} }
filter := New(config) filter := New(config)
matched, _ := filter.Match([]string{"fuzz"}, []string{"pdteam"}, goflags.High) matched, _ := filter.Match([]string{"fuzz"}, []string{"pdteam"}, severity.High)
require.True(t, matched, "could not get correct match") require.True(t, matched, "could not get correct match")
}) })
t.Run("match-conditions", func(t *testing.T) { t.Run("match-conditions", func(t *testing.T) {
config := &Config{ config := &Config{
Authors: []string{"pdteam"}, Authors: []string{"pdteam"},
Tags: []string{"jira"}, Tags: []string{"jira"},
Severities: goflags.Severities{goflags.High}, Severities: severity.Severities{severity.High},
} }
filter := New(config) filter := New(config)
matched, _ := filter.Match([]string{"jira"}, []string{"pdteam"}, goflags.High) matched, _ := filter.Match([]string{"jira"}, []string{"pdteam"}, severity.High)
require.True(t, matched, "could not get correct match") require.True(t, matched, "could not get correct match")
matched, _ = filter.Match([]string{"jira"}, []string{"pdteam"}, goflags.Low) matched, _ = filter.Match([]string{"jira"}, []string{"pdteam"}, severity.Low)
require.False(t, matched, "could not get correct match") require.False(t, matched, "could not get correct match")
matched, _ = filter.Match([]string{"jira"}, []string{"random"}, goflags.Low) matched, _ = filter.Match([]string{"jira"}, []string{"random"}, severity.Low)
require.False(t, matched, "could not get correct match") require.False(t, matched, "could not get correct match")
matched, _ = filter.Match([]string{"consul"}, []string{"random"}, goflags.Low) matched, _ = filter.Match([]string{"consul"}, []string{"random"}, severity.Low)
require.False(t, matched, "could not get correct match") require.False(t, matched, "could not get correct match")
}) })
} }

View File

@ -1,10 +1,10 @@
package loader package loader
import ( import (
"github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/utils" "github.com/projectdiscovery/nuclei/v2/pkg/utils"
"strings" "strings"
"github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/nuclei/v2/pkg/catalog" "github.com/projectdiscovery/nuclei/v2/pkg/catalog"
@ -24,7 +24,7 @@ type Config struct {
Tags []string Tags []string
ExcludeTags []string ExcludeTags []string
Authors []string Authors []string
Severities goflags.Severities Severities severity.Severities
IncludeTags []string IncludeTags []string
Catalog *catalog.Catalog Catalog *catalog.Catalog

View File

@ -1,7 +1,7 @@
package model package model
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/utils" "github.com/projectdiscovery/nuclei/v2/pkg/utils"
"strings" "strings"
) )
@ -11,8 +11,8 @@ type Info struct {
Authors StringSlice `yaml:"author"` Authors StringSlice `yaml:"author"`
Tags StringSlice `yaml:"tags"` Tags StringSlice `yaml:"tags"`
Description string Description string
Reference StringSlice `yaml:"reference"` Reference StringSlice `yaml:"reference"`
SeverityHolder goflags.SeverityHolder `yaml:"severity"` SeverityHolder severity.SeverityHolder `yaml:"severity"`
} }
type StringSlice struct { type StringSlice struct {

View File

@ -1,7 +1,7 @@
package output package output
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"os" "os"
"regexp" "regexp"
@ -37,7 +37,7 @@ type StandardWriter struct {
outputMutex *sync.Mutex outputMutex *sync.Mutex
traceFile *fileWriter traceFile *fileWriter
traceMutex *sync.Mutex traceMutex *sync.Mutex
severityColors func(goflags.Severity) string severityColors func(severity.Severity) string
} }
var decolorizerRegex = regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) var decolorizerRegex = regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`)

View File

@ -19,7 +19,7 @@ func NewLoader(options *protocols.ExecuterOptions) (model.WorkflowLoader, error)
Tags: options.Options.Tags, Tags: options.Options.Tags,
ExcludeTags: options.Options.ExcludeTags, ExcludeTags: options.Options.ExcludeTags,
Authors: options.Options.Author, Authors: options.Options.Author,
Severities: options.Options.Severity, Severities: options.Options.Severities,
IncludeTags: options.Options.IncludeTags, IncludeTags: options.Options.IncludeTags,
}) })
pathFilter := filter.NewPathFilter(&filter.PathFilterConfig{ pathFilter := filter.NewPathFilter(&filter.PathFilterConfig{

View File

@ -1,7 +1,7 @@
package dns package dns
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -24,7 +24,7 @@ func TestDNSCompileMake(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile dns request") require.Nil(t, err, "could not compile dns request")

View File

@ -1,7 +1,7 @@
package dns package dns
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"net" "net"
"strconv" "strconv"
@ -31,7 +31,7 @@ func TestResponseToDSLMap(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile dns request") require.Nil(t, err, "could not compile dns request")
@ -63,7 +63,7 @@ func TestDNSOperatorMatch(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile dns request") require.Nil(t, err, "could not compile dns request")
@ -146,7 +146,7 @@ func TestDNSOperatorExtract(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile dns request") require.Nil(t, err, "could not compile dns request")
@ -216,7 +216,7 @@ func TestDNSMakeResult(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile dns request") require.Nil(t, err, "could not compile dns request")

View File

@ -1,7 +1,7 @@
package dns package dns
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -41,7 +41,7 @@ func TestDNSExecuteWithResults(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile dns request") require.Nil(t, err, "could not compile dns request")

View File

@ -1,7 +1,7 @@
package file package file
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -23,7 +23,7 @@ func TestFileCompile(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")

View File

@ -1,7 +1,7 @@
package file package file
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"io/ioutil" "io/ioutil"
"os" "os"
@ -26,7 +26,7 @@ func TestFindInputPaths(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")

View File

@ -1,7 +1,7 @@
package file package file
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -27,7 +27,7 @@ func TestResponseToDSLMap(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")
@ -52,7 +52,7 @@ func TestFileOperatorMatch(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")
@ -117,7 +117,7 @@ func TestFileOperatorExtract(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")
@ -182,7 +182,7 @@ func TestFileMakeResult(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")

View File

@ -1,7 +1,7 @@
package file package file
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"io/ioutil" "io/ioutil"
"os" "os"
@ -43,7 +43,7 @@ func TestFileExecuteWithResults(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")

View File

@ -1,7 +1,7 @@
package http package http
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"net/url" "net/url"
"testing" "testing"
@ -38,7 +38,7 @@ func TestMakeRequestFromModal(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile http request") require.Nil(t, err, "could not compile http request")
@ -65,7 +65,7 @@ func TestMakeRequestFromModalTrimSuffixSlash(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile http request") require.Nil(t, err, "could not compile http request")
@ -103,7 +103,7 @@ Accept-Encoding: gzip`},
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile http request") require.Nil(t, err, "could not compile http request")
@ -142,7 +142,7 @@ Accept-Encoding: gzip`},
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile http request") require.Nil(t, err, "could not compile http request")

View File

@ -1,7 +1,7 @@
package http package http
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -32,7 +32,7 @@ Accept-Encoding: gzip`},
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile http request") require.Nil(t, err, "could not compile http request")

View File

@ -1,7 +1,7 @@
package http package http
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"net/http" "net/http"
"testing" "testing"
@ -28,7 +28,7 @@ func TestResponseToDSLMap(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")
@ -58,7 +58,7 @@ func TestHTTPOperatorMatch(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")
@ -128,7 +128,7 @@ func TestHTTPOperatorExtract(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")
@ -198,7 +198,7 @@ func TestHTTPMakeResult(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile file request") require.Nil(t, err, "could not compile file request")

View File

@ -1,7 +1,7 @@
package network package network
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -22,7 +22,7 @@ func TestNetworkCompileMake(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile network request") require.Nil(t, err, "could not compile network request")

View File

@ -1,7 +1,7 @@
package network package network
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"testing" "testing"
@ -26,7 +26,7 @@ func TestResponseToDSLMap(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile network request") require.Nil(t, err, "could not compile network request")
@ -51,7 +51,7 @@ func TestNetworkOperatorMatch(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile network request") require.Nil(t, err, "could not compile network request")
@ -114,7 +114,7 @@ func TestNetworkOperatorExtract(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile network request") require.Nil(t, err, "could not compile network request")
@ -177,7 +177,7 @@ func TestNetworkMakeResult(t *testing.T) {
} }
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
require.Nil(t, err, "could not compile network request") require.Nil(t, err, "could not compile network request")

View File

@ -3,7 +3,7 @@ package network
import ( import (
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
@ -54,7 +54,7 @@ func TestNetworkExecuteWithResults(t *testing.T) {
request.Inputs = append(request.Inputs, &Input{Data: fmt.Sprintf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", parsed.Host)}) request.Inputs = append(request.Inputs, &Input{Data: fmt.Sprintf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", parsed.Host)})
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
err = request.Compile(executerOpts) err = request.Compile(executerOpts)
require.Nil(t, err, "could not compile network request") require.Nil(t, err, "could not compile network request")

View File

@ -1,7 +1,7 @@
package offlinehttp package offlinehttp
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"io/ioutil" "io/ioutil"
"os" "os"
@ -21,7 +21,7 @@ func TestFindResponses(t *testing.T) {
request := &Request{} request := &Request{}
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
executerOpts.Operators = []*operators.Operators{{}} executerOpts.Operators = []*operators.Operators{{}}
err := request.Compile(executerOpts) err := request.Compile(executerOpts)

View File

@ -1,7 +1,7 @@
package offlinehttp package offlinehttp
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"net/http" "net/http"
"testing" "testing"
@ -23,7 +23,7 @@ func TestResponseToDSLMap(t *testing.T) {
request := &Request{} request := &Request{}
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
executerOpts.Operators = []*operators.Operators{{}} executerOpts.Operators = []*operators.Operators{{}}
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
@ -49,7 +49,7 @@ func TestHTTPOperatorMatch(t *testing.T) {
request := &Request{} request := &Request{}
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
executerOpts.Operators = []*operators.Operators{{}} executerOpts.Operators = []*operators.Operators{{}}
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
@ -115,7 +115,7 @@ func TestHTTPOperatorExtract(t *testing.T) {
request := &Request{} request := &Request{}
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
executerOpts.Operators = []*operators.Operators{{}} executerOpts.Operators = []*operators.Operators{{}}
err := request.Compile(executerOpts) err := request.Compile(executerOpts)
@ -168,7 +168,7 @@ func TestHTTPMakeResult(t *testing.T) {
request := &Request{} request := &Request{}
executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
ID: templateID, ID: templateID,
Info: model.Info{SeverityHolder: goflags.SeverityHolder{Severity: goflags.Low}, Name: "test"}, Info: model.Info{SeverityHolder: severity.SeverityHolder{Severity: severity.Low}, Name: "test"},
}) })
executerOpts.Operators = []*operators.Operators{{ executerOpts.Operators = []*operators.Operators{{
Matchers: []*matchers.Matcher{{ Matchers: []*matchers.Matcher{{

View File

@ -3,7 +3,7 @@ package sarif
import ( import (
"crypto/sha1" "crypto/sha1"
"encoding/hex" "encoding/hex"
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/utils" "github.com/projectdiscovery/nuclei/v2/pkg/utils"
"os" "os"
"path" "path"
@ -111,11 +111,11 @@ func (i *Exporter) Export(event *output.ResultEvent) error {
// getSarifSeverity returns the sarif severity // getSarifSeverity returns the sarif severity
func getSarifSeverity(event *output.ResultEvent) string { func getSarifSeverity(event *output.ResultEvent) string {
switch event.Info.SeverityHolder.Severity { switch event.Info.SeverityHolder.Severity {
case goflags.Info: case severity.Info:
return "note" return "note"
case goflags.Low, goflags.Medium: case severity.Low, severity.Medium:
return "warning" return "warning"
case goflags.High, goflags.Critical: case severity.High, severity.Critical:
return "error" return "error"
default: default:
return "note" return "note"

View File

@ -1,7 +1,7 @@
package reporting package reporting
import ( import (
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"github.com/projectdiscovery/nuclei/v2/pkg/model" "github.com/projectdiscovery/nuclei/v2/pkg/model"
"github.com/projectdiscovery/nuclei/v2/pkg/utils" "github.com/projectdiscovery/nuclei/v2/pkg/utils"
"strings" "strings"
@ -38,8 +38,8 @@ type Options struct {
// Filter filters the received event and decides whether to perform // Filter filters the received event and decides whether to perform
// reporting for it or not. // reporting for it or not.
type Filter struct { type Filter struct {
Severities goflags.Severities `yaml:"severity"` Severities severity.Severities `yaml:"severity"`
Tags model.StringSlice `yaml:"tags"` Tags model.StringSlice `yaml:"tags"`
} }
// GetMatch returns true if a filter matches result event // GetMatch returns true if a filter matches result event

View File

@ -4,7 +4,7 @@ package types
import ( import (
"fmt" "fmt"
"github.com/projectdiscovery/goflags" "github.com/projectdiscovery/nuclei/v2/internal/severity"
"strconv" "strconv"
"strings" "strings"
) )
@ -44,9 +44,9 @@ func ToString(data interface{}) string {
return strconv.FormatUint(uint64(s), 10) return strconv.FormatUint(uint64(s), 10)
case []byte: case []byte:
return string(s) return string(s)
case goflags.SeverityHolder: case severity.SeverityHolder:
return s.Severity.String() return s.Severity.String()
case goflags.Severity: case severity.Severity:
return s.String() return s.String()
case fmt.Stringer: case fmt.Stringer:
return s.String() return s.String()

View File

@ -1,6 +1,9 @@
package types package types
import "github.com/projectdiscovery/goflags" import (
"github.com/projectdiscovery/goflags"
"github.com/projectdiscovery/nuclei/v2/internal/severity"
)
// Options contains the configuration options for nuclei scanner. // Options contains the configuration options for nuclei scanner.
type Options struct { type Options struct {
@ -18,8 +21,8 @@ type Options struct {
ExcludedTemplates goflags.StringSlice ExcludedTemplates goflags.StringSlice
// CustomHeaders is the list of custom global headers to send with each request. // CustomHeaders is the list of custom global headers to send with each request.
CustomHeaders goflags.StringSlice CustomHeaders goflags.StringSlice
// Severity filters templates based on their severity and only run the matching ones. // Severities filters templates based on their severity and only run the matching ones.
Severity goflags.Severities Severities severity.Severities
// Author filters templates based on their author and only run the matching ones. // Author filters templates based on their author and only run the matching ones.
Author goflags.StringSlice Author goflags.StringSlice
// IncludeTags includes specified tags to be run even while being in denylist // IncludeTags includes specified tags to be run even while being in denylist