// New returns a BlobstoreClient if the configuration file backing configFile is valid func New(configFile io.Reader) (S3Blobstore, error) { c, err := config.NewFromReader(configFile) if err != nil { return S3Blobstore{}, err } transport := *http.DefaultTransport.(*http.Transport) transport.TLSClientConfig = &tls.Config{ InsecureSkipVerify: !c.SSLVerifyPeer, } httpClient := &http.Client{Transport: &transport} s3Config := aws.NewConfig(). WithLogLevel(aws.LogOff). WithS3ForcePathStyle(true). WithDisableSSL(!c.UseSSL). WithHTTPClient(httpClient) if c.UseRegion() { s3Config = s3Config.WithRegion(c.Region).WithEndpoint(c.S3Endpoint()) } else { s3Config = s3Config.WithRegion(config.EmptyRegion).WithEndpoint(c.S3Endpoint()) } if c.CredentialsSource == config.StaticCredentialsSource { s3Config = s3Config.WithCredentials(credentials.NewStaticCredentials(c.AccessKeyID, c.SecretAccessKey, "")) } if c.CredentialsSource == config.NoneCredentialsSource { s3Config = s3Config.WithCredentials(credentials.AnonymousCredentials) } s3Session := session.New(s3Config) s3Client := s3.New(s3Session) if c.UseV2SigningMethod { setv2Handlers(s3Client) } return S3Blobstore{s3Client: s3Client, s3cliConfig: c}, nil }
var _ = Describe("BlobstoreClient configuration", func() { Describe("ignoring region configuration", func() { It("allows for the S3 SDK to be configured with empty region information", func() { Expect(config.EmptyRegion).To(Equal(" ")) }) }) Describe("building a configuration", func() { Describe("checking that either host or region has been set", func() { Context("when host has been set but not region", func() { It("reports that region should not be used for SDK configuration", func() { dummyJSONBytes := []byte(`{"access_key_id": "id", "secret_access_key": "key", "bucket_name": "some-bucket", "host": "some-host"}`) dummyJSONReader := bytes.NewReader(dummyJSONBytes) c, err := config.NewFromReader(dummyJSONReader) Expect(err).ToNot(HaveOccurred()) Expect(c.UseRegion()).To(BeFalse()) Expect(c.Host).To(Equal("some-host")) Expect(c.Region).To(Equal("")) }) }) Context("when region has been set but not host", func() { It("reports that region should be used for SDK configuration", func() { dummyJSONBytes := []byte(`{"access_key_id": "id", "secret_access_key": "key", "bucket_name": "some-bucket", "region": "some-region"}`) dummyJSONReader := bytes.NewReader(dummyJSONBytes) c, err := config.NewFromReader(dummyJSONReader) Expect(err).ToNot(HaveOccurred()) Expect(c.UseRegion()).To(BeTrue())