2021-11-26 13:49:12 +01:00
|
|
|
package signer
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"net/http"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Signer interface {
|
|
|
|
|
SignHTTP(request *http.Request, args interface{}) error
|
|
|
|
|
CalculateHTTPHeaders(request *http.Request, args interface{}) (map[string]string, error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SignerArgs interface {
|
|
|
|
|
Validate() error
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SignatureArguments interface {
|
|
|
|
|
Validate() error
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewSigner(args SignerArgs) (signer Signer, err error) {
|
|
|
|
|
switch signerArgs := args.(type) {
|
|
|
|
|
case AwsSignerArgs:
|
|
|
|
|
awsSigner, err := NewAwsSigner(signerArgs)
|
|
|
|
|
if err != nil {
|
2021-12-18 20:06:51 +01:00
|
|
|
// $HOME/.aws/credentials
|
|
|
|
|
awsSigner, err = NewAwsSignerFromFile()
|
2021-11-26 13:49:12 +01:00
|
|
|
if err != nil {
|
2021-12-18 20:06:51 +01:00
|
|
|
// env variables
|
|
|
|
|
awsSigner, err = NewAwsSignerFromEnv()
|
2021-11-26 13:49:12 +01:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return awsSigner, err
|
|
|
|
|
default:
|
|
|
|
|
return nil, errors.New("unknown signature arguments type")
|
|
|
|
|
}
|
|
|
|
|
}
|