Skip to content

Commit 3928ca1

Browse files
Chase Coalwelltrivikr
authored andcommitted
fix: uri escape presigned url (#773)
1 parent cd794e4 commit 3928ca1

File tree

3 files changed

+47
-45
lines changed

3 files changed

+47
-45
lines changed

packages/middleware-sdk-rds/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"@aws-sdk/signature-v4": "^1.0.0-alpha.7",
1919
"@aws-sdk/types": "^1.0.0-alpha.3",
2020
"@aws-sdk/util-format-url": "^1.0.0-alpha.3",
21+
"@aws-sdk/util-uri-escape": "^1.0.0-alpha.2",
2122
"tslib": "^1.8.0"
2223
},
2324
"devDependencies": {

packages/middleware-sdk-rds/src/index.spec.ts

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ describe("middleware-sdk-rds", () => {
3838
expect(middlewareOutput.input.KmsKeyId).toEqual(params.KmsKeyId);
3939
const presignedUrl = middlewareOutput.input.PreSignedUrl;
4040
expect(presignedUrl).toMatch(
41-
/https\:\/\/rds\.src\-region\.amazonaws\.com\/\?/
42-
);
43-
expect(presignedUrl).toMatch(/Action\=CopyDBSnapshot/);
44-
expect(presignedUrl).toMatch(/Version\=2014\-10\-31/);
45-
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token\=session/);
46-
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm\=AWS4\-HMAC\-SHA256/);
47-
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders\=host/);
48-
expect(presignedUrl).toMatch(/X\-Amz\-Credential\=/);
49-
expect(presignedUrl).toMatch(/X\-Amz\-Date\=/);
50-
expect(presignedUrl).toMatch(/X-Amz-Expires=([\d]+)/);
51-
expect(presignedUrl).toMatch(/X-Amz-Signature=000000/);
41+
/https%3A%2F%2Frds\.src\-region\.amazonaws\.com%2F%3F/
42+
);
43+
expect(presignedUrl).toMatch(/Action%3DCopyDBSnapshot/);
44+
expect(presignedUrl).toMatch(/Version%3D2014\-10\-31/);
45+
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token%3Dsession/);
46+
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm%3DAWS4\-HMAC\-SHA256/);
47+
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders%3Dhost/);
48+
expect(presignedUrl).toMatch(/X\-Amz\-Credential%3D/);
49+
expect(presignedUrl).toMatch(/X\-Amz\-Date%3D/);
50+
expect(presignedUrl).toMatch(/X-Amz-Expires%3D([\d]+)/);
51+
expect(presignedUrl).toMatch(/X-Amz-Signature%3D000000/);
5252
});
5353

5454
it("should build CreateDBInstanceReadReplica cross origin presigned url correctly ", async () => {
@@ -69,17 +69,17 @@ describe("middleware-sdk-rds", () => {
6969
expect(middlewareOutput.input.KmsKeyId).toEqual(params.KmsKeyId);
7070
const presignedUrl = middlewareOutput.input.PreSignedUrl;
7171
expect(presignedUrl).toMatch(
72-
/https\:\/\/rds\.src\-region\.amazonaws\.com\/\?/
73-
);
74-
expect(presignedUrl).toMatch(/Action\=CreateDBInstanceReadReplica/);
75-
expect(presignedUrl).toMatch(/Version\=2014\-10\-31/);
76-
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token\=session/);
77-
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm\=AWS4\-HMAC\-SHA256/);
78-
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders\=host/);
79-
expect(presignedUrl).toMatch(/X\-Amz\-Credential\=/);
80-
expect(presignedUrl).toMatch(/X\-Amz\-Date\=/);
81-
expect(presignedUrl).toMatch(/X-Amz-Expires=([\d]+)/);
82-
expect(presignedUrl).toMatch(/X-Amz-Signature=000000/);
72+
/https%3A%2F%2Frds\.src\-region\.amazonaws\.com%2F%3F/
73+
);
74+
expect(presignedUrl).toMatch(/Action%3DCreateDBInstanceReadReplica/);
75+
expect(presignedUrl).toMatch(/Version%3D2014\-10\-31/);
76+
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token%3Dsession/);
77+
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm%3DAWS4\-HMAC\-SHA256/);
78+
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders%3Dhost/);
79+
expect(presignedUrl).toMatch(/X\-Amz\-Credential%3D/);
80+
expect(presignedUrl).toMatch(/X\-Amz\-Date%3D/);
81+
expect(presignedUrl).toMatch(/X-Amz-Expires%3D([\d]+)/);
82+
expect(presignedUrl).toMatch(/X-Amz-Signature%3D000000/);
8383
});
8484

8585
it("should build CreateDBCluster cross origin presigned url correctly ", async () => {
@@ -100,17 +100,17 @@ describe("middleware-sdk-rds", () => {
100100
expect(middlewareOutput.input.KmsKeyId).toEqual(params.KmsKeyId);
101101
const presignedUrl = middlewareOutput.input.PreSignedUrl;
102102
expect(presignedUrl).toMatch(
103-
/https\:\/\/rds\.src\-region\.amazonaws\.com\/\?/
104-
);
105-
expect(presignedUrl).toMatch(/Action\=CreateDBCluster/);
106-
expect(presignedUrl).toMatch(/Version\=2014\-10\-31/);
107-
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token\=session/);
108-
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm\=AWS4\-HMAC\-SHA256/);
109-
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders\=host/);
110-
expect(presignedUrl).toMatch(/X\-Amz\-Credential\=/);
111-
expect(presignedUrl).toMatch(/X\-Amz\-Date\=/);
112-
expect(presignedUrl).toMatch(/X-Amz-Expires=([\d]+)/);
113-
expect(presignedUrl).toMatch(/X-Amz-Signature=000000/);
103+
/https%3A%2F%2Frds\.src\-region\.amazonaws\.com%2F%3F/
104+
);
105+
expect(presignedUrl).toMatch(/Action%3DCreateDBCluster/);
106+
expect(presignedUrl).toMatch(/Version%3D2014\-10\-31/);
107+
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token%3Dsession/);
108+
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm%3DAWS4\-HMAC\-SHA256/);
109+
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders%3Dhost/);
110+
expect(presignedUrl).toMatch(/X\-Amz\-Credential%3D/);
111+
expect(presignedUrl).toMatch(/X\-Amz\-Date%3D/);
112+
expect(presignedUrl).toMatch(/X-Amz-Expires%3D([\d]+)/);
113+
expect(presignedUrl).toMatch(/X-Amz-Signature%3D000000/);
114114
});
115115

116116
it("should build CopyDBClusterSnapshot cross origin presigned url correctly ", async () => {
@@ -131,17 +131,17 @@ describe("middleware-sdk-rds", () => {
131131
expect(middlewareOutput.input.KmsKeyId).toEqual(params.KmsKeyId);
132132
const presignedUrl = middlewareOutput.input.PreSignedUrl;
133133
expect(presignedUrl).toMatch(
134-
/https\:\/\/rds\.src\-region\.amazonaws\.com\/\?/
135-
);
136-
expect(presignedUrl).toMatch(/Action\=CopyDBClusterSnapshot/);
137-
expect(presignedUrl).toMatch(/Version\=2014\-10\-31/);
138-
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token\=session/);
139-
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm\=AWS4\-HMAC\-SHA256/);
140-
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders\=host/);
141-
expect(presignedUrl).toMatch(/X\-Amz\-Credential\=/);
142-
expect(presignedUrl).toMatch(/X\-Amz\-Date\=/);
143-
expect(presignedUrl).toMatch(/X-Amz-Expires=([\d]+)/);
144-
expect(presignedUrl).toMatch(/X-Amz-Signature=000000/);
134+
/https%3A%2F%2Frds\.src\-region\.amazonaws\.com%2F%3F/
135+
);
136+
expect(presignedUrl).toMatch(/Action%3DCopyDBClusterSnapshot/);
137+
expect(presignedUrl).toMatch(/Version%3D2014\-10\-31/);
138+
expect(presignedUrl).toMatch(/X\-Amz\-Security\-Token%3Dsession/);
139+
expect(presignedUrl).toMatch(/X\-Amz\-Algorithm%3DAWS4\-HMAC\-SHA256/);
140+
expect(presignedUrl).toMatch(/X\-Amz\-SignedHeaders%3Dhost/);
141+
expect(presignedUrl).toMatch(/X\-Amz\-Credential%3D/);
142+
expect(presignedUrl).toMatch(/X\-Amz\-Date%3D/);
143+
expect(presignedUrl).toMatch(/X-Amz-Expires%3D([\d]+)/);
144+
expect(presignedUrl).toMatch(/X-Amz-Signature%3D000000/);
145145
});
146146

147147
it("should not generate PreSignedUrl if source identifier is not ARN", async () => {

packages/middleware-sdk-rds/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
import { formatUrl } from "@aws-sdk/util-format-url";
1616
import { HttpRequest } from "@aws-sdk/protocol-http";
1717
import { SignatureV4 } from "@aws-sdk/signature-v4";
18+
import { escapeUri } from "@aws-sdk/util-uri-escape";
1819

1920
const regARN = /arn:[\w+=/,.@-]+:[\w+=/,.@-]+:([\w+=/,.@-]*)?:[0-9]+:[\w+=/,.@-]+(:[\w+=/,.@-]+)?(:[\w+=/,.@-]+)?/;
2021

@@ -104,7 +105,7 @@ export function crossRegionPresignedUrlMiddleware(
104105
...args,
105106
input: {
106107
...args.input,
107-
PreSignedUrl: formatUrl(presignedRequest)
108+
PreSignedUrl: escapeUri(formatUrl(presignedRequest))
108109
}
109110
};
110111
}

0 commit comments

Comments
 (0)