88 lines
2.1 KiB
JavaScript
88 lines
2.1 KiB
JavaScript
const TOKEN_KEY = 'teller_token';
|
|
const USER_DATA_KEY = 'teller_userData';
|
|
|
|
/** Matches backend jwt.token-validity-time (PT30M). */
|
|
const SESSION_MAX_AGE_SECONDS = 30 * 60;
|
|
|
|
function getCookie(name) {
|
|
const prefix = `${encodeURIComponent(name)}=`;
|
|
const parts = document.cookie ? document.cookie.split('; ') : [];
|
|
|
|
for (const part of parts) {
|
|
if (part.startsWith(prefix)) {
|
|
return decodeURIComponent(part.slice(prefix.length));
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function setCookie(name, value, maxAgeSeconds = SESSION_MAX_AGE_SECONDS) {
|
|
const secure = window.location.protocol === 'https:' ? '; Secure' : '';
|
|
document.cookie = [
|
|
`${encodeURIComponent(name)}=${encodeURIComponent(value)}`,
|
|
'Path=/',
|
|
`Max-Age=${maxAgeSeconds}`,
|
|
'SameSite=Lax',
|
|
secure,
|
|
].join('; ');
|
|
}
|
|
|
|
function removeCookie(name) {
|
|
document.cookie = `${encodeURIComponent(name)}=; Path=/; Max-Age=0; SameSite=Lax`;
|
|
}
|
|
|
|
export function getToken() {
|
|
return getCookie(TOKEN_KEY);
|
|
}
|
|
|
|
export function setToken(token) {
|
|
if (token == null || token === '') {
|
|
removeCookie(TOKEN_KEY);
|
|
return;
|
|
}
|
|
setCookie(TOKEN_KEY, token);
|
|
}
|
|
|
|
export function getUserData() {
|
|
const raw = getCookie(USER_DATA_KEY) ?? sessionStorage.getItem(USER_DATA_KEY);
|
|
if (!raw) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
return JSON.parse(raw);
|
|
} catch {
|
|
removeCookie(USER_DATA_KEY);
|
|
sessionStorage.removeItem(USER_DATA_KEY);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function setUserData(userData) {
|
|
if (userData == null) {
|
|
removeCookie(USER_DATA_KEY);
|
|
sessionStorage.removeItem(USER_DATA_KEY);
|
|
return;
|
|
}
|
|
|
|
const serialized = JSON.stringify(userData);
|
|
setCookie(USER_DATA_KEY, serialized);
|
|
sessionStorage.setItem(USER_DATA_KEY, serialized);
|
|
}
|
|
|
|
export function setSession({ token, userData } = {}) {
|
|
if (token !== undefined) {
|
|
setToken(token);
|
|
}
|
|
if (userData !== undefined) {
|
|
setUserData(userData);
|
|
}
|
|
}
|
|
|
|
export function clearSession() {
|
|
removeCookie(TOKEN_KEY);
|
|
removeCookie(USER_DATA_KEY);
|
|
sessionStorage.removeItem(USER_DATA_KEY);
|
|
}
|