middleware.go (1526B)
1 package middleware 2 3 import ( 4 "context" 5 "sync/atomic" 6 "time" 7 8 internalcontext "github.com/aws/aws-sdk-go-v2/internal/context" 9 "github.com/aws/smithy-go/middleware" 10 ) 11 12 // AddTimeOffsetMiddleware sets a value representing clock skew on the request context. 13 // This can be read by other operations (such as signing) to correct the date value they send 14 // on the request 15 type AddTimeOffsetMiddleware struct { 16 Offset *atomic.Int64 17 } 18 19 // ID the identifier for AddTimeOffsetMiddleware 20 func (m *AddTimeOffsetMiddleware) ID() string { return "AddTimeOffsetMiddleware" } 21 22 // HandleBuild sets a value for attemptSkew on the request context if one is set on the client. 23 func (m AddTimeOffsetMiddleware) HandleBuild(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) ( 24 out middleware.BuildOutput, metadata middleware.Metadata, err error, 25 ) { 26 if m.Offset != nil { 27 offset := time.Duration(m.Offset.Load()) 28 ctx = internalcontext.SetAttemptSkewContext(ctx, offset) 29 } 30 return next.HandleBuild(ctx, in) 31 } 32 33 // HandleDeserialize gets the clock skew context from the context, and if set, sets it on the pointer 34 // held by AddTimeOffsetMiddleware 35 func (m *AddTimeOffsetMiddleware) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( 36 out middleware.DeserializeOutput, metadata middleware.Metadata, err error, 37 ) { 38 if v := internalcontext.GetAttemptSkewContext(ctx); v != 0 { 39 m.Offset.Store(v.Nanoseconds()) 40 } 41 return next.HandleDeserialize(ctx, in) 42 }