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
50 lines
1.2 KiB
2 weeks ago
|
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;
|
||
|
}
|