src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

v4signer_adapter.go (1620B)


      1 package smithy
      2 
      3 import (
      4 	"context"
      5 	"fmt"
      6 
      7 	v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
      8 	internalcontext "github.com/aws/aws-sdk-go-v2/internal/context"
      9 	"github.com/aws/aws-sdk-go-v2/internal/sdk"
     10 	"github.com/aws/smithy-go"
     11 	"github.com/aws/smithy-go/auth"
     12 	"github.com/aws/smithy-go/logging"
     13 	smithyhttp "github.com/aws/smithy-go/transport/http"
     14 )
     15 
     16 // V4SignerAdapter adapts v4.HTTPSigner to smithy http.Signer.
     17 type V4SignerAdapter struct {
     18 	Signer     v4.HTTPSigner
     19 	Logger     logging.Logger
     20 	LogSigning bool
     21 }
     22 
     23 var _ (smithyhttp.Signer) = (*V4SignerAdapter)(nil)
     24 
     25 // SignRequest signs the request with the provided identity.
     26 func (v *V4SignerAdapter) SignRequest(ctx context.Context, r *smithyhttp.Request, identity auth.Identity, props smithy.Properties) error {
     27 	ca, ok := identity.(*CredentialsAdapter)
     28 	if !ok {
     29 		return fmt.Errorf("unexpected identity type: %T", identity)
     30 	}
     31 
     32 	name, ok := smithyhttp.GetSigV4SigningName(&props)
     33 	if !ok {
     34 		return fmt.Errorf("sigv4 signing name is required")
     35 	}
     36 
     37 	region, ok := smithyhttp.GetSigV4SigningRegion(&props)
     38 	if !ok {
     39 		return fmt.Errorf("sigv4 signing region is required")
     40 	}
     41 
     42 	hash := v4.GetPayloadHash(ctx)
     43 	signingTime := sdk.NowTime()
     44 	skew := internalcontext.GetAttemptSkewContext(ctx)
     45 	signingTime = signingTime.Add(skew)
     46 	err := v.Signer.SignHTTP(ctx, ca.Credentials, r.Request, hash, name, region, signingTime, func(o *v4.SignerOptions) {
     47 		o.DisableURIPathEscaping, _ = smithyhttp.GetDisableDoubleEncoding(&props)
     48 
     49 		o.Logger = v.Logger
     50 		o.LogSigning = v.LogSigning
     51 	})
     52 	if err != nil {
     53 		return fmt.Errorf("sign http: %w", err)
     54 	}
     55 
     56 	return nil
     57 }