fix: match /media/ path not hostname in cover-proxy URL rewrite
Deploy Indiekit Server / deploy (push) Successful in 1m21s

FUNKWHALE_INSTANCE uses internal IP (10.100.0.40) but media URLs
have public hostname (audio.giersig.eu) — hostname comparison never
matched. Switch to path-prefix check on /media/ instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Sven
2026-04-21 23:33:39 +02:00
parent 7e69f2b3f3
commit bd1fc2d91e
@@ -786,16 +786,13 @@ const patchSpecs = [
const upstream = await fetch(rawUrl, {`,
newSnippet: ` try { urlObj = new URL(rawUrl); } catch { return response.status(400).send("Invalid url"); }
// Rewrite media URLs to internal endpoint when node jail can't reach public hostname
// Rewrite media URLs to internal endpoint when node jail can't reach public hostname.
// FUNKWHALE_INSTANCE may use an internal IP while media URLs use the public hostname,
// so we match by path prefix (/media/) rather than by hostname.
let fetchUrl = rawUrl;
const { funkwhaleConfig } = request.app.locals.application;
if (funkwhaleConfig?.mediaInternalUrl && funkwhaleConfig?.instanceUrl) {
try {
const instanceHost = new URL(funkwhaleConfig.instanceUrl).hostname;
if (urlObj.hostname === instanceHost) {
fetchUrl = funkwhaleConfig.mediaInternalUrl.replace(/\\/+$/, "") + urlObj.pathname + urlObj.search;
}
} catch {}
if (funkwhaleConfig?.mediaInternalUrl && urlObj.pathname.startsWith("/media/")) {
fetchUrl = funkwhaleConfig.mediaInternalUrl.replace(/\\/+$/, "") + urlObj.pathname + (urlObj.search || "");
}
try {