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  }