1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package smithy
- import (
- "context"
- "fmt"
- v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
- "github.com/aws/aws-sdk-go-v2/internal/sdk"
- "github.com/aws/smithy-go"
- "github.com/aws/smithy-go/auth"
- "github.com/aws/smithy-go/logging"
- smithyhttp "github.com/aws/smithy-go/transport/http"
- )
- // V4SignerAdapter adapts v4.HTTPSigner to smithy http.Signer.
- type V4SignerAdapter struct {
- Signer v4.HTTPSigner
- Logger logging.Logger
- LogSigning bool
- }
- var _ (smithyhttp.Signer) = (*V4SignerAdapter)(nil)
- // SignRequest signs the request with the provided identity.
- func (v *V4SignerAdapter) SignRequest(ctx context.Context, r *smithyhttp.Request, identity auth.Identity, props smithy.Properties) error {
- ca, ok := identity.(*CredentialsAdapter)
- if !ok {
- return fmt.Errorf("unexpected identity type: %T", identity)
- }
- name, ok := smithyhttp.GetSigV4SigningName(&props)
- if !ok {
- return fmt.Errorf("sigv4 signing name is required")
- }
- region, ok := smithyhttp.GetSigV4SigningRegion(&props)
- if !ok {
- return fmt.Errorf("sigv4 signing region is required")
- }
- hash := v4.GetPayloadHash(ctx)
- err := v.Signer.SignHTTP(ctx, ca.Credentials, r.Request, hash, name, region, sdk.NowTime(), func(o *v4.SignerOptions) {
- o.DisableURIPathEscaping, _ = smithyhttp.GetDisableDoubleEncoding(&props)
- o.Logger = v.Logger
- o.LogSigning = v.LogSigning
- })
- if err != nil {
- return fmt.Errorf("sign http: %w", err)
- }
- return nil
- }
|