From 7ed644ac2f732ef2f6220b0d8690a17e37b54826 Mon Sep 17 00:00:00 2001 From: Lenny Date: Mon, 17 Nov 2025 10:40:16 -0500 Subject: [PATCH 1/2] fix: remove deuplicate slash in tus upload url generator --- src/http/routes/tus/lifecycle.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/http/routes/tus/lifecycle.ts b/src/http/routes/tus/lifecycle.ts index 536590b0d..0e7f911a0 100644 --- a/src/http/routes/tus/lifecycle.ts +++ b/src/http/routes/tus/lifecycle.ts @@ -126,7 +126,8 @@ export function generateUrl( const forwardedPath = req.headers['x-forwarded-prefix'] if (requestAllowXForwardedPrefix && typeof forwardedPath === 'string') { - basePath = forwardedPath + path + // Remove trailing slash from forwardedPath to avoid double slashes + basePath = forwardedPath.replace(/\/+$/, '') + path } const isSigned = req.url?.endsWith(SIGNED_URL_SUFFIX) @@ -264,7 +265,7 @@ export async function onUploadFinish(rawReq: Request, upload: Upload) { if (upload.metadata?.metadata) { try { customMd = JSON.parse(upload.metadata.metadata) - } catch (e) { + } catch { // no-op } } From 8e5c8cca621a003fd74c111c19e8e0ac29927a7d Mon Sep 17 00:00:00 2001 From: Lenny Date: Mon, 8 Dec 2025 14:21:15 -0600 Subject: [PATCH 2/2] removing prefix trailing slash from prefix in S3 handler --- src/storage/protocols/s3/signature-v4.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/storage/protocols/s3/signature-v4.ts b/src/storage/protocols/s3/signature-v4.ts index ee637d483..80b05c39f 100644 --- a/src/storage/protocols/s3/signature-v4.ts +++ b/src/storage/protocols/s3/signature-v4.ts @@ -424,8 +424,8 @@ export class SignatureV4 { signedHeaders: string[] ) { const method = request.method - const canonicalUri = new URL(`http://localhost:8080${request.prefix || ''}${request.url}`) - .pathname + const prefix = request.prefix ? request.prefix.replace(/\/+$/, '') : '' + const canonicalUri = new URL(`http://localhost:8080${prefix}${request.url}`).pathname const canonicalQueryString = this.constructCanonicalQueryString(request.query || {}) const canonicalHeaders = this.constructCanonicalHeaders(request, signedHeaders) const signedHeadersString = signedHeaders.sort().join(';')