@Provides
@LazySingleton
public ServerSideEncryptingAmazonS3 getAmazonS3Client(
AWSCredentialsProvider provider,
AWSProxyConfig proxyConfig,
AWSEndpointConfig endpointConfig,
AWSClientConfig clientConfig,
S3StorageConfig storageConfig
)
{
final ClientConfiguration configuration = new ClientConfigurationFactory().getConfig();
final Protocol protocol = determineProtocol(clientConfig, endpointConfig);
final AmazonS3ClientBuilder builder = AmazonS3Client
.builder()
.withCredentials(provider)
.withClientConfiguration(setProxyConfig(configuration, proxyConfig).withProtocol(protocol))
.withChunkedEncodingDisabled(clientConfig.isDisableChunkedEncoding())
.withPathStyleAccessEnabled(clientConfig.isEnablePathStyleAccess())
.withForceGlobalBucketAccessEnabled(clientConfig.isForceGlobalBucketAccessEnabled());
if (StringUtils.isNotEmpty(endpointConfig.getUrl())) {
builder.setEndpointConfiguration(
new EndpointConfiguration(endpointConfig.getUrl(), endpointConfig.getSigningRegion())
);
}
return new ServerSideEncryptingAmazonS3(builder.build(), storageConfig.getServerSideEncryption());
}