50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
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;
|
|
}
|