Skip to content

Commit 368321f

Browse files
authored
Remove uses of legacy singer attributes (#4914)
1 parent dbe4c47 commit 368321f

File tree

4 files changed

+26
-35
lines changed

4 files changed

+26
-35
lines changed

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/plugins/S3OverrideAuthSchemePropertiesPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ private <T> void putSingerProperty(AuthSchemeOption.Builder builder, SignerPrope
121121
builder.putSignerProperty((SignerProperty<T>) key, (T) value);
122122
}
123123

124-
125124
private boolean addConfiguredProperties(AuthSchemeOption option, S3AuthSchemeParams params) {
126125
String schemeId = option.schemeId();
127126
// We check here that the scheme id is sigV4 or sigV4a or some other in the same family.

services/s3control/src/it/java/software.amazon.awssdk.services.s3control/S3MrapIntegrationTest.java

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,18 @@
2222
import java.io.IOException;
2323
import java.nio.charset.StandardCharsets;
2424
import java.time.Duration;
25-
import java.util.Arrays;
2625
import java.util.Collections;
2726
import java.util.List;
28-
import java.util.Optional;
2927
import java.util.stream.Stream;
3028
import org.junit.jupiter.api.BeforeAll;
3129
import org.junit.jupiter.api.Test;
3230
import org.junit.jupiter.params.ParameterizedTest;
3331
import org.junit.jupiter.params.provider.Arguments;
3432
import org.junit.jupiter.params.provider.MethodSource;
3533
import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute;
36-
import software.amazon.awssdk.auth.signer.S3SignerExecutionAttribute;
3734
import software.amazon.awssdk.auth.signer.internal.SignerConstant;
3835
import software.amazon.awssdk.awscore.presigner.PresignedRequest;
39-
import software.amazon.awssdk.core.SdkRequest;
36+
import software.amazon.awssdk.core.SdkPlugin;
4037
import software.amazon.awssdk.core.interceptor.Context;
4138
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
4239
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
@@ -46,16 +43,14 @@
4643
import software.amazon.awssdk.core.waiters.WaiterAcceptor;
4744
import software.amazon.awssdk.http.HttpExecuteRequest;
4845
import software.amazon.awssdk.http.HttpExecuteResponse;
49-
import software.amazon.awssdk.http.SdkHttpMethod;
5046
import software.amazon.awssdk.http.SdkHttpRequest;
5147
import software.amazon.awssdk.http.apache.ApacheHttpClient;
5248
import software.amazon.awssdk.regions.Region;
5349
import software.amazon.awssdk.services.s3.S3Client;
5450
import software.amazon.awssdk.services.s3.S3Configuration;
51+
import software.amazon.awssdk.services.s3.internal.plugins.S3OverrideAuthSchemePropertiesPlugin;
5552
import software.amazon.awssdk.services.s3.model.BucketAlreadyOwnedByYouException;
5653
import software.amazon.awssdk.services.s3.model.NoSuchKeyException;
57-
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
58-
import software.amazon.awssdk.services.s3.model.UploadPartRequest;
5954
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
6055
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
6156
import software.amazon.awssdk.services.s3control.model.BucketAlreadyExistsException;
@@ -99,7 +94,7 @@ public static void setupFixture() {
9994
.build();
10095

10196
s3Client = mrapEnabledS3Client(Collections.singletonList(captureInterceptor));
102-
s3ClientWithPayloadSigning = mrapEnabledS3Client(Arrays.asList(captureInterceptor, new PayloadSigningInterceptor()));
97+
s3ClientWithPayloadSigning = mrapEnabledS3ClientWithPayloadSigning(captureInterceptor);
10398

10499
stsClient = StsClient.builder()
105100
.credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
@@ -309,6 +304,25 @@ private static S3Client mrapEnabledS3Client(List<ExecutionInterceptor> execution
309304
.build();
310305
}
311306

307+
private static S3Client mrapEnabledS3ClientWithPayloadSigning(ExecutionInterceptor executionInterceptor) {
308+
// We can't use here `S3OverrideAuthSchemePropertiesPlugin.enablePayloadSigningPlugin()` since
309+
// it enables payload signing for *all* operations.
310+
SdkPlugin plugin = S3OverrideAuthSchemePropertiesPlugin.builder()
311+
.payloadSigningEnabled(true)
312+
.addOperationConstraint("UploadPart")
313+
.addOperationConstraint("PutObject")
314+
.build();
315+
return S3Client.builder()
316+
.region(REGION)
317+
.credentialsProvider(CREDENTIALS_PROVIDER_CHAIN)
318+
.serviceConfiguration(S3Configuration.builder()
319+
.useArnRegionEnabled(true)
320+
.build())
321+
.overrideConfiguration(o -> o.addExecutionInterceptor(executionInterceptor))
322+
.addPlugin(plugin)
323+
.build();
324+
}
325+
312326
private void deleteObjectIfExists(S3Client s31, String bucket1, String key) {
313327
System.out.println(bucket1);
314328
try {
@@ -341,21 +355,4 @@ public void beforeTransmission(Context.BeforeTransmission context, ExecutionAttr
341355
this.normalizePath = executionAttributes.getAttribute(AwsSignerExecutionAttribute.SIGNER_NORMALIZE_PATH);
342356
}
343357
}
344-
345-
private static class PayloadSigningInterceptor implements ExecutionInterceptor {
346-
347-
public Optional<RequestBody> modifyHttpContent(Context.ModifyHttpRequest context,
348-
ExecutionAttributes executionAttributes) {
349-
SdkRequest sdkRequest = context.request();
350-
351-
if (sdkRequest instanceof PutObjectRequest || sdkRequest instanceof UploadPartRequest) {
352-
executionAttributes.putAttribute(S3SignerExecutionAttribute.ENABLE_PAYLOAD_SIGNING, true);
353-
}
354-
if (!context.requestBody().isPresent() && context.httpRequest().method().equals(SdkHttpMethod.POST)) {
355-
return Optional.of(RequestBody.fromBytes(new byte[0]));
356-
}
357-
358-
return context.requestBody();
359-
}
360-
}
361358
}

services/s3control/src/main/java/software/amazon/awssdk/services/s3control/internal/interceptors/PayloadSigningInterceptor.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,25 @@
1717

1818
import java.util.Optional;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20-
import software.amazon.awssdk.auth.signer.S3SignerExecutionAttribute;
2120
import software.amazon.awssdk.core.interceptor.Context;
2221
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
2322
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
2423
import software.amazon.awssdk.core.sync.RequestBody;
2524
import software.amazon.awssdk.http.SdkHttpMethod;
2625

2726
/**
28-
* Turns on payload signing and prevents moving query params to body during a POST which S3 doesn't like.
27+
* Prevents moving query params to body during a POST which S3 doesn't like.
2928
*/
3029
@SdkInternalApi
3130
public class PayloadSigningInterceptor implements ExecutionInterceptor {
3231

3332
@Override
3433
public Optional<RequestBody> modifyHttpContent(Context.ModifyHttpRequest context,
3534
ExecutionAttributes executionAttributes) {
36-
executionAttributes.putAttribute(S3SignerExecutionAttribute.ENABLE_PAYLOAD_SIGNING, true);
37-
if (!context.requestBody().isPresent() && context.httpRequest().method() == SdkHttpMethod.POST) {
35+
Optional<RequestBody> bodyOptional = context.requestBody();
36+
if (context.httpRequest().method() == SdkHttpMethod.POST && !bodyOptional.isPresent()) {
3837
return Optional.of(RequestBody.fromBytes(new byte[0]));
3938
}
40-
41-
return context.requestBody();
39+
return bodyOptional;
4240
}
4341
}

services/s3control/src/test/java/software/amazon/awssdk/services/s3control/internal/interceptors/PayloadSigningInterceptorTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.Optional;
2020
import org.junit.jupiter.api.BeforeEach;
2121
import org.junit.jupiter.api.Test;
22-
import software.amazon.awssdk.auth.signer.S3SignerExecutionAttribute;
2322
import software.amazon.awssdk.core.Protocol;
2423
import software.amazon.awssdk.core.SdkRequest;
2524
import software.amazon.awssdk.core.async.AsyncRequestBody;
@@ -53,7 +52,6 @@ public void modifyHttpContent_AddsExecutionAttributeAndPayload() {
5352

5453
assertThat(modified.isPresent()).isTrue();
5554
assertThat(modified.get().contentLength()).isEqualTo(0);
56-
assertThat(executionAttributes.getAttribute(S3SignerExecutionAttribute.ENABLE_PAYLOAD_SIGNING)).isTrue();
5755
}
5856

5957
@Test
@@ -65,7 +63,6 @@ public void modifyHttpContent_DoesNotReplaceBody() {
6563

6664
assertThat(modified.isPresent()).isTrue();
6765
assertThat(modified.get().contentLength()).isEqualTo(5);
68-
assertThat(executionAttributes.getAttribute(S3SignerExecutionAttribute.ENABLE_PAYLOAD_SIGNING)).isTrue();
6966
}
7067

7168
public final class Context implements software.amazon.awssdk.core.interceptor.Context.ModifyHttpRequest {

0 commit comments

Comments
 (0)