Path: blob/dev/pkg/protocols/http/signer/signer.go
2072 views
package signer12import (3"context"4"errors"5"net/http"67"github.com/projectdiscovery/nuclei/v3/pkg/types"8)910// An Argument that can be passed to Signer11type SignerArg string1213type Signer interface {14SignHTTP(ctx context.Context, request *http.Request) error15}1617type SignerArgs interface {18Validate() error19}2021func NewSigner(args SignerArgs) (signer Signer, err error) {22switch signerArgs := args.(type) {23case *AWSOptions:24awsSigner, err := NewAwsSigner(signerArgs)25if err != nil {26awsSigner, err = NewAwsSignerFromConfig(signerArgs)27if err != nil {28return nil, err29}30}31return awsSigner, err32default:33return nil, errors.New("unknown signature arguments type")34}35}3637// GetCtxWithArgs creates and returns context with signature args38func GetCtxWithArgs(maps ...map[string]interface{}) context.Context {39var region, service string40for _, v := range maps {41for key, val := range v {42if key == "region" && region == "" {43region = types.ToString(val)44}45if key == "service" && service == "" {46service = types.ToString(val)47}48}49}50// type ctxkey string51ctx := context.WithValue(context.Background(), SignerArg("service"), service)52return context.WithValue(ctx, SignerArg("region"), region)53}545556