fix: strip trailing slash in SigV4 canonical URI
Deploy FileDrop / deploy (push) Successful in 36s

AWS SigV4 canonical URI must not have trailing slash (except root '/').
Bun can receive paths with trailing slash from SDK, causing signature
mismatch for all bucket operations (CreateBucket, HeadBucket, etc.)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude
2026-07-29 08:56:08 +07:00
parent f9484738db
commit 9bc2f22589
+2 -12
View File
@@ -1,5 +1,4 @@
import { timingSafeEqual } from 'node:crypto';
import logger from '../../shared/logger/index';
/**
* Timing-safe string comparison that prevents timing attacks.
@@ -167,9 +166,9 @@ const normalizeUri = (uri: string): string => {
result.push(segment);
}
// Reconstruct path
// Reconstruct path (no trailing slash except root)
const normalized = result.length > 0 ? `/${result.join('/')}` : '/';
return normalized;
return normalized === '/' ? '/' : normalized.replace(/\/+$/, '');
};
const awsEncode = (value: string): string =>
@@ -300,15 +299,6 @@ export const verifySignature = async (
const hashedCanonicalRequest = await sha256Hex(canonicalRequest);
// Debug canonical request for non-root GETs (bucket operations)
logger.info('SigV4 canonical request', {
method,
path: parsedUrl.pathname,
signedHeaders: parsed.signedHeaders,
hashedPayload: hashedPayload.slice(0, 20) + '...',
canReq: canonicalRequest.slice(0, 500),
});
// M1: Fall back to Date header if x-amz-date is missing
const amzDate = headers['x-amz-date'] || headers['date'] || '';