71 lines
2.8 KiB
JavaScript
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);
|
|
}
|