From b1702d749e96cc0869b37bfd825e417cf809994c Mon Sep 17 00:00:00 2001 From: Seth Pollack Date: Thu, 23 Feb 2017 11:55:52 -0500 Subject: [PATCH] validate region --- util/pkg/vfs/s3context.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/util/pkg/vfs/s3context.go b/util/pkg/vfs/s3context.go index d67cdce942..ce3f913636 100644 --- a/util/pkg/vfs/s3context.go +++ b/util/pkg/vfs/s3context.go @@ -18,14 +18,16 @@ package vfs import ( "fmt" + "os" + "sync" + "time" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/s3" "github.com/golang/glog" - "os" - "sync" - "time" ) type S3Context struct { @@ -76,6 +78,10 @@ func (s *S3Context) getRegionForBucket(bucket string) (string, error) { awsRegion = "us-east-1" } + if err := validateRegion(awsRegion); err != nil { + return "", err + } + request := &s3.GetBucketLocationInput{ Bucket: &bucket, } @@ -155,3 +161,16 @@ func bruteforceBucketLocation(region *string, request *s3.GetBucketLocationInput return nil, fmt.Errorf("Could not retrieve location for AWS bucket %s", *request.Bucket) } } + +func validateRegion(region string) error { + resolver := endpoints.DefaultResolver() + partitions := resolver.(endpoints.EnumPartitions).Partitions() + for _, p := range partitions { + for _, r := range p.Regions() { + if r.ID() == region { + return nil + } + } + } + return fmt.Errorf("%s is not a valid region\nPlease check that your region is formatted correctly (i.e. us-east-1)", region) +}