Skip to content

Commit 0ff976f

Browse files
committed
Use Instant instead of Date in Presigner params
1 parent 49ca540 commit 0ff976f

File tree

4 files changed

+25
-27
lines changed

4 files changed

+25
-27
lines changed

auth/src/main/java/software/amazon/awssdk/auth/AwsExecutionAttributes.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
package software.amazon.awssdk.auth;
1717

18-
import java.util.Date;
18+
import java.time.Instant;
1919
import software.amazon.awssdk.annotations.ReviewBeforeRelease;
2020
import software.amazon.awssdk.auth.credentials.AwsCredentials;
2121
import software.amazon.awssdk.core.interceptor.ExecutionAttribute;
@@ -59,10 +59,9 @@ public final class AwsExecutionAttributes extends SdkExecutionAttributes {
5959
public static final ExecutionAttribute<Boolean> SIGNER_DOUBLE_URL_ENCODE = new ExecutionAttribute<>("DoubleUrlEncode");
6060

6161
/**
62-
* The key to specify the expiration date when pre-signing aws requests.
62+
* The key to specify the expiration time when pre-signing aws requests.
6363
*/
64-
public static final ExecutionAttribute<Date> AWS_PRESIGNER_EXPIRATION_DATE =
65-
new ExecutionAttribute<>("PresignerExpirationDate");
64+
public static final ExecutionAttribute<Instant> PRESIGNER_EXPIRATION = new ExecutionAttribute<>("PresignerExpiration");
6665

6766
private AwsExecutionAttributes() {
6867
}

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import java.io.IOException;
2222
import java.io.InputStream;
2323
import java.nio.charset.Charset;
24+
import java.time.Instant;
2425
import java.util.ArrayList;
2526
import java.util.Arrays;
26-
import java.util.Date;
2727
import java.util.List;
2828
import java.util.Map;
2929
import java.util.concurrent.TimeUnit;
@@ -105,7 +105,7 @@ protected SdkHttpFullRequest.Builder doPresign(SdkHttpFullRequest request,
105105

106106
SdkHttpFullRequest.Builder mutableRequest = request.toBuilder();
107107

108-
long expirationInSeconds = generateExpirationDate(signingParams.expirationDate());
108+
long expirationInSeconds = generateExpirationTime(signingParams.expirationTime());
109109
addHostHeader(mutableRequest);
110110

111111
AwsCredentials sanitizedCredentials = sanitizeCredentials(signingParams.awsCredentials());
@@ -375,21 +375,20 @@ private void addDateHeader(SdkHttpFullRequest.Builder mutableRequest, String dat
375375
}
376376

377377
/**
378-
* Generates an expiration date for the presigned url. If user has specified
379-
* an expiration date, check if it is in the given limit.
378+
* Generates an expiration time for the presigned url. If user has specified
379+
* an expiration time, check if it is in the given limit.
380380
*/
381-
private long generateExpirationDate(Date expirationDate) {
381+
private long generateExpirationTime(Instant expirationTime) {
382382

383-
long expirationInSeconds = expirationDate != null
384-
? (expirationDate.getTime() / 1000L)
383+
long expirationInSeconds = expirationTime != null
384+
? expirationTime.getEpochSecond()
385385
: SignerConstants.PRESIGN_URL_MAX_EXPIRATION_SECONDS;
386386

387387
if (expirationInSeconds > SignerConstants.PRESIGN_URL_MAX_EXPIRATION_SECONDS) {
388388
throw new SdkClientException(
389389
"Requests that are pre-signed by SigV4 algorithm are valid for at most 7 days. "
390390
+ "The expiration date set on the current request ["
391-
+ Aws4SignerUtils.formatTimestamp(expirationDate
392-
.getTime()) + "] has exceeded this limit.");
391+
+ Aws4SignerUtils.formatTimestamp(expirationInSeconds * 1000L) + "] has exceeded this limit.");
393392
}
394393
return expirationInSeconds;
395394
}
@@ -411,7 +410,7 @@ private byte[] newSigningKey(AwsCredentials credentials,
411410
protected <B extends Aws4PresignerParams.Builder> B extractPresignerParams(B builder,
412411
ExecutionAttributes executionAttributes) {
413412
builder = extractSignerParams(builder, executionAttributes);
414-
builder.expirationDate(executionAttributes.getAttribute(AwsExecutionAttributes.AWS_PRESIGNER_EXPIRATION_DATE));
413+
builder.expirationTime(executionAttributes.getAttribute(AwsExecutionAttributes.PRESIGNER_EXPIRATION));
415414

416415
return builder;
417416
}

auth/src/main/java/software/amazon/awssdk/auth/signer/params/Aws4PresignerParams.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,37 @@
1515

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

18-
import java.util.Date;
18+
import java.time.Instant;
1919
import software.amazon.awssdk.auth.signer.SignerConstants;
2020

2121
public final class Aws4PresignerParams extends Aws4SignerParams {
2222

23-
private final Date expirationDate;
23+
private final Instant expirationTime;
2424

2525
private Aws4PresignerParams(Builder builder) {
2626
super(builder);
27-
this.expirationDate = builder.expirationDate;
27+
this.expirationTime = builder.expirationTime;
2828
}
2929

30-
public Date expirationDate() {
31-
return expirationDate;
30+
public Instant expirationTime() {
31+
return expirationTime;
3232
}
3333

3434
public static Builder builder() {
3535
return new Builder();
3636
}
3737

3838
public static final class Builder extends Aws4SignerParams.Builder<Builder> {
39-
private Date expirationDate;
39+
private Instant expirationTime;
4040

4141
/**
42-
* Sets an expiration date for the presigned url. If this value is not specified,
42+
* Sets an expiration time for the presigned url. If this value is not specified,
4343
* {@link SignerConstants#PRESIGN_URL_MAX_EXPIRATION_SECONDS} is used.
4444
*
45-
* @param expirationDate Expiration date for the presigned url.
45+
* @param expirationTime Expiration time for the presigned url expressed in {@link Instant}.
4646
*/
47-
public Builder expirationDate(Date expirationDate) {
48-
this.expirationDate = expirationDate;
47+
public Builder expirationTime(Instant expirationTime) {
48+
this.expirationTime = expirationTime;
4949
return this;
5050
}
5151

auth/src/test/java/software/amazon/awssdk/auth/signer/SignerTestUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package software.amazon.awssdk.auth.signer;
1717

1818
import java.time.Clock;
19-
import java.util.Date;
19+
import java.time.Instant;
2020
import software.amazon.awssdk.auth.credentials.AwsCredentials;
2121
import software.amazon.awssdk.auth.signer.params.Aws4PresignerParams;
2222
import software.amazon.awssdk.auth.signer.params.Aws4SignerParams;
@@ -44,13 +44,13 @@ public static SdkHttpFullRequest signRequest(Aws4Signer signer,
4444
public static SdkHttpFullRequest presignRequest(Aws4Signer presigner,
4545
SdkHttpFullRequest request,
4646
AwsCredentials credentials,
47-
Date expiration,
47+
Instant expiration,
4848
String signingName,
4949
Clock signingDateOverride,
5050
String region) {
5151
Aws4PresignerParams signerParams = Aws4PresignerParams.builder()
5252
.awsCredentials(credentials)
53-
.expirationDate(expiration)
53+
.expirationTime(expiration)
5454
.signingName(signingName)
5555
.signingClockOverride(signingDateOverride)
5656
.signingRegion(Region.of(region))

0 commit comments

Comments
 (0)