20
20
21
21
import java .io .InputStream ;
22
22
import java .nio .charset .Charset ;
23
- import java .time .Instant ;
24
23
import java .util .ArrayList ;
25
24
import java .util .Arrays ;
26
25
import java .util .List ;
@@ -99,7 +98,7 @@ protected SdkHttpFullRequest.Builder doPresign(SdkHttpFullRequest request,
99
98
100
99
SdkHttpFullRequest .Builder mutableRequest = request .toBuilder ();
101
100
102
- long expirationInSeconds = generateExpirationTime ( signingParams );
101
+ long expirationInSeconds = getSignatureDurationInSeconds ( requestParams , signingParams );
103
102
addHostHeader (mutableRequest );
104
103
105
104
AwsCredentials sanitizedCredentials = sanitizeCredentials (signingParams .awsCredentials ());
@@ -112,9 +111,7 @@ protected SdkHttpFullRequest.Builder doPresign(SdkHttpFullRequest request,
112
111
}
113
112
114
113
// Add the important parameters for v4 signing
115
- String timeStamp = requestParams .getFormattedRequestSigningDateTime ();
116
-
117
- addPreSignInformationToRequest (mutableRequest , sanitizedCredentials , requestParams , timeStamp , expirationInSeconds );
114
+ addPreSignInformationToRequest (mutableRequest , sanitizedCredentials , requestParams , expirationInSeconds );
118
115
119
116
String contentSha256 = calculateContentHashPresign (mutableRequest , signingParams );
120
117
@@ -275,13 +272,12 @@ private String buildAuthorizationHeader(byte[] signature,
275
272
private void addPreSignInformationToRequest (SdkHttpFullRequest .Builder mutableRequest ,
276
273
AwsCredentials sanitizedCredentials ,
277
274
Aws4SignerRequestParams signerParams ,
278
- String timeStamp ,
279
275
long expirationInSeconds ) {
280
276
281
277
String signingCredentials = sanitizedCredentials .accessKeyId () + "/" + signerParams .getScope ();
282
278
283
279
mutableRequest .putRawQueryParameter (SignerConstant .X_AMZ_ALGORITHM , SignerConstant .AWS4_SIGNING_ALGORITHM );
284
- mutableRequest .putRawQueryParameter (SignerConstant .X_AMZ_DATE , timeStamp );
280
+ mutableRequest .putRawQueryParameter (SignerConstant .X_AMZ_DATE , signerParams . getFormattedRequestSigningDateTime () );
285
281
mutableRequest .putRawQueryParameter (SignerConstant .X_AMZ_SIGNED_HEADER ,
286
282
getSignedHeadersString (mutableRequest .headers ()));
287
283
mutableRequest .putRawQueryParameter (SignerConstant .X_AMZ_EXPIRES ,
@@ -397,10 +393,13 @@ private void addDateHeader(SdkHttpFullRequest.Builder mutableRequest, String dat
397
393
* Generates an expiration time for the presigned url. If user has specified
398
394
* an expiration time, check if it is in the given limit.
399
395
*/
400
- private long generateExpirationTime (U signingParams ) {
396
+ private long getSignatureDurationInSeconds (Aws4SignerRequestParams requestParams ,
397
+ U signingParams ) {
401
398
402
- long expirationInSeconds = signingParams .expirationTime ().map (Instant ::getEpochSecond )
403
- .orElse (SignerConstant .PRESIGN_URL_MAX_EXPIRATION_SECONDS );
399
+ long expirationInSeconds = signingParams .expirationTime ()
400
+ .map (t -> t .getEpochSecond () -
401
+ (requestParams .getRequestSigningDateTimeMilli () / 1000 ))
402
+ .orElse (SignerConstant .PRESIGN_URL_MAX_EXPIRATION_SECONDS );
404
403
405
404
if (expirationInSeconds > SignerConstant .PRESIGN_URL_MAX_EXPIRATION_SECONDS ) {
406
405
throw SdkClientException .builder ()
0 commit comments