open-vault/vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go

107 lines
3.2 KiB
Go
Raw Normal View History

2015-05-20 15:46:21 +00:00
package s3
import (
"io/ioutil"
"regexp"
2015-06-03 19:07:39 +00:00
"github.com/aws/aws-sdk-go/aws"
2015-06-29 22:05:44 +00:00
"github.com/aws/aws-sdk-go/aws/awserr"
2015-06-03 19:07:39 +00:00
"github.com/aws/aws-sdk-go/aws/awsutil"
2015-09-22 15:44:21 +00:00
"github.com/aws/aws-sdk-go/aws/request"
2015-05-20 15:46:21 +00:00
)
var reBucketLocation = regexp.MustCompile(`>([^<>]+)<\/Location`)
2017-05-24 13:40:58 +00:00
// NormalizeBucketLocation is a utility function which will update the
// passed in value to always be a region ID. Generally this would be used
// with GetBucketLocation API operation.
//
// Replaces empty string with "us-east-1", and "EU" with "eu-west-1".
//
// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html
// for more information on the values that can be returned.
func NormalizeBucketLocation(loc string) string {
switch loc {
case "":
loc = "us-east-1"
case "EU":
loc = "eu-west-1"
}
return loc
}
// NormalizeBucketLocationHandler is a request handler which will update the
// GetBucketLocation's result LocationConstraint value to always be a region ID.
//
// Replaces empty string with "us-east-1", and "EU" with "eu-west-1".
//
// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html
// for more information on the values that can be returned.
//
// req, result := svc.GetBucketLocationRequest(&s3.GetBucketLocationInput{
// Bucket: aws.String(bucket),
// })
// req.Handlers.Unmarshal.PushBackNamed(NormalizeBucketLocationHandler)
// err := req.Send()
var NormalizeBucketLocationHandler = request.NamedHandler{
Name: "awssdk.s3.NormalizeBucketLocation",
Fn: func(req *request.Request) {
if req.Error != nil {
return
}
out := req.Data.(*GetBucketLocationOutput)
loc := NormalizeBucketLocation(aws.StringValue(out.LocationConstraint))
out.LocationConstraint = aws.String(loc)
},
}
// WithNormalizeBucketLocation is a request option which will update the
// GetBucketLocation's result LocationConstraint value to always be a region ID.
//
// Replaces empty string with "us-east-1", and "EU" with "eu-west-1".
//
// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html
// for more information on the values that can be returned.
//
// result, err := svc.GetBucketLocationWithContext(ctx,
// &s3.GetBucketLocationInput{
// Bucket: aws.String(bucket),
// },
// s3.WithNormalizeBucketLocation,
// )
func WithNormalizeBucketLocation(r *request.Request) {
r.Handlers.Unmarshal.PushBackNamed(NormalizeBucketLocationHandler)
}
2015-09-22 15:44:21 +00:00
func buildGetBucketLocation(r *request.Request) {
2015-05-20 15:46:21 +00:00
if r.DataFilled() {
out := r.Data.(*GetBucketLocationOutput)
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
if err != nil {
2015-06-29 22:05:44 +00:00
r.Error = awserr.New("SerializationError", "failed reading response body", err)
2015-05-20 15:46:21 +00:00
return
}
match := reBucketLocation.FindSubmatch(b)
if len(match) > 1 {
loc := string(match[1])
2017-05-24 13:40:58 +00:00
out.LocationConstraint = aws.String(loc)
2015-05-20 15:46:21 +00:00
}
}
}
2015-09-22 15:44:21 +00:00
func populateLocationConstraint(r *request.Request) {
2015-10-30 22:07:00 +00:00
if r.ParamsFilled() && aws.StringValue(r.Config.Region) != "us-east-1" {
2015-05-20 15:46:21 +00:00
in := r.Params.(*CreateBucketInput)
if in.CreateBucketConfiguration == nil {
r.Params = awsutil.CopyOf(r.Params)
in = r.Params.(*CreateBucketInput)
in.CreateBucketConfiguration = &CreateBucketConfiguration{
2015-10-30 22:07:00 +00:00
LocationConstraint: r.Config.Region,
2015-05-20 15:46:21 +00:00
}
}
}
}