mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-30 08:16:37 +08:00
91 lines
2.3 KiB
TypeScript
91 lines
2.3 KiB
TypeScript
export const SESSION_STORAGE_KEYS = {
|
|
token: "token",
|
|
roleId: "role_id",
|
|
name: "name",
|
|
admin: "admin",
|
|
} as const;
|
|
|
|
export interface SessionData {
|
|
token: string | null;
|
|
roleId: number | null;
|
|
name: string | null;
|
|
isAdmin: boolean;
|
|
}
|
|
|
|
export interface LoginSessionPayload {
|
|
token: string;
|
|
role_id: number;
|
|
name: string;
|
|
}
|
|
|
|
const SESSION_EVENT_NAME = "sessionUpdated";
|
|
|
|
const parseRoleId = (value: string | null): number | null => {
|
|
if (value === null) {
|
|
return null;
|
|
}
|
|
|
|
const roleId = Number.parseInt(value, 10);
|
|
|
|
return Number.isNaN(roleId) ? null : roleId;
|
|
};
|
|
|
|
export const getToken = (): string | null => {
|
|
return localStorage.getItem(SESSION_STORAGE_KEYS.token);
|
|
};
|
|
|
|
export const getRoleId = (): number | null => {
|
|
return parseRoleId(localStorage.getItem(SESSION_STORAGE_KEYS.roleId));
|
|
};
|
|
|
|
export const getSessionName = (): string | null => {
|
|
return localStorage.getItem(SESSION_STORAGE_KEYS.name);
|
|
};
|
|
|
|
export const getAdminFlag = (): boolean => {
|
|
const adminValue = localStorage.getItem(SESSION_STORAGE_KEYS.admin);
|
|
|
|
if (adminValue !== null) {
|
|
return adminValue === "true";
|
|
}
|
|
|
|
const roleId = getRoleId();
|
|
const isAdmin = roleId === 0;
|
|
|
|
if (roleId !== null) {
|
|
localStorage.setItem(SESSION_STORAGE_KEYS.admin, String(isAdmin));
|
|
}
|
|
|
|
return isAdmin;
|
|
};
|
|
|
|
export const readSession = (): SessionData => {
|
|
return {
|
|
token: getToken(),
|
|
roleId: getRoleId(),
|
|
name: getSessionName(),
|
|
isAdmin: getAdminFlag(),
|
|
};
|
|
};
|
|
|
|
export const writeLoginSession = (payload: LoginSessionPayload): void => {
|
|
localStorage.setItem(SESSION_STORAGE_KEYS.token, payload.token);
|
|
localStorage.setItem(SESSION_STORAGE_KEYS.roleId, String(payload.role_id));
|
|
localStorage.setItem(SESSION_STORAGE_KEYS.name, payload.name);
|
|
localStorage.setItem(
|
|
SESSION_STORAGE_KEYS.admin,
|
|
String(payload.role_id === 0),
|
|
);
|
|
window.dispatchEvent(new Event(SESSION_EVENT_NAME));
|
|
};
|
|
|
|
export const clearSession = (): void => {
|
|
localStorage.removeItem(SESSION_STORAGE_KEYS.token);
|
|
localStorage.removeItem(SESSION_STORAGE_KEYS.roleId);
|
|
localStorage.removeItem(SESSION_STORAGE_KEYS.name);
|
|
localStorage.removeItem(SESSION_STORAGE_KEYS.admin);
|
|
window.dispatchEvent(new Event(SESSION_EVENT_NAME));
|
|
};
|
|
|
|
export const SESSION_UPDATED_EVENT = SESSION_EVENT_NAME;
|