From ea37bf95efa3ff6f804597181173b011a5e7f62e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 22 Dec 2025 05:35:50 +0000 Subject: [PATCH] Refactor video session handling and CORS configuration Co-authored-by: mathieumoran1 --- public/js/app_player.js | 65 +++++++++++++++--- .../__pycache__/server.cpython-312.pyc | Bin 10541 -> 11653 bytes python_video_server/server.py | 30 +++++++- 3 files changed, 84 insertions(+), 11 deletions(-) diff --git a/public/js/app_player.js b/public/js/app_player.js index b20f86e..27542b1 100644 --- a/public/js/app_player.js +++ b/public/js/app_player.js @@ -352,6 +352,58 @@ function setOpenOriginal(raw) { } } +function isApiVideoUrl(raw) { + const s = String(raw || '').trim(); + if (!s) return false; + if (s.startsWith('/api/video/')) return true; + try { + const u = new URL(s); + return u.pathname.startsWith('/api/video/'); + } catch (_) { + return false; + } +} + +function toVideoSessionUrl(videoSrc) { + const s = String(videoSrc || '').trim(); + if (!s) return null; + if (s.startsWith('/')) return '/api/video/session'; + try { + const u = new URL(s); + return new URL('/api/video/session', u.origin).toString(); + } catch (_) { + return null; + } +} + +async function ensureVideoSessionForSource(videoSrc, token) { + // Only needed for our protected /api/video/* streams. + if (!token) return; + if (!isApiVideoUrl(videoSrc)) return; + const sessionUrl = toVideoSessionUrl(videoSrc); + if (!sessionUrl) return; + + // If sessionUrl is cross-origin, we need credentials so the cookie is stored for that domain. + const isCrossOrigin = (() => { + try { + const u = new URL(sessionUrl, window.location.origin); + return u.origin !== window.location.origin; + } catch (_) { + return false; + } + })(); + + try { + await fetch(sessionUrl, { + method: 'POST', + headers: token ? { 'Authorization': `Bearer ${token}` } : undefined, + ...(isCrossOrigin ? { credentials: 'include' } : {}), + }); + } catch (_) { + // best-effort + } +} + async function playVodLink(vodLink) { const raw = normalizeVodLink(vodLink); if (!raw) { @@ -520,15 +572,6 @@ window.onload = async function () { setHeader(movie); - // Allow