@@ -26,11 +26,17 @@ export class S3RequestPresigner implements RequestPresigner {
26
26
27
27
public presign (
28
28
requestToSign : IHttpRequest ,
29
- { unsignableHeaders = new Set ( ) , unhoistableHeaders = new Set ( ) , ...options } : RequestPresigningArguments = { }
29
+ {
30
+ unsignableHeaders = new Set ( ) ,
31
+ hoistableHeaders = new Set ( ) ,
32
+ unhoistableHeaders = new Set ( ) ,
33
+ ...options
34
+ } : RequestPresigningArguments = { }
30
35
) : Promise < IHttpRequest > {
31
36
this . prepareRequest ( requestToSign , {
32
37
unsignableHeaders,
33
38
unhoistableHeaders,
39
+ hoistableHeaders,
34
40
} ) ;
35
41
return this . signer . presign ( requestToSign , {
36
42
expiresIn : 900 ,
@@ -43,11 +49,17 @@ export class S3RequestPresigner implements RequestPresigner {
43
49
public presignWithCredentials (
44
50
requestToSign : IHttpRequest ,
45
51
credentials : AwsCredentialIdentity ,
46
- { unsignableHeaders = new Set ( ) , unhoistableHeaders = new Set ( ) , ...options } : RequestPresigningArguments = { }
52
+ {
53
+ unsignableHeaders = new Set ( ) ,
54
+ hoistableHeaders = new Set ( ) ,
55
+ unhoistableHeaders = new Set ( ) ,
56
+ ...options
57
+ } : RequestPresigningArguments = { }
47
58
) : Promise < IHttpRequest > {
48
59
this . prepareRequest ( requestToSign , {
49
60
unsignableHeaders,
50
61
unhoistableHeaders,
62
+ hoistableHeaders,
51
63
} ) ;
52
64
return this . signer . presignWithCredentials ( requestToSign , credentials , {
53
65
expiresIn : 900 ,
@@ -59,15 +71,29 @@ export class S3RequestPresigner implements RequestPresigner {
59
71
60
72
private prepareRequest (
61
73
requestToSign : IHttpRequest ,
62
- { unsignableHeaders = new Set ( ) , unhoistableHeaders = new Set ( ) } : RequestPresigningArguments = { }
74
+ {
75
+ unsignableHeaders = new Set ( ) ,
76
+ unhoistableHeaders = new Set ( ) ,
77
+ hoistableHeaders = new Set ( ) ,
78
+ } : RequestPresigningArguments = { }
63
79
) {
64
80
unsignableHeaders . add ( "content-type" ) ;
81
+
65
82
Object . keys ( requestToSign . headers )
66
83
. map ( ( header ) => header . toLowerCase ( ) )
67
84
. filter ( ( header ) => header . startsWith ( "x-amz-server-side-encryption" ) )
68
85
. forEach ( ( header ) => {
69
- unhoistableHeaders . add ( header ) ;
86
+ if ( ! hoistableHeaders . has ( header ) ) {
87
+ /**
88
+ * For smoother backwards compatibility with pre-GA PR
89
+ * https://github.com/aws/aws-sdk-js-v3/issues/1576,
90
+ * x-amz-sse headers are by default unhoisted,
91
+ * but can be overridden.
92
+ */
93
+ unhoistableHeaders . add ( header ) ;
94
+ }
70
95
} ) ;
96
+
71
97
requestToSign . headers [ SHA256_HEADER ] = UNSIGNED_PAYLOAD ;
72
98
73
99
const currentHostHeader = requestToSign . headers . host ;
0 commit comments