Skip to content

Commit 87facc3

Browse files
authored
Consolidate duplicate code in legacy auth and new auth paths (#6494)
* Duplicate code reduction part 1: consolidate duplicate signing related classes (#6480) * Consolidate duplicate signing related classes * Fix build * Duplicate code reduction part 2: clean up checksum classes (#6484) * Duplicate code reduction part 2: clean up checksum classes * Fix build * Reusing common logic (#6491) * Rename SdkLengthAwareInputStream to LengthAwareInputStream (#6504) * Remove unused test and methods (#6497)
1 parent 839bbaa commit 87facc3

File tree

67 files changed

+283
-2451
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+283
-2451
lines changed

build-tools/src/main/resources/software/amazon/awssdk/spotbugs-suppressions.xml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -302,14 +302,12 @@
302302
</Match>
303303

304304
<!-- Retrieves and updates crc value in update() -->
305-
<Match>
306-
<Or>
307-
<Class name="software.amazon.awssdk.checksums.internal.SdkCrc32CChecksum"/>
308-
<Class name="software.amazon.awssdk.checksums.internal.SdkCrc32Checksum"/>
309-
<Class name="software.amazon.awssdk.core.internal.checksums.factory.SdkCrc32C"/>
310-
<Class name="software.amazon.awssdk.core.internal.checksums.factory.SdkCrc32"/>
311-
</Or>
312-
<Bug pattern="SA_FIELD_SELF_ASSIGNMENT"/>
305+
<Match>
306+
<Or>
307+
<Class name="software.amazon.awssdk.checksums.internal.SdkCrc32CChecksum"/>
308+
<Class name="software.amazon.awssdk.checksums.internal.SdkCrc32Checksum"/>
309+
</Or>
310+
<Bug pattern="SA_FIELD_SELF_ASSIGNMENT"/>
313311
</Match>
314312

315313
<!-- Suppress existing blocking call. -->

core/auth-crt/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@
6262
<artifactId>auth</artifactId>
6363
<version>${awsjavasdk.version}</version>
6464
</dependency>
65+
<dependency>
66+
<groupId>software.amazon.awssdk</groupId>
67+
<artifactId>http-auth-aws</artifactId>
68+
<version>${awsjavasdk.version}</version>
69+
</dependency>
6570
<dependency>
6671
<groupId>software.amazon.awssdk.crt</groupId>
6772
<artifactId>aws-crt</artifactId>

core/auth-crt/src/main/java/software/amazon/awssdk/authcrt/signer/internal/SigningConfigProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import java.util.Optional;
2424
import software.amazon.awssdk.annotations.SdkInternalApi;
2525
import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute;
26-
import software.amazon.awssdk.auth.signer.internal.SignerConstant;
2726
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
2827
import software.amazon.awssdk.crt.auth.signing.AwsSigningConfig;
28+
import software.amazon.awssdk.http.auth.aws.signer.SignerConstant;
2929
import software.amazon.awssdk.regions.RegionScope;
3030

3131
@SdkInternalApi
@@ -80,7 +80,7 @@ private AwsSigningConfig createPresigningConfig(ExecutionAttributes executionAtt
8080

8181
long expirationInSeconds = expirationTime
8282
.map(end -> Math.max(0, Duration.between(getSigningClock(executionAttributes).instant(), end).getSeconds()))
83-
.orElse(SignerConstant.PRESIGN_URL_MAX_EXPIRATION_SECONDS);
83+
.orElse(SignerConstant.PRESIGN_URL_MAX_EXPIRATION_DURATION.getSeconds());
8484

8585
AwsSigningConfig signingConfig = createDefaultRequestConfig(executionAttributes);
8686
signingConfig.setExpirationInSeconds(expirationInSeconds);

core/auth-crt/src/main/java/software/amazon/awssdk/authcrt/signer/internal/SigningUtils.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@
1515

1616
package software.amazon.awssdk.authcrt.signer.internal;
1717

18+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.AUTHORIZATION;
19+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.HOST;
20+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_ALGORITHM;
21+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_CONTENT_SHA256;
22+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_CREDENTIAL;
23+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_DATE;
24+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_EXPIRES;
25+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_SIGNATURE;
26+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_SIGNED_HEADERS;
27+
1828
import java.nio.charset.StandardCharsets;
1929
import java.time.Clock;
2030
import java.time.Duration;
@@ -42,22 +52,11 @@ public class SigningUtils {
4252
*/
4353
public static final ExecutionAttribute<Clock> SIGNING_CLOCK = new ExecutionAttribute<>("SigningClock");
4454

45-
private static final String BODY_HASH_NAME = "x-amz-content-sha256";
46-
private static final String DATE_NAME = "X-Amz-Date";
47-
private static final String AUTHORIZATION_NAME = "Authorization";
4855
private static final String REGION_SET_NAME = "X-amz-region-set";
4956

50-
private static final String SIGNATURE_NAME = "X-Amz-Signature";
51-
private static final String CREDENTIAL_NAME = "X-Amz-Credential";
52-
private static final String ALGORITHM_NAME = "X-Amz-Algorithm";
53-
private static final String SIGNED_HEADERS_NAME = "X-Amz-SignedHeaders";
54-
private static final String EXPIRES_NAME = "X-Amz-Expires";
55-
5657
private static final Set<String> FORBIDDEN_HEADERS = buildForbiddenHeaderSet();
5758
private static final Set<String> FORBIDDEN_PARAMS = buildForbiddenQueryParamSet();
5859

59-
private static final String HOST_HEADER = "Host";
60-
6160
private SigningUtils() {
6261
}
6362

@@ -125,7 +124,7 @@ public static SdkHttpFullRequest sanitizeSdkRequestForCrtSigning(SdkHttpFullRequ
125124
String hostHeader = SdkHttpUtils.isUsingStandardPort(request.protocol(), request.port())
126125
? request.host()
127126
: request.host() + ":" + request.port();
128-
builder.putHeader(HOST_HEADER, hostHeader);
127+
builder.putHeader(HOST, hostHeader);
129128

130129
builder.clearQueryParameters();
131130

@@ -142,9 +141,9 @@ public static SdkHttpFullRequest sanitizeSdkRequestForCrtSigning(SdkHttpFullRequ
142141
private static Set<String> buildForbiddenHeaderSet() {
143142
Set<String> forbiddenHeaders = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
144143

145-
forbiddenHeaders.add(BODY_HASH_NAME);
146-
forbiddenHeaders.add(DATE_NAME);
147-
forbiddenHeaders.add(AUTHORIZATION_NAME);
144+
forbiddenHeaders.add(X_AMZ_CONTENT_SHA256);
145+
forbiddenHeaders.add(X_AMZ_DATE);
146+
forbiddenHeaders.add(AUTHORIZATION);
148147
forbiddenHeaders.add(REGION_SET_NAME);
149148

150149
return forbiddenHeaders;
@@ -153,13 +152,13 @@ private static Set<String> buildForbiddenHeaderSet() {
153152
private static Set<String> buildForbiddenQueryParamSet() {
154153
Set<String> forbiddenParams = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
155154

156-
forbiddenParams.add(SIGNATURE_NAME);
157-
forbiddenParams.add(DATE_NAME);
158-
forbiddenParams.add(CREDENTIAL_NAME);
159-
forbiddenParams.add(ALGORITHM_NAME);
160-
forbiddenParams.add(SIGNED_HEADERS_NAME);
155+
forbiddenParams.add(X_AMZ_SIGNATURE);
156+
forbiddenParams.add(X_AMZ_DATE);
157+
forbiddenParams.add(X_AMZ_CREDENTIAL);
158+
forbiddenParams.add(X_AMZ_ALGORITHM);
159+
forbiddenParams.add(X_AMZ_SIGNED_HEADERS);
161160
forbiddenParams.add(REGION_SET_NAME);
162-
forbiddenParams.add(EXPIRES_NAME);
161+
forbiddenParams.add(X_AMZ_EXPIRES);
163162

164163
return forbiddenParams;
165164
}

core/auth-crt/src/test/java/software/amazon/awssdk/authcrt/signer/internal/SigningConfigProviderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
import org.junit.jupiter.api.Test;
2626
import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute;
2727
import software.amazon.awssdk.auth.signer.S3SignerExecutionAttribute;
28-
import software.amazon.awssdk.auth.signer.internal.SignerConstant;
2928
import software.amazon.awssdk.authcrt.signer.SignerTestUtils;
3029
import software.amazon.awssdk.authcrt.signer.SigningTestCase;
3130
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
3231
import software.amazon.awssdk.crt.auth.signing.AwsSigningConfig;
32+
import software.amazon.awssdk.http.auth.aws.signer.SignerConstant;
3333

3434
public class SigningConfigProviderTest {
3535

@@ -68,7 +68,7 @@ public void testBasicQuerySigningConfiguration() {
6868
assertTrue(signingConfig.getService().equals(testCase.signingName));
6969
assertTrue(signingConfig.getShouldNormalizeUriPath());
7070
assertTrue(signingConfig.getUseDoubleUriEncode());
71-
assertTrue(signingConfig.getExpirationInSeconds() == SignerConstant.PRESIGN_URL_MAX_EXPIRATION_SECONDS);
71+
assertTrue(signingConfig.getExpirationInSeconds() == SignerConstant.PRESIGN_URL_MAX_EXPIRATION_DURATION.getSeconds());
7272
}
7373

7474
@Test

core/auth-crt/src/test/java/software/amazon/awssdk/authcrt/signer/internal/checksum/CrtBasedChecksumTest.java

Lines changed: 0 additions & 127 deletions
This file was deleted.

core/auth/src/main/java/software/amazon/awssdk/auth/signer/Aws4UnsignedPayloadSigner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
package software.amazon.awssdk.auth.signer;
1717

18-
import static software.amazon.awssdk.auth.signer.internal.SignerConstant.X_AMZ_CONTENT_SHA256;
18+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_CONTENT_SHA256;
1919

2020
import software.amazon.awssdk.annotations.SdkPublicApi;
2121
import software.amazon.awssdk.auth.signer.internal.BaseAws4Signer;

core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,12 @@
4646
import software.amazon.awssdk.core.signer.Presigner;
4747
import software.amazon.awssdk.http.SdkHttpFullRequest;
4848
import software.amazon.awssdk.http.SdkHttpRequest;
49+
import software.amazon.awssdk.http.auth.aws.signer.SignerConstant;
4950
import software.amazon.awssdk.utils.BinaryUtils;
5051
import software.amazon.awssdk.utils.Logger;
5152
import software.amazon.awssdk.utils.Pair;
5253
import software.amazon.awssdk.utils.StringUtils;
54+
import software.amazon.awssdk.utils.cache.FifoCache;
5355
import software.amazon.awssdk.utils.http.SdkHttpUtils;
5456

5557
/**
@@ -332,7 +334,7 @@ private void addPreSignInformationToRequest(SdkHttpFullRequest.Builder mutableRe
332334

333335
mutableRequest.putRawQueryParameter(SignerConstant.X_AMZ_ALGORITHM, SignerConstant.AWS4_SIGNING_ALGORITHM);
334336
mutableRequest.putRawQueryParameter(SignerConstant.X_AMZ_DATE, signerParams.getFormattedRequestSigningDateTime());
335-
mutableRequest.putRawQueryParameter(SignerConstant.X_AMZ_SIGNED_HEADER, canonicalRequest.signedHeaderString());
337+
mutableRequest.putRawQueryParameter(SignerConstant.X_AMZ_SIGNED_HEADERS, canonicalRequest.signedHeaderString());
336338
mutableRequest.putRawQueryParameter(SignerConstant.X_AMZ_EXPIRES, Long.toString(expirationInSeconds));
337339
mutableRequest.putRawQueryParameter(SignerConstant.X_AMZ_CREDENTIAL, signingCredentials);
338340
}
@@ -375,9 +377,9 @@ private long getSignatureDurationInSeconds(Aws4SignerRequestParams requestParams
375377
long expirationInSeconds = signingParams.expirationTime()
376378
.map(t -> t.getEpochSecond() -
377379
(requestParams.getRequestSigningDateTimeMilli() / 1000))
378-
.orElse(SignerConstant.PRESIGN_URL_MAX_EXPIRATION_SECONDS);
380+
.orElse(SignerConstant.PRESIGN_URL_MAX_EXPIRATION_DURATION.getSeconds());
379381

380-
if (expirationInSeconds > SignerConstant.PRESIGN_URL_MAX_EXPIRATION_SECONDS) {
382+
if (expirationInSeconds > SignerConstant.PRESIGN_URL_MAX_EXPIRATION_DURATION.getSeconds()) {
381383
throw SdkClientException.builder()
382384
.message("Requests that are pre-signed by SigV4 algorithm are valid for at most 7" +
383385
" days. The expiration date set on the current request [" +

core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAwsS3V4Signer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package software.amazon.awssdk.auth.signer.internal;
1717

1818
import static software.amazon.awssdk.auth.signer.internal.Aws4SignerUtils.calculateRequestContentLength;
19-
import static software.amazon.awssdk.auth.signer.internal.SignerConstant.X_AMZ_CONTENT_SHA256;
19+
import static software.amazon.awssdk.http.auth.aws.signer.SignerConstant.X_AMZ_CONTENT_SHA256;
2020

2121
import java.io.InputStream;
2222
import java.util.Optional;

core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/Aws4SignerRequestParams.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.Duration;
2020
import software.amazon.awssdk.annotations.SdkInternalApi;
2121
import software.amazon.awssdk.auth.signer.params.Aws4SignerParams;
22+
import software.amazon.awssdk.http.auth.aws.signer.SignerConstant;
2223
import software.amazon.awssdk.regions.Region;
2324

2425
/**

0 commit comments

Comments
 (0)