Files
RustProxy/src/admin/web/app/session-resume.js
T
2026-10-13 00:57:19 +02:00

71 lines
2.8 KiB
JavaScript

function revalidateSession() {
if (!authenticated) return Promise.resolve(false);
if (sessionCheckPromise) return sessionCheckPromise;
const epoch = authEpoch;
window.rustProxyRefresh?.suspendForSessionValidation();
const check = (async () => {
try {
const info = await api("/api/auth/session");
if (!authenticated || epoch !== authEpoch) return false;
sessionInfo = info;
csrf = info.csrf_token;
renderSession();
hideSessionValidationFailure();
window.rustProxyRefresh?.completeSessionValidation(true);
return true;
} catch (error) {
if (!authenticated || epoch !== authEpoch || error?.status === 401) return false;
window.rustProxyRefresh?.completeSessionValidation(false);
showSessionValidationFailure(error);
return false;
}
})();
sessionCheckPromise = check;
void check.then(
() => { if (sessionCheckPromise === check) sessionCheckPromise = null; },
() => { if (sessionCheckPromise === check) sessionCheckPromise = null; }
);
return check;
}
function displayStartupError(error, sessionResume = false) {
$("login").hidden = true;
$("workspace").hidden = true;
$("logout").hidden = !authenticated;
document.documentElement.classList.add("app-loading", "app-startup-failed");
document.documentElement.classList.toggle("app-session-failed", sessionResume);
$("app-startup-title").textContent = sessionResume
? t("sessionValidationFailed")
: (languagePacks.size ? t("startupFailed") : "Could not load RustProxy");
const detail = $("app-startup-detail");
detail.textContent = error?.message || String(error);
detail.hidden = false;
$("app-startup-reload").hidden = sessionResume;
$("app-session-retry").hidden = !sessionResume;
}
function showSessionValidationFailure(error) {
displayStartupError(error, true);
}
function hideSessionValidationFailure() {
if (!document.documentElement.classList.contains("app-session-failed")) return;
document.documentElement.classList.remove("app-session-failed", "app-loading", "app-startup-failed");
$("app-startup-detail").hidden = true;
$("app-startup-detail").textContent = "";
$("app-startup-reload").hidden = false;
$("app-session-retry").hidden = true;
$("workspace").hidden = false;
$("logout").hidden = false;
}
$("app-session-retry").addEventListener("click", () => {
const button = $("app-session-retry");
button.disabled = true;
void revalidateSession().then(
() => { button.disabled = false; },
() => { button.disabled = false; }
);
});
function showStartupFailure(error) {
window.rustProxyRefresh?.stop();
displayStartupError(error);
}