97
97
import software .amazon .awssdk .services .s3 .model .CreateMultipartUploadRequest ;
98
98
import software .amazon .awssdk .services .s3 .model .DeleteObjectRequest ;
99
99
import software .amazon .awssdk .services .s3 .model .GetObjectRequest ;
100
+ import software .amazon .awssdk .services .s3 .model .HeadBucketRequest ;
101
+ import software .amazon .awssdk .services .s3 .model .HeadObjectRequest ;
100
102
import software .amazon .awssdk .services .s3 .model .PutObjectRequest ;
101
103
import software .amazon .awssdk .services .s3 .model .UploadPartRequest ;
102
104
import software .amazon .awssdk .services .s3 .presigner .S3Presigner ;
105
107
import software .amazon .awssdk .services .s3 .presigner .model .CreateMultipartUploadPresignRequest ;
106
108
import software .amazon .awssdk .services .s3 .presigner .model .DeleteObjectPresignRequest ;
107
109
import software .amazon .awssdk .services .s3 .presigner .model .GetObjectPresignRequest ;
110
+ import software .amazon .awssdk .services .s3 .presigner .model .HeadBucketPresignRequest ;
111
+ import software .amazon .awssdk .services .s3 .presigner .model .HeadObjectPresignRequest ;
108
112
import software .amazon .awssdk .services .s3 .presigner .model .PresignedAbortMultipartUploadRequest ;
109
113
import software .amazon .awssdk .services .s3 .presigner .model .PresignedCompleteMultipartUploadRequest ;
110
114
import software .amazon .awssdk .services .s3 .presigner .model .PresignedCreateMultipartUploadRequest ;
111
115
import software .amazon .awssdk .services .s3 .presigner .model .PresignedDeleteObjectRequest ;
112
116
import software .amazon .awssdk .services .s3 .presigner .model .PresignedGetObjectRequest ;
117
+ import software .amazon .awssdk .services .s3 .presigner .model .PresignedHeadBucketRequest ;
118
+ import software .amazon .awssdk .services .s3 .presigner .model .PresignedHeadObjectRequest ;
113
119
import software .amazon .awssdk .services .s3 .presigner .model .PresignedPutObjectRequest ;
114
120
import software .amazon .awssdk .services .s3 .presigner .model .PresignedUploadPartRequest ;
115
121
import software .amazon .awssdk .services .s3 .presigner .model .PutObjectPresignRequest ;
120
126
import software .amazon .awssdk .services .s3 .transform .CreateMultipartUploadRequestMarshaller ;
121
127
import software .amazon .awssdk .services .s3 .transform .DeleteObjectRequestMarshaller ;
122
128
import software .amazon .awssdk .services .s3 .transform .GetObjectRequestMarshaller ;
129
+ import software .amazon .awssdk .services .s3 .transform .HeadBucketRequestMarshaller ;
130
+ import software .amazon .awssdk .services .s3 .transform .HeadObjectRequestMarshaller ;
123
131
import software .amazon .awssdk .services .s3 .transform .PutObjectRequestMarshaller ;
124
132
import software .amazon .awssdk .services .s3 .transform .UploadPartRequestMarshaller ;
125
133
import software .amazon .awssdk .utils .AttributeMap ;
@@ -141,6 +149,8 @@ public final class DefaultS3Presigner extends DefaultSdkPresigner implements S3P
141
149
private final S3Configuration serviceConfiguration ;
142
150
private final List <ExecutionInterceptor > clientInterceptors ;
143
151
private final GetObjectRequestMarshaller getObjectRequestMarshaller ;
152
+ private final HeadObjectRequestMarshaller headObjectRequestMarshaller ;
153
+ private final HeadBucketRequestMarshaller headBucketRequestMarshaller ;
144
154
private final PutObjectRequestMarshaller putObjectRequestMarshaller ;
145
155
private final CreateMultipartUploadRequestMarshaller createMultipartUploadRequestMarshaller ;
146
156
private final UploadPartRequestMarshaller uploadPartRequestMarshaller ;
@@ -156,16 +166,16 @@ private DefaultS3Presigner(Builder b) {
156
166
super (b );
157
167
158
168
S3Configuration serviceConfiguration = b .serviceConfiguration != null ? b .serviceConfiguration :
159
- S3Configuration .builder ()
160
- .profileFile (profileFileSupplier ())
161
- .profileName (profileName ())
162
- .checksumValidationEnabled (false )
163
- .build ();
169
+ S3Configuration .builder ()
170
+ .profileFile (profileFileSupplier ())
171
+ .profileName (profileName ())
172
+ .checksumValidationEnabled (false )
173
+ .build ();
164
174
S3Configuration .Builder serviceConfigBuilder = serviceConfiguration .toBuilder ();
165
175
166
176
if (serviceConfiguration .checksumValidationEnabled ()) {
167
177
log .debug (() -> "The provided S3Configuration has ChecksumValidationEnabled set to true. Please note that "
168
- + "the pre-signed request can't be executed using a web browser if checksum validation is enabled." );
178
+ + "the pre-signed request can't be executed using a web browser if checksum validation is enabled." );
169
179
}
170
180
171
181
if (dualstackEnabled () != null && serviceConfigBuilder .dualstackEnabled () != null ) {
@@ -193,6 +203,10 @@ private DefaultS3Presigner(Builder b) {
193
203
// Copied from DefaultS3Client#getObject
194
204
this .getObjectRequestMarshaller = new GetObjectRequestMarshaller (protocolFactory );
195
205
206
+ this .headObjectRequestMarshaller = new HeadObjectRequestMarshaller (protocolFactory );
207
+
208
+ this .headBucketRequestMarshaller = new HeadBucketRequestMarshaller (protocolFactory );
209
+
196
210
// Copied from DefaultS3Client#putObject
197
211
this .putObjectRequestMarshaller = new PutObjectRequestMarshaller (protocolFactory );
198
212
@@ -273,6 +287,28 @@ public PresignedGetObjectRequest presignGetObject(GetObjectPresignRequest reques
273
287
.build ();
274
288
}
275
289
290
+ @ Override
291
+ public PresignedHeadObjectRequest presignHeadObject (HeadObjectPresignRequest request ) {
292
+ return presign (PresignedHeadObjectRequest .builder (),
293
+ request ,
294
+ request .headObjectRequest (),
295
+ HeadObjectRequest .class ,
296
+ headObjectRequestMarshaller ::marshall ,
297
+ "HeadObject" )
298
+ .build ();
299
+ }
300
+
301
+ @ Override
302
+ public PresignedHeadBucketRequest presignHeadBucket (HeadBucketPresignRequest request ) {
303
+ return presign (PresignedHeadBucketRequest .builder (),
304
+ request ,
305
+ request .headBucketRequest (),
306
+ HeadBucketRequest .class ,
307
+ headBucketRequestMarshaller ::marshall ,
308
+ "HeadBucket" )
309
+ .build ();
310
+ }
311
+
276
312
@ Override
277
313
public PresignedPutObjectRequest presignPutObject (PutObjectPresignRequest request ) {
278
314
return presign (PresignedPutObjectRequest .builder (),
@@ -573,7 +609,7 @@ private SdkHttpFullRequest presignRequest(ExecutionContext execCtx, SdkHttpFullR
573
609
* Presign the provided HTTP request using SRA HttpSigner
574
610
*/
575
611
private SdkHttpFullRequest sraPresignRequest (ExecutionContext execCtx , SdkHttpFullRequest request ,
576
- Clock signingClock , Duration expirationDuration ) {
612
+ Clock signingClock , Duration expirationDuration ) {
577
613
SelectedAuthScheme selectedAuthScheme = execCtx .executionAttributes ().getAttribute (SELECTED_AUTH_SCHEME );
578
614
return doSraPresign (request , selectedAuthScheme , signingClock , expirationDuration );
579
615
}
@@ -657,7 +693,7 @@ private AttributeMap createClientContextParams(Boolean resolvedDisableS3ExpressS
657
693
658
694
params .put (S3ClientContextParams .USE_ARN_REGION , serviceConfiguration .useArnRegionEnabled ());
659
695
params .put (S3ClientContextParams .DISABLE_MULTI_REGION_ACCESS_POINTS ,
660
- !serviceConfiguration .multiRegionEnabled ());
696
+ !serviceConfiguration .multiRegionEnabled ());
661
697
params .put (S3ClientContextParams .FORCE_PATH_STYLE , serviceConfiguration .pathStyleAccessEnabled ());
662
698
params .put (S3ClientContextParams .ACCELERATE , serviceConfiguration .accelerateModeEnabled ());
663
699
params .put (S3ClientContextParams .DISABLE_S3_EXPRESS_SESSION_AUTH , resolvedDisableS3ExpressSessionAuth );
@@ -670,10 +706,10 @@ private UseGlobalEndpointResolver createUseGlobalEndpointResolver() {
670
706
.get (ServiceMetadataAdvancedOption .DEFAULT_S3_US_EAST_1_REGIONAL_ENDPOINT );
671
707
672
708
SdkClientConfiguration config = clientConfiguration .toBuilder ()
673
- .option (ServiceMetadataAdvancedOption .DEFAULT_S3_US_EAST_1_REGIONAL_ENDPOINT , legacyOption )
674
- .option (SdkClientOption .PROFILE_FILE_SUPPLIER , profileFileSupplier ())
675
- .option (SdkClientOption .PROFILE_NAME , profileName ())
676
- .build ();
709
+ .option (ServiceMetadataAdvancedOption .DEFAULT_S3_US_EAST_1_REGIONAL_ENDPOINT , legacyOption )
710
+ .option (SdkClientOption .PROFILE_FILE_SUPPLIER , profileFileSupplier ())
711
+ .option (SdkClientOption .PROFILE_NAME , profileName ())
712
+ .build ();
677
713
678
714
return new UseGlobalEndpointResolver (config );
679
715
}
0 commit comments