Merge pull request #27679 from overleaf/msm-aws-sdk-upgrade
Upgrade `aws-sdk` to v3 GitOrigin-RevId: 4989ae920d8b7fd9e79623947b7c40bcc2e56d92
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
const Crypto = require('node:crypto')
|
||||
|
||||
/**
|
||||
* Creates an S3 client that uses MD5 checksums for DeleteObjects operations
|
||||
* https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/MD5_FALLBACK.md
|
||||
*/
|
||||
const md5Middleware = (next, context) => async args => {
|
||||
if (context.commandName !== 'DeleteObjectsCommand') {
|
||||
return next(args)
|
||||
}
|
||||
|
||||
const headers = args.request.headers
|
||||
|
||||
// Remove any checksum headers added by default middleware
|
||||
// This ensures our Content-MD5 is the primary integrity check
|
||||
Object.keys(headers).forEach(header => {
|
||||
const lowerHeader = header.toLowerCase()
|
||||
if (
|
||||
lowerHeader.startsWith('x-amz-checksum-') ||
|
||||
lowerHeader.startsWith('x-amz-sdk-checksum-')
|
||||
) {
|
||||
delete headers[header]
|
||||
}
|
||||
})
|
||||
|
||||
if (args.request.body) {
|
||||
const bodyContent = Buffer.from(args.request.body)
|
||||
headers['Content-MD5'] = Crypto.createHash('md5')
|
||||
.update(bodyContent)
|
||||
.digest('base64')
|
||||
}
|
||||
|
||||
return await next(args)
|
||||
}
|
||||
|
||||
function addMd5Middleware(client) {
|
||||
// Add the middleware relative to the flexible checksums middleware
|
||||
// This ensures it runs after default checksums might be added, but before signing
|
||||
client.middlewareStack.add(md5Middleware, {
|
||||
step: 'build',
|
||||
toMiddleware: 'flexibleChecksumsMiddleware',
|
||||
name: 'addMD5ChecksumForDeleteObjects',
|
||||
tags: ['MD5_FALLBACK'],
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
addMd5Middleware,
|
||||
}
|
||||
Reference in New Issue
Block a user