Spaces:
Sleeping
Sleeping
| export const AUTH_TOKEN_KEY = 'sevima_raghub_auth_token'; | |
| const AUTH_USER_KEY = 'sevima_raghub_auth_user'; | |
| export type AuthRole = 'admin' | 'student' | 'lecturer'; | |
| export type AuthUser = { | |
| id: number; | |
| identity_number: string; | |
| name?: string; | |
| role: AuthRole; | |
| email: string; | |
| status: 'active' | 'inactive'; | |
| created_at: string; | |
| updated_at: string; | |
| }; | |
| export function getStoredAuthToken(): string | null { | |
| if (typeof window === 'undefined') { | |
| return null; | |
| } | |
| const rememberedToken = window.localStorage.getItem(AUTH_TOKEN_KEY); | |
| const sessionToken = window.sessionStorage.getItem(AUTH_TOKEN_KEY); | |
| const token = rememberedToken ?? sessionToken; | |
| return token ?? readCookie(AUTH_TOKEN_KEY); | |
| } | |
| export function getStoredAuthUser(): AuthUser | null { | |
| if (typeof window === 'undefined') { | |
| return null; | |
| } | |
| const rawUser = | |
| window.localStorage.getItem(AUTH_USER_KEY) ?? | |
| window.sessionStorage.getItem(AUTH_USER_KEY); | |
| const storedUser = rawUser ?? readCookie(AUTH_USER_KEY); | |
| if (!storedUser) { | |
| return null; | |
| } | |
| try { | |
| return JSON.parse(storedUser) as AuthUser; | |
| } catch { | |
| return null; | |
| } | |
| } | |
| export function clearAuthSession(): void { | |
| if (typeof window === 'undefined') { | |
| return; | |
| } | |
| window.localStorage.removeItem(AUTH_TOKEN_KEY); | |
| window.localStorage.removeItem(AUTH_USER_KEY); | |
| window.sessionStorage.removeItem(AUTH_TOKEN_KEY); | |
| window.sessionStorage.removeItem(AUTH_USER_KEY); | |
| clearCookie(AUTH_TOKEN_KEY); | |
| clearCookie(AUTH_USER_KEY); | |
| } | |
| function readCookie(name: string): string | null { | |
| if (typeof document === 'undefined') { | |
| return null; | |
| } | |
| const cookie = document.cookie | |
| .split('; ') | |
| .find((item) => item.startsWith(`${name}=`)); | |
| if (!cookie) { | |
| return null; | |
| } | |
| return decodeURIComponent(cookie.slice(name.length + 1)); | |
| } | |
| function clearCookie(name: string): void { | |
| if (typeof document === 'undefined') { | |
| return; | |
| } | |
| document.cookie = `${name}=; Path=/; SameSite=Lax; Max-Age=0`; | |
| } | |