1
15
16 package software.amazon.awssdk.services.s3.internal.handlers;
17
18 import software.amazon.awssdk.annotations.SdkInternalApi;
19 import software.amazon.awssdk.awscore.AwsExecutionAttribute;
20 import software.amazon.awssdk.core.SdkRequest;
21 import software.amazon.awssdk.core.interceptor.Context;
22 import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
23 import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
24 import software.amazon.awssdk.regions.Region;
25 import software.amazon.awssdk.services.s3.internal.BucketUtils;
26 import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration;
27 import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
28
29 @SdkInternalApi
30 public final class CreateBucketInterceptor implements ExecutionInterceptor {
31
32 @Override
33 public SdkRequest modifyRequest(Context.ModifyRequest context, ExecutionAttributes executionAttributes) {
34 SdkRequest sdkRequest = context.request();
35
36 if (sdkRequest instanceof CreateBucketRequest) {
37 CreateBucketRequest request = (CreateBucketRequest) sdkRequest;
38 validateBucketNameIsS3Compatible(request.bucket());
39
40 if (request.createBucketConfiguration() == null || request.createBucketConfiguration().locationConstraint() == null) {
41 Region region = executionAttributes.getAttribute(AwsExecutionAttribute.AWS_REGION);
42 sdkRequest = request.toBuilder()
43 .createBucketConfiguration(toLocationConstraint(region))
44 .build();
45 }
46 }
47
48 return sdkRequest;
49 }
50
51 private CreateBucketConfiguration toLocationConstraint(Region region) {
52 if (region.equals(Region.US_EAST_1)) {
53
54 return null;
55 }
56 return CreateBucketConfiguration.builder()
57 .locationConstraint(region.id())
58 .build();
59 }
60
61
70 private void validateBucketNameIsS3Compatible(String bucketName) {
71 BucketUtils.isValidDnsBucketName(bucketName, true);
72 }
73 }
74