75 lines
1.8 KiB
JavaScript
75 lines
1.8 KiB
JavaScript
const CHECK_INTERVAL_MILLISECS = 2000;
|
|
const initialSession = getSession();
|
|
|
|
export function checkCookiesAndSetTimer(authSessionId, tabId, 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.
|
|
setTimeout(
|
|
() => checkCookiesAndSetTimer(authSessionId, tabId, loginRestartUrl),
|
|
CHECK_INTERVAL_MILLISECS
|
|
);
|
|
} else {
|
|
// The session is present, check the auth state.
|
|
checkAuthState(authSessionId, tabId, loginRestartUrl);
|
|
}
|
|
}
|
|
|
|
function checkAuthState(authSessionId, tabId, loginRestartUrl) {
|
|
const authStateRaw = getAuthState();
|
|
|
|
if (!authStateRaw) {
|
|
// The auth state is not present, exit.
|
|
return;
|
|
}
|
|
|
|
// Attempt to parse the auth state as JSON.
|
|
let authState;
|
|
try {
|
|
authState = JSON.parse(decodeURIComponent(authStateRaw));
|
|
} catch (error) {
|
|
// The auth state is not valid JSON, exit.
|
|
return;
|
|
}
|
|
|
|
if (authState.authSessionId !== authSessionId) {
|
|
// The session ID does not match, exit.
|
|
return;
|
|
}
|
|
|
|
if (
|
|
!Array.isArray(authState.remainingTabs) ||
|
|
!authState.remainingTabs.includes(tabId)
|
|
) {
|
|
// The remaining tabs don't include the provided tab ID, exit.
|
|
return;
|
|
}
|
|
|
|
// We made it this far, redirect to the login restart URL.
|
|
location.href = loginRestartUrl;
|
|
}
|
|
|
|
function getSession() {
|
|
return getCookieByName("KEYCLOAK_SESSION");
|
|
}
|
|
|
|
function getAuthState() {
|
|
return getCookieByName("KC_AUTH_STATE");
|
|
}
|
|
|
|
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;
|
|
}
|