Skip to content

Commit bc74a9a

Browse files
committed
chore: skip checksum computation if user as set checksum header field
1 parent f0bc4f8 commit bc74a9a

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

packages/middleware-flexible-checksums/src/flexibleChecksumsMiddleware.spec.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,31 +67,33 @@ describe(flexibleChecksumsMiddleware.name, () => {
6767
});
6868

6969
describe("request checksum", () => {
70-
afterEach(() => {
71-
expect(getChecksumAlgorithmForRequest).toHaveBeenCalledTimes(1);
72-
});
73-
7470
it("if checksumAlgorithm is not defined", async () => {
7571
vi.mocked(getChecksumAlgorithmForRequest).mockReturnValue(undefined);
7672
const handler = flexibleChecksumsMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, {});
7773
await handler(mockArgs);
7874
expect(getChecksumLocationName).not.toHaveBeenCalled();
7975
expect(mockNext).toHaveBeenCalledWith(mockArgs);
8076
expect(selectChecksumAlgorithmFunction).not.toHaveBeenCalled();
77+
expect(getChecksumAlgorithmForRequest).toHaveBeenCalledTimes(1);
8178
});
8279

83-
it("if header is already present", async () => {
80+
it.each([
81+
...Object.values(ChecksumAlgorithm).map((val) => `x-amz-checksum-${val.toLowerCase()}`), // all current checksum locations
82+
...Object.values(ChecksumAlgorithm).map((val) => `X-AMZ-CHECKSUM-${val}`), // all current checksum locations in uppercase
83+
`x-amz-checksum-emoji`, // any checksum post prefix
84+
`X-AMZ-CHECKSUM-EMOJI`, // any checksum post prefix in uppercase
85+
])("skip if header '%s' is already present", async (headerName) => {
8486
const handler = flexibleChecksumsMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, {});
85-
const mockHeadersWithChecksumHeader = { ...mockHeaders, [mockChecksumLocationName]: "mockHeaderValue" };
87+
const mockHeadersWithChecksumHeader = { ...mockHeaders, [headerName]: "mockHeaderValue" };
8688
const mockArgsWithChecksumHeader = {
8789
...mockArgs,
8890
request: { ...mockRequest, headers: mockHeadersWithChecksumHeader },
8991
};
9092
await handler(mockArgsWithChecksumHeader);
91-
expect(getChecksumLocationName).toHaveBeenCalledWith(ChecksumAlgorithm.CRC32);
92-
expect(selectChecksumAlgorithmFunction).toHaveBeenCalledWith(ChecksumAlgorithm.CRC32, mockConfig);
93+
expect(getChecksumLocationName).not.toHaveBeenCalled();
94+
expect(selectChecksumAlgorithmFunction).not.toHaveBeenCalled();
95+
expect(hasHeader).not.toHaveBeenCalled();
9396
expect(mockNext).toHaveBeenCalledWith(mockArgsWithChecksumHeader);
94-
expect(hasHeader).toHaveBeenCalledWith(mockChecksumLocationName, mockHeadersWithChecksumHeader);
9597
});
9698
});
9799
});

packages/middleware-flexible-checksums/src/flexibleChecksumsMiddleware.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ export const flexibleChecksumsMiddleware =
5757
return next(args);
5858
}
5959

60+
for (const header of Object.keys(args.request.headers)) {
61+
if (header.toLowerCase().startsWith("x-amz-checksum-")) {
62+
return next(args);
63+
}
64+
}
65+
6066
const { request } = args;
6167
const { body: requestBody, headers } = request;
6268
const { base64Encoder, streamHasher } = config;

0 commit comments

Comments
 (0)