43
43
import software .amazon .awssdk .http .auth .spi .signer .AsyncSignedRequest ;
44
44
import software .amazon .awssdk .http .auth .spi .signer .BaseSignedRequest ;
45
45
import software .amazon .awssdk .http .auth .spi .signer .HttpSigner ;
46
+ import software .amazon .awssdk .http .auth .spi .signer .PayloadChecksumStore ;
47
+ import software .amazon .awssdk .http .auth .spi .signer .SdkInternalHttpSignerProperty ;
46
48
import software .amazon .awssdk .http .auth .spi .signer .SignRequest ;
47
49
import software .amazon .awssdk .http .auth .spi .signer .SignedRequest ;
48
50
import software .amazon .awssdk .identity .spi .Identity ;
@@ -88,11 +90,15 @@ public CompletableFuture<SdkHttpFullRequest> execute(SdkHttpFullRequest request,
88
90
private <T extends Identity > CompletableFuture <SdkHttpFullRequest > sraSignRequest (SdkHttpFullRequest request ,
89
91
RequestExecutionContext context ,
90
92
SelectedAuthScheme <T > selectedAuthScheme ) {
93
+ // Should not be null, added by HttpChecksumStage for SRA signed requests
94
+ PayloadChecksumStore payloadChecksumStore =
95
+ context .executionAttributes ().getAttribute (SdkInternalExecutionAttribute .CHECKSUM_STORE );
96
+
91
97
adjustForClockSkew (context .executionAttributes ());
92
98
CompletableFuture <? extends T > identityFuture = selectedAuthScheme .identity ();
93
99
return identityFuture .thenCompose (identity -> {
94
100
CompletableFuture <SdkHttpFullRequest > signedRequestFuture = MetricUtils .reportDuration (
95
- () -> doSraSign (request , context , selectedAuthScheme , identity ),
101
+ () -> doSraSign (request , context , selectedAuthScheme , identity , payloadChecksumStore ),
96
102
context .attemptMetricCollector (),
97
103
CoreMetric .SIGNING_DURATION );
98
104
@@ -106,14 +112,16 @@ private <T extends Identity> CompletableFuture<SdkHttpFullRequest> sraSignReques
106
112
private <T extends Identity > CompletableFuture <SdkHttpFullRequest > doSraSign (SdkHttpFullRequest request ,
107
113
RequestExecutionContext context ,
108
114
SelectedAuthScheme <T > selectedAuthScheme ,
109
- T identity ) {
115
+ T identity ,
116
+ PayloadChecksumStore payloadChecksumStore ) {
110
117
AuthSchemeOption authSchemeOption = selectedAuthScheme .authSchemeOption ();
111
118
HttpSigner <T > signer = selectedAuthScheme .signer ();
112
119
113
120
if (context .requestProvider () == null ) {
114
121
SignRequest .Builder <T > signRequestBuilder = SignRequest
115
122
.builder (identity )
116
123
.putProperty (HttpSigner .SIGNING_CLOCK , signingClock ())
124
+ .putProperty (SdkInternalHttpSignerProperty .CHECKSUM_STORE , payloadChecksumStore )
117
125
.request (request )
118
126
.payload (request .contentStreamProvider ().orElse (null ));
119
127
authSchemeOption .forEachSignerProperty (signRequestBuilder ::putProperty );
@@ -125,8 +133,10 @@ private <T extends Identity> CompletableFuture<SdkHttpFullRequest> doSraSign(Sdk
125
133
AsyncSignRequest .Builder <T > signRequestBuilder = AsyncSignRequest
126
134
.builder (identity )
127
135
.putProperty (HttpSigner .SIGNING_CLOCK , signingClock ())
136
+ .putProperty (SdkInternalHttpSignerProperty .CHECKSUM_STORE , payloadChecksumStore )
128
137
.request (request )
129
138
.payload (context .requestProvider ());
139
+
130
140
authSchemeOption .forEachSignerProperty (signRequestBuilder ::putProperty );
131
141
132
142
CompletableFuture <AsyncSignedRequest > signedRequestFuture = signer .signAsync (signRequestBuilder .build ());
0 commit comments