Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/protocols/http/signer/signer.go
2072 views
1
package signer
2
3
import (
4
"context"
5
"errors"
6
"net/http"
7
8
"github.com/projectdiscovery/nuclei/v3/pkg/types"
9
)
10
11
// An Argument that can be passed to Signer
12
type SignerArg string
13
14
type Signer interface {
15
SignHTTP(ctx context.Context, request *http.Request) error
16
}
17
18
type SignerArgs interface {
19
Validate() error
20
}
21
22
func NewSigner(args SignerArgs) (signer Signer, err error) {
23
switch signerArgs := args.(type) {
24
case *AWSOptions:
25
awsSigner, err := NewAwsSigner(signerArgs)
26
if err != nil {
27
awsSigner, err = NewAwsSignerFromConfig(signerArgs)
28
if err != nil {
29
return nil, err
30
}
31
}
32
return awsSigner, err
33
default:
34
return nil, errors.New("unknown signature arguments type")
35
}
36
}
37
38
// GetCtxWithArgs creates and returns context with signature args
39
func GetCtxWithArgs(maps ...map[string]interface{}) context.Context {
40
var region, service string
41
for _, v := range maps {
42
for key, val := range v {
43
if key == "region" && region == "" {
44
region = types.ToString(val)
45
}
46
if key == "service" && service == "" {
47
service = types.ToString(val)
48
}
49
}
50
}
51
// type ctxkey string
52
ctx := context.WithValue(context.Background(), SignerArg("service"), service)
53
return context.WithValue(ctx, SignerArg("region"), region)
54
}
55
56