diff --git a/bindings/aws/s3/s3.go b/bindings/aws/s3/s3.go index fa0d6ce04..446f9362d 100644 --- a/bindings/aws/s3/s3.go +++ b/bindings/aws/s3/s3.go @@ -42,14 +42,15 @@ type AWSS3 struct { } type s3Metadata struct { - Region string `json:"region"` - Endpoint string `json:"endpoint"` - AccessKey string `json:"accessKey"` - SecretKey string `json:"secretKey"` - SessionToken string `json:"sessionToken"` - Bucket string `json:"bucket"` - DecodeBase64 bool `json:"decodeBase64,string"` - EncodeBase64 bool `json:"encodeBase64,string"` + Region string `json:"region"` + Endpoint string `json:"endpoint"` + AccessKey string `json:"accessKey"` + SecretKey string `json:"secretKey"` + SessionToken string `json:"sessionToken"` + Bucket string `json:"bucket"` + DecodeBase64 bool `json:"decodeBase64,string"` + EncodeBase64 bool `json:"encodeBase64,string"` + ForcePathStyle bool `json:"forcePathStyle,string"` } type createResponse struct { @@ -79,10 +80,13 @@ func (s *AWSS3) Init(metadata bindings.Metadata) error { if err != nil { return err } + + cfg := aws.NewConfig().WithS3ForcePathStyle(m.ForcePathStyle) + s.metadata = m - s.s3Client = s3.New(session) - s.downloader = s3manager.NewDownloader(session) - s.uploader = s3manager.NewUploader(session) + s.s3Client = s3.New(session, cfg) + s.downloader = s3manager.NewDownloaderWithClient(s.s3Client) + s.uploader = s3manager.NewUploaderWithClient(s.s3Client) return nil } diff --git a/bindings/aws/s3/s3_test.go b/bindings/aws/s3/s3_test.go index 0fbb6e38b..b93b0f20a 100644 --- a/bindings/aws/s3/s3_test.go +++ b/bindings/aws/s3/s3_test.go @@ -18,7 +18,7 @@ func TestParseMetadata(t *testing.T) { t.Run("Has correct metadata", func(t *testing.T) { m := bindings.Metadata{} m.Properties = map[string]string{ - "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", + "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true", } s3 := AWSS3{} meta, err := s3.parseMetadata(m) @@ -29,6 +29,7 @@ func TestParseMetadata(t *testing.T) { assert.Equal(t, "test", meta.Bucket) assert.Equal(t, "endpoint", meta.Endpoint) assert.Equal(t, "token", meta.SessionToken) + assert.Equal(t, true, meta.ForcePathStyle) }) } @@ -36,7 +37,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { t.Run("Has merged metadata", func(t *testing.T) { m := bindings.Metadata{} m.Properties = map[string]string{ - "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", + "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true", } s3 := AWSS3{} meta, err := s3.parseMetadata(m) @@ -47,6 +48,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { assert.Equal(t, "test", meta.Bucket) assert.Equal(t, "endpoint", meta.Endpoint) assert.Equal(t, "token", meta.SessionToken) + assert.Equal(t, true, meta.ForcePathStyle) request := bindings.InvokeRequest{} request.Metadata = map[string]string{ @@ -65,6 +67,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { assert.Equal(t, "test", mergedMeta.Bucket) assert.Equal(t, "endpoint", mergedMeta.Endpoint) assert.Equal(t, "token", mergedMeta.SessionToken) + assert.Equal(t, true, meta.ForcePathStyle) assert.Equal(t, true, mergedMeta.DecodeBase64) assert.Equal(t, false, mergedMeta.EncodeBase64) }) @@ -72,7 +75,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { t.Run("Has invalid merged metadata decodeBase64", func(t *testing.T) { m := bindings.Metadata{} m.Properties = map[string]string{ - "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", + "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true", } s3 := AWSS3{} meta, err := s3.parseMetadata(m) @@ -83,6 +86,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { assert.Equal(t, "test", meta.Bucket) assert.Equal(t, "endpoint", meta.Endpoint) assert.Equal(t, "token", meta.SessionToken) + assert.Equal(t, true, meta.ForcePathStyle) request := bindings.InvokeRequest{} request.Metadata = map[string]string{ @@ -98,7 +102,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { t.Run("Has invalid merged metadata encodeBase64", func(t *testing.T) { m := bindings.Metadata{} m.Properties = map[string]string{ - "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", + "AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true", } s3 := AWSS3{} meta, err := s3.parseMetadata(m) @@ -109,6 +113,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { assert.Equal(t, "test", meta.Bucket) assert.Equal(t, "endpoint", meta.Endpoint) assert.Equal(t, "token", meta.SessionToken) + assert.Equal(t, true, meta.ForcePathStyle) request := bindings.InvokeRequest{} request.Metadata = map[string]string{