diff --git a/server/node/server.cjs b/server/node/server.cjs index 6e16bcce..b8feb4fd 100644 --- a/server/node/server.cjs +++ b/server/node/server.cjs @@ -153,26 +153,45 @@ async function hubProxyFunc(req, res) { delete headersToSend.host; delete headersToSend.connection; - const proxyReq = new Request(externalURL, { + const response = await fetch(externalURL, { method: req.method, headers: headersToSend, body: req.method !== 'GET' && req.method !== 'HEAD' ? req : undefined, - duplex: 'half' + redirect: 'manual' }); - const response = await fetch(proxyReq); - for (const [key, value] of response.headers.entries()) { res.setHeader(key, value); } res.status(response.status); + if (response.status >= 300 && response.status < 400) { + // Redirect handling (due to ‘/redirect/docs/lua’) + const redirectUrl = response.headers.get('location'); + if (redirectUrl) { + + if (redirectUrl.startsWith('http')) { + + if (redirectUrl.startsWith(hubURL)) { + const newPath = redirectUrl.replace(hubURL, '/hub-proxy'); + res.setHeader('location', newPath); + } + + } else if (redirectUrl.startsWith('/')) { + + res.setHeader('location', `/hub-proxy${redirectUrl}`); + } + } + + return res.end(); + } + await pipeline(response.body, res); } catch (error) { console.error("[Hub Proxy] Error:", error); if (!res.headersSent) { - res.status(502).send({ error: 'Proxy request failed' }); + res.status(502).send({ error: 'Proxy request failed: ' + error.message }); } else { res.end(); } diff --git a/src/lib/Others/AlertComp.svelte b/src/lib/Others/AlertComp.svelte index 16273635..7801aee6 100644 --- a/src/lib/Others/AlertComp.svelte +++ b/src/lib/Others/AlertComp.svelte @@ -72,7 +72,7 @@ { - if(e.origin.startsWith("https://sv.risuai.xyz") || e.origin.startsWith("http://127.0.0.1")){ + if(e.origin.startsWith("https://sv.risuai.xyz") || e.origin.startsWith("http://127.0.0.1") || e.origin === window.location.origin){ if(e.data.msg.data.vaild && $alertStore.type === 'login'){ $alertStore = { type: 'none', diff --git a/src/lib/Setting/Pages/UserSettings.svelte b/src/lib/Setting/Pages/UserSettings.svelte index 95a4a6c5..2cdcb012 100644 --- a/src/lib/Setting/Pages/UserSettings.svelte +++ b/src/lib/Setting/Pages/UserSettings.svelte @@ -19,7 +19,7 @@ { - if(e.origin.startsWith("https://sv.risuai.xyz") || e.origin.startsWith("http://127.0.0.1")){ + if(e.origin.startsWith("https://sv.risuai.xyz") || e.origin.startsWith("http://127.0.0.1") || e.origin === window.location.origin){ if(e.data.msg.type === 'drive'){ await loadRisuAccountData() DBState.db.account.data.refresh_token = e.data.msg.data.refresh_token