Skip to content

Commit 86285c8

Browse files
committed
fix(s3-request-presigner): enable overriding hoistable headers
1 parent dddd164 commit 86285c8

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

packages/s3-request-presigner/src/presigner.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,17 @@ export class S3RequestPresigner implements RequestPresigner {
2626

2727
public presign(
2828
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 = {}
3035
): Promise<IHttpRequest> {
3136
this.prepareRequest(requestToSign, {
3237
unsignableHeaders,
3338
unhoistableHeaders,
39+
hoistableHeaders,
3440
});
3541
return this.signer.presign(requestToSign, {
3642
expiresIn: 900,
@@ -43,11 +49,17 @@ export class S3RequestPresigner implements RequestPresigner {
4349
public presignWithCredentials(
4450
requestToSign: IHttpRequest,
4551
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 = {}
4758
): Promise<IHttpRequest> {
4859
this.prepareRequest(requestToSign, {
4960
unsignableHeaders,
5061
unhoistableHeaders,
62+
hoistableHeaders,
5163
});
5264
return this.signer.presignWithCredentials(requestToSign, credentials, {
5365
expiresIn: 900,
@@ -59,15 +71,29 @@ export class S3RequestPresigner implements RequestPresigner {
5971

6072
private prepareRequest(
6173
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 = {}
6379
) {
6480
unsignableHeaders.add("content-type");
81+
6582
Object.keys(requestToSign.headers)
6683
.map((header) => header.toLowerCase())
6784
.filter((header) => header.startsWith("x-amz-server-side-encryption"))
6885
.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+
}
7095
});
96+
7197
requestToSign.headers[SHA256_HEADER] = UNSIGNED_PAYLOAD;
7298

7399
const currentHostHeader = requestToSign.headers.host;

0 commit comments

Comments
 (0)