You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.2 KiB

const CHECK_INTERVAL_MILLISECS = 2000;
const initialSession = getSession();
let timeout;
// Remove the timeout when unloading to avoid execution of the
// checkCookiesAndSetTimer when the page is already submitted
addEventListener("beforeunload", () => {
if (timeout) {
clearTimeout(timeout);
timeout = undefined;
}
});
export function checkCookiesAndSetTimer(loginRestartUrl) {
if (initialSession) {
// We started with a session, so there is nothing to do, exit.
return;
}
const session = getSession();
if (!session) {
// The session is not present, check again later.
timeout = setTimeout(
() => checkCookiesAndSetTimer(loginRestartUrl),
CHECK_INTERVAL_MILLISECS,
);
} else {
// Redirect to the login restart URL. This can typically automatically login user due the SSO
location.href = loginRestartUrl;
}
}
function getSession() {
return getCookieByName("KEYCLOAK_SESSION");
}
function getCookieByName(name) {
for (const cookie of document.cookie.split(";")) {
const [key, value] = cookie.split("=").map((value) => value.trim());
if (key === name) {
return value.startsWith('"') && value.endsWith('"')
? value.slice(1, -1)
: value;
}
}
return null;
}