Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,37 @@ import {

import { Md5BodyChecksumResolvedConfig } from "./md5Configuration";

export function applyMd5BodyChecksumMiddleware(options: Md5BodyChecksumResolvedConfig): BuildMiddleware<any, any> {
return <Output extends MetadataBearer>(next: BuildHandler<any, Output>): BuildHandler<any, Output> =>
async (args: BuildHandlerArguments<any>): Promise<BuildHandlerOutput<Output>> => {
let { request } = args;
if (HttpRequest.isInstance(request)) {
const { body, headers } = request;
if (!hasHeader("Content-MD5", headers)) {
let digest: Promise<Uint8Array>;
if (body === undefined || typeof body === "string" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {
const hash = new options.md5();
hash.update(body || "");
digest = hash.digest();
} else {
digest = options.streamHasher(options.md5, body);
}

request = {
...request,
headers: {
...headers,
"Content-MD5": options.base64Encoder(await digest),
},
};
export const applyMd5BodyChecksumMiddleware =
(options: Md5BodyChecksumResolvedConfig): BuildMiddleware<any, any> =>
<Output extends MetadataBearer>(next: BuildHandler<any, Output>): BuildHandler<any, Output> =>
async (args: BuildHandlerArguments<any>): Promise<BuildHandlerOutput<Output>> => {
let { request } = args;
if (HttpRequest.isInstance(request)) {
const { body, headers } = request;
if (!hasHeader("Content-MD5", headers)) {
let digest: Promise<Uint8Array>;
if (body === undefined || typeof body === "string" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {
const hash = new options.md5();
hash.update(body || "");
digest = hash.digest();
} else {
digest = options.streamHasher(options.md5, body);
}

request = {
...request,
headers: {
...headers,
"Content-MD5": options.base64Encoder(await digest),
},
};
}
return next({
...args,
request,
});
};
}
}
return next({
...args,
request,
});
};

export const applyMd5BodyChecksumMiddlewareOptions: BuildHandlerOptions = {
name: "applyMd5BodyChecksumMiddleware",
Expand All @@ -58,7 +58,7 @@ export const getApplyMd5BodyChecksumPlugin = (config: Md5BodyChecksumResolvedCon
},
});

function hasHeader(soughtHeader: string, headers: HeaderBag): boolean {
const hasHeader = (soughtHeader: string, headers: HeaderBag): boolean => {
soughtHeader = soughtHeader.toLowerCase();
for (const headerName of Object.keys(headers)) {
if (soughtHeader === headerName.toLowerCase()) {
Expand All @@ -67,4 +67,4 @@ function hasHeader(soughtHeader: string, headers: HeaderBag): boolean {
}

return false;
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ interface PreviouslyResolved {
base64Encoder: Encoder;
streamHasher: StreamHasher<any>;
}

export interface Md5BodyChecksumResolvedConfig {
/**
* A constructor for a class implementing the @aws-sdk/types.Hash interface that computes MD5 hashes.
Expand All @@ -23,10 +24,7 @@ export interface Md5BodyChecksumResolvedConfig {
*/
streamHasher: StreamHasher<any>;
}
export function resolveMd5BodyChecksumConfig<T>(

export const resolveMd5BodyChecksumConfig = <T>(
input: T & PreviouslyResolved & Md5BodyChecksumInputConfig
): T & Md5BodyChecksumResolvedConfig {
return {
...input,
};
}
): T & Md5BodyChecksumResolvedConfig => input;