Involved Source Files
Package customizations provides customizations for the Amazon S3 API client.
This package provides support for following S3 customizations
ProcessARN Middleware: processes an ARN if provided as input and updates the endpoint as per the arn type
UpdateEndpoint Middleware: resolves a custom endpoint as per s3 config options
RemoveBucket Middleware: removes a serialized bucket name from request url path
processResponseWith200Error Middleware: Deserializing response error with 200 status code
# Virtual Host style url addressing
Since serializers serialize by default as path style url, we use customization
to modify the endpoint url when `UsePathStyle` option on S3Client is unset or
false. This flag will be ignored if `UseAccelerate` option is set to true.
If UseAccelerate is not enabled, and the bucket name is not a valid hostname
label, they SDK will fallback to forcing the request to be made as if
UsePathStyle was enabled. This behavior is also used if UseDualStackEndpoint is enabled.
https://docs.aws.amazon.com/AmazonS3/latest/dev/dual-stack-endpoints.html#dual-stack-endpoints-description
# Transfer acceleration
By default S3 Transfer acceleration support is disabled. By enabling `UseAccelerate`
option on S3Client, one can enable s3 transfer acceleration support. Transfer
acceleration only works with Virtual Host style addressing, and thus `UsePathStyle`
option if set is ignored. Transfer acceleration is not supported for S3 operations
DeleteBucket, ListBuckets, and CreateBucket.
# Dualstack support
By default dualstack support for s3 client is disabled. By enabling `UseDualstack`
option on s3 client, you can enable dualstack endpoint support.
# Endpoint customizations
Customizations to lookup ARN, process ARN needs to happen before request serialization.
UpdateEndpoint middleware which mutates resources based on Options such as
UseDualstack, UseAccelerate for modifying resolved endpoint are executed after
request serialization. Remove bucket middleware is executed after
an request is serialized, and removes the serialized bucket name from request path
Middleware layering:
Initialize : HTTP Request -> ARN Lookup -> Input-Validation -> Serialize step
Serialize : HTTP Request -> Process ARN -> operation serializer -> Update-Endpoint customization -> Remove-Bucket -> next middleware
Customization options:
UseARNRegion (Disabled by Default)
UsePathStyle (Disabled by Default)
UseAccelerate (Disabled by Default)
UseDualstack (Disabled by Default)
# Handle Error response with 200 status code
S3 operations: CopyObject, CompleteMultipartUpload, UploadPartCopy can have an
error Response with status code 2xx. The processResponseWith200Error middleware
customizations enables SDK to check for an error within response body prior to
deserialization.
As the check for 2xx response containing an error needs to be performed earlier
than response deserialization. Since the behavior of Deserialization is in
reverse order to the other stack steps its easier to consider that "after" means
"before".
Middleware layering:
HTTP Response -> handle 200 error customization -> deserialize
handle_200_error.gohost.gopresigned_expires.goprocess_arn_resource.goremove_bucket_middleware.gos3_object_lambda.gosigner_wrapper.goupdate_endpoint.go
Package-Level Type Names (total 18, in which 9 are exported)
/* sort exporteds by: | */
AddExpiresOnPresignedURL represents a build middleware used to assign
expiration on a presigned URL.
Expires is time.Duration within which presigned url should be expired.
This should be the duration in seconds the presigned URL should be considered valid for.
By default the S3 presigned url expires in 15 minutes ie. 900 seconds.
HandleBuild handles the build step middleware behavior
ID representing the middleware
*AddExpiresOnPresignedURL : github.com/aws/smithy-go/middleware.BuildMiddleware
*AddExpiresOnPresignedURL : github.com/aws/smithy-go/middleware.ider
EndpointResolverOptions is the service endpoint resolver options
PresignHTTPRequestMiddleware provides the Finalize middleware for creating a
presigned URL for an HTTP request.
Will short circuit the middleware stack and not forward onto the next
Finalize handler.
cred provider and signer for sigv4
log signing
sigV4 signer
sigV4a signer
HandleFinalize will take the provided input and create a presigned url for
the http request using the SigV4 or SigV4a presign authentication scheme.
Since the signed request is not a valid HTTP request
ID provides the middleware ID.
*PresignHTTPRequestMiddleware : github.com/aws/smithy-go/middleware.FinalizeMiddleware
*PresignHTTPRequestMiddleware : github.com/aws/smithy-go/middleware.ider
func NewPresignHTTPRequestMiddleware(options PresignHTTPRequestMiddlewareOptions) *PresignHTTPRequestMiddleware
func RegisterPreSigningMiddleware(stack *middleware.Stack, signingMiddleware *PresignHTTPRequestMiddleware) (err error)
SignHTTPRequestMiddleware is a `FinalizeMiddleware` implementation to select HTTP Signing method
credential provider
log signing
v4 signer
v4a signer
HandleFinalize will take the provided input and sign the request using the SigV4 authentication scheme
ID is the SignHTTPRequestMiddleware identifier
*SignHTTPRequestMiddleware : github.com/aws/smithy-go/middleware.FinalizeMiddleware
*SignHTTPRequestMiddleware : github.com/aws/smithy-go/middleware.ider
func NewSignHTTPRequestMiddleware(options SignHTTPRequestMiddlewareOptions) *SignHTTPRequestMiddleware
func RegisterSigningMiddleware(stack *middleware.Stack, signingMiddleware *SignHTTPRequestMiddleware) (err error)
SignHTTPRequestMiddlewareOptions is the configuration options for the SignHTTPRequestMiddleware middleware.
credential provider
log signing
v4 signer
v4a signer
func NewSignHTTPRequestMiddleware(options SignHTTPRequestMiddlewareOptions) *SignHTTPRequestMiddleware
UpdateEndpointOptions provides the options for the UpdateEndpoint middleware setup.
Accessor are parameter accessors used by the middleware
DisableMultiRegionAccessPoints indicates multi-region access point support is disabled
EndpointResolver used to resolve endpoints. This may be a custom endpoint resolver
EndpointResolverOptions used by endpoint resolver
indicates if an operation supports s3 transfer acceleration.
Indicates that the operation should target the s3-object-lambda endpoint.
Used to direct operations that do not route based on an input ARN.
use ARN region
use transfer acceleration
use path style
func UpdateEndpoint(stack *middleware.Stack, options UpdateEndpointOptions) (err error)
UpdateEndpointParameterAccessor represents accessor functions used by the middleware
functional pointer to fetch bucket name from provided input.
The function is intended to take an input value, and
return a string pointer to value of string, and bool if
input has no bucket member.
processARNResource is used to process an ARN resource.
DisableMultiRegionAccessPoints indicates multi-region access point support is disabled
EndpointResolver used to resolve endpoints. This may be a custom endpoint resolver
EndpointResolverOptions used by endpoint resolver
UseARNRegion indicates if region parsed from an ARN should be used.
UseAccelerate indicates if s3 transfer acceleration is enabled
(*processARNResource) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (out middleware.SerializeOutput, metadata middleware.Metadata, err error)
ID returns the middleware ID.
*processARNResource : github.com/aws/smithy-go/middleware.SerializeMiddleware
*processARNResource : github.com/aws/smithy-go/middleware.ider
Package-Level Functions (total 23, in which 8 are exported)
GetSignerVersion retrieves the signer version to use for signing
Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
to clear all stack values.
HandleResponseErrorWith200Status check for S3 200 error response.
If an s3 200 error is found, status code for the response is modified temporarily to
5xx response status code.
NewPresignHTTPRequestMiddleware constructs a PresignHTTPRequestMiddleware using the given Signer for signing requests
NewSignHTTPRequestMiddleware constructs a SignHTTPRequestMiddleware using the given Signer for signing requests
RegisterPreSigningMiddleware registers the wrapper pre-signing middleware to the stack. If a pre-signing middleware is already
present, this provided middleware will be swapped. Otherwise the middleware will be added at the tail of the
finalize step.
RegisterSigningMiddleware registers the wrapper signing middleware to the stack. If a signing middleware is already
present, this provided middleware will be swapped. Otherwise the middleware will be added at the tail of the
finalize step.
SetSignerVersion sets the signer version to be used for signing the request
Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
to clear all stack values.
UpdateEndpoint adds the middleware to the middleware stack based on the UpdateEndpointOptions.
dnsCompatibleBucketName returns true if the bucket name is DNS compatible.
Buckets created outside of the classic region MUST be DNS compatible.
getRemoveBucketFromPath returns the bucket name to remove from the path.
Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
to clear all stack values.
hostCompatibleBucketName returns true if the request should
put the bucket in the host. This is false if the bucket is not
DNS compatible or the EndpointResolver resolves an aws.Endpoint with
HostnameImmutable member set to true.
https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#Endpoint.HostnameImmutable
updates endpoint to use virtual host styling
remove bucket from url
setBucketToRemoveOnContext sets the bucket name to be removed.
Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
to clear all stack values.