github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/http/signer/signer.go (about) 1 package signer 2 3 import ( 4 "context" 5 "errors" 6 "net/http" 7 8 "github.com/projectdiscovery/nuclei/v2/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 }