Path: blob/dev/pkg/templates/templates_utils.go
2843 views
package templates12import "github.com/projectdiscovery/nuclei/v3/pkg/protocols"34// HasRequest returns true if the given requests slice is non-empty.5//6// If n is provided, it checks for more than n requests.7func HasRequest[T protocols.Request](requests []T, n ...int) bool {8if len(n) > 0 {9return len(requests) > n[0]10}1112return len(requests) > 013}1415// HasDNSRequest returns true if the template has a DNS request.16//17// If n is provided, it checks for more than n requests.18func (t *Template) HasDNSRequest(n ...int) bool {19return HasRequest(t.RequestsDNS, n...)20}2122// HasFileRequest returns true if the template has a File request.23//24// If n is provided, it checks for more than n requests.25func (t *Template) HasFileRequest(n ...int) bool {26return HasRequest(t.RequestsFile, n...)27}2829// HasHTTPRequest returns true if the template has an HTTP request.30//31// If n is provided, it checks for more than n requests.32func (t *Template) HasHTTPRequest(n ...int) bool {33return HasRequest(t.RequestsHTTP, n...)34}3536// HasHeadlessRequest returns true if the template has a Headless protocol37// request.38//39// If n is provided, it checks for more than n requests.40func (t *Template) HasHeadlessRequest(n ...int) bool {41return HasRequest(t.RequestsHeadless, n...)42}4344// HasNetworkRequest returns true if the template has a Network protocol45// request.46//47// If n is provided, it checks for more than n requests.48func (t *Template) HasNetworkRequest(n ...int) bool {49return HasRequest(t.RequestsNetwork, n...)50}5152// HasSSLRequest returns true if the template has an SSL request.53//54// If n is provided, it checks for more than n requests.55func (t *Template) HasSSLRequest(n ...int) bool {56return HasRequest(t.RequestsSSL, n...)57}5859// HasWebsocketRequest returns true if the template has a Websocket protocol60// request.61//62// If n is provided, it checks for more than n requests.63func (t *Template) HasWebsocketRequest(n ...int) bool {64return HasRequest(t.RequestsWebsocket, n...)65}6667// HasWHOISRequest returns true if the template has a WHOIS request.68//69// If n is provided, it checks for more than n requests.70func (t *Template) HasWHOISRequest(n ...int) bool {71return HasRequest(t.RequestsWHOIS, n...)72}7374// HasCodeRequest returns true if the template has a Code request.75//76// If n is provided, it checks for more than n requests.77func (t *Template) HasCodeRequest(n ...int) bool {78return HasRequest(t.RequestsCode, n...)79}8081// HasJavascriptRequest returns true if the template has a Javascript protocol82// request.83//84// If n is provided, it checks for more than n requests.85func (t *Template) HasJavascriptRequest(n ...int) bool {86return HasRequest(t.RequestsJavascript, n...)87}8889// HasQueueRequests returns true if the template has queued requests.90//91// Queued requests contain all template requests in order (both protocol &92// request order).93//94// If n is provided, it checks for more than n requests.95func (t *Template) HasQueueRequests(n ...int) bool {96return HasRequest(t.RequestsQueue, n...)97}9899// HasWorkflows returns true if the template has workflows defined.100func (t *Template) HasWorkflows() bool {101return len(t.Workflows) > 0102}103104// IsFuzzableRequest returns true if the template has at least one request with105// fuzzing configured.106//107// Currently, it checks across HTTP and Headless requests.108func (t *Template) IsFuzzableRequest() bool {109if t.HasHTTPRequest() {110for _, request := range t.RequestsHTTP {111if request.HasFuzzing() {112return true113}114}115}116117if t.HasHeadlessRequest() {118for _, request := range t.RequestsHeadless {119if request.HasFuzzing() {120return true121}122}123}124125return false126}127128// IsFlowTemplate returns true if the template has a flow defined.129func (template *Template) IsFlowTemplate() bool {130return template.Flow != "" && len(template.Flow) > 0131}132133// IsGlobalMatchersTemplate returns true if the template has global matchers134// defined.135func (template *Template) IsGlobalMatchersTemplate() bool {136return template.Options != nil &&137template.Options.GlobalMatchers != nil &&138template.Options.GlobalMatchers.HasMatchers()139}140141142