blob: 160f7b76800105f0821aaa3e2125770d3dd60380 [file] [log] [blame] [edit]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package s3
import (
"context"
"net/http"
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
"github.com/aws/smithy-go"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
)
// This will not be needed once https://github.com/aws/aws-sdk-go-v2/issues/2282
// is addressed
func addS3WrongRegionErrorMiddleware(stack *middleware.Stack) error {
return stack.Deserialize.Insert(
&s3WrongRegionErrorMiddleware{},
"ResponseErrorWrapper",
middleware.After,
)
}
var _ middleware.DeserializeMiddleware = &s3WrongRegionErrorMiddleware{}
type s3WrongRegionErrorMiddleware struct{}
func (m *s3WrongRegionErrorMiddleware) ID() string {
return "tf_S3WrongRegionErrorMiddleware"
}
func (m *s3WrongRegionErrorMiddleware) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) (
out middleware.DeserializeOutput, metadata middleware.Metadata, err error,
) {
out, metadata, err = next.HandleDeserialize(ctx, in)
if err == nil || !IsA[*smithy.GenericAPIError](err) {
return out, metadata, err
}
resp, ok := out.RawResponse.(*smithyhttp.Response)
if !ok || resp.StatusCode != http.StatusMovedPermanently {
return out, metadata, err
}
reqRegion := awsmiddleware.GetRegion(ctx)
bucketRegion := resp.Header.Get("X-Amz-Bucket-Region")
err = newBucketRegionError(reqRegion, bucketRegion)
return out, metadata, err
}