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 } } 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(';')