diff --git a/public/assets/model/session.js b/public/assets/model/session.js index a7491500..4b9786b6 100644 --- a/public/assets/model/session.js +++ b/public/assets/model/session.js @@ -21,9 +21,12 @@ export function createSession(authenticationRequest) { url: withShare("api/session"), body: authenticationRequest, responseType: "json", - }).pipe(rxjs.tap(({ responseHeaders }) => { - if (responseHeaders.bearer) window.BEARER_TOKEN = responseHeaders.bearer; // see ctrl_boot_frontoffice.js -> setup_iframe - })); + }).pipe( + rxjs.tap(({ responseHeaders }) => { + if (responseHeaders.bearer) window.BEARER_TOKEN = responseHeaders.bearer; // see ctrl_boot_frontoffice.js -> setup_iframe + }), + rxjs.map(({ responseJSON }) => responseJSON.result), + ); } export function deleteSession() { diff --git a/public/assets/pages/connectpage/ctrl_form.js b/public/assets/pages/connectpage/ctrl_form.js index e796cb24..3bdfe306 100644 --- a/public/assets/pages/connectpage/ctrl_form.js +++ b/public/assets/pages/connectpage/ctrl_form.js @@ -18,6 +18,7 @@ import ctrlError from "../ctrl_error.js"; import config$ from "./model_config.js"; import backend$ from "./model_backend.js"; import { setCurrentBackend, getCurrentBackend, getURLParams } from "./ctrl_form_state.js"; +import { updateBackend } from "../filespage/cache.js"; const connections$ = config$.pipe( rxjs.map(({ connections, auth }) => (connections || []).map((conn) => { @@ -200,11 +201,12 @@ export default async function(render) { return rxjs.of(null).pipe( rxjs.tap(() => toggleLoader(true)), rxjs.mergeMap(() => createSession(formData)), - rxjs.tap(({ responseJSON }) => { + rxjs.tap(({ home, backendID }) => { + updateBackend(backendID); let redirectURL = toHref("/files/"); const GET = getURLParams(); if (GET["next"]) redirectURL = GET["next"]; - else if (responseJSON.result) redirectURL = toHref("/files" + responseJSON.result); + else if (home) redirectURL = toHref("/files" + home); if (redirectURL.startsWith("/api/")) return location.replace(redirectURL); navigate(forwardURLParams(redirectURL, ["nav"])); diff --git a/public/assets/pages/filespage/cache.js b/public/assets/pages/filespage/cache.js index 7bd58bec..4ab2a23f 100644 --- a/public/assets/pages/filespage/cache.js +++ b/public/assets/pages/filespage/cache.js @@ -255,6 +255,9 @@ let backendID = ""; export function currentBackend() { return backendID; } +export function updateBackend(id) { + backendID = id; +} export function currentShare() { return new window.URL(location.href).searchParams.get("share") || ""; diff --git a/server/ctrl/session.go b/server/ctrl/session.go index 6c5e5e5c..274e9f11 100644 --- a/server/ctrl/session.go +++ b/server/ctrl/session.go @@ -44,7 +44,7 @@ func SessionGet(ctx *App, res http.ResponseWriter, req *http.Request) { } r.IsAuth = true r.Home = NewString(home) - r.Backend = Hash(GenerateID(ctx.Session)+ctx.Session["path"], 20) + r.Backend = backendID(ctx.Session) if ctx.Share.Id == "" && Config.Get("features.protection.enable_chromecast").Bool() { r.Authorization = ctx.Authorization } @@ -126,11 +126,12 @@ func SessionAuthenticate(ctx *App, res http.ResponseWriter, req *http.Request) { if Config.Get("features.protection.iframe").String() != "" { res.Header().Set("bearer", obfuscate) } - if home != "" { - SendSuccessResult(res, home) - return - } - SendSuccessResult(res, nil) + SendSuccessResult(res, Session{ + IsAuth: true, + Home: NewString(home), + Backend: backendID(session), + Authorization: obfuscate, + }) } func SessionLogout(ctx *App, res http.ResponseWriter, req *http.Request) { @@ -504,3 +505,7 @@ func applyCookieSameSiteRule(cookie *http.Cookie, sameSiteValue http.SameSite) * cookie.SameSite = sameSiteValue return cookie } + +func backendID(session map[string]string) string { + return Hash(GenerateID(session)+session["path"], 20) +}