From 86fba50b958131c908a7cae2bfe99594c1323175 Mon Sep 17 00:00:00 2001 From: rgrgogu Date: Wed, 8 Jul 2026 12:18:02 +0800 Subject: [PATCH] noted issue Signed-off-by: rgrgogu --- controllers/client/media.controller.js | 4 ++++ services/s3.service.js | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/controllers/client/media.controller.js b/controllers/client/media.controller.js index 3d42bba..dd942b7 100644 --- a/controllers/client/media.controller.js +++ b/controllers/client/media.controller.js @@ -210,6 +210,9 @@ exports.issueToken = async (req, res) => { // 3. Requester IP matches the IP that issued the token // // Range requests for the same token are allowed (browser seeking). +// TEMPORARY: +// Same with problem from s3.service.js (Line 168-171) +// Investigate the issue ourselves. exports.streamAsset = async (req, res) => { const { token } = req.params; @@ -257,6 +260,7 @@ exports.streamAsset = async (req, res) => { let presignedUrl; try { presignedUrl = await s3.getSignedDownloadUrl(storage_key, 60); + console.log("Presigned URL:", presignedUrl); } catch (err) { console.error("[CLIENT][MEDIA][STREAM] Pre-sign failed:", err.message); return res.status(500).json({ message: "Could not resolve media stream." }); diff --git a/services/s3.service.js b/services/s3.service.js index bd46d3e..f2d395d 100644 --- a/services/s3.service.js +++ b/services/s3.service.js @@ -165,15 +165,24 @@ async function deleteFile(key) { // A presigned URL arriving there collides with the proxy's own signature and // Garage rejects the request (400 "Header `x-amz-date` should be signed"). // See getPublicUrl() below for the browser-facing equivalent. +// TEMPORARY: +// The problem is this line do not tell for each of development machines +// which ones should be called whether it's for PUBLIC_URL or LOCAL_ENDPOINT itself. // async function getSignedDownloadUrl(key, expiresInSeconds = 3600) { + const client = getPublicClient(); + return getSignedUrl( - s3, - new GetObjectCommand({ Bucket: DEFAULT_BUCKET, Key: key }), - { expiresIn: expiresInSeconds } + client, + new GetObjectCommand({ + Bucket: DEFAULT_BUCKET, + Key: key, + }), + { + expiresIn: expiresInSeconds, + } ); } - // ─── getPublicUrl ───────────────────────────────────────────────────────────── // // Browser-facing pre-signed GET URL, signed against S3_PUBLIC_URL. Safe again