/** * =============================================================================== * FILE: modules/web_api/static/js/auth.js * ROLE: Менеджер сессий, токенов, ФИО и авторизационных заголовков. * =============================================================================== */ const AUTH_STORAGE_KEY = "scud_auth_token"; const USERNAME_STORAGE_KEY = "scud_username"; const FULLNAME_STORAGE_KEY = "scud_full_name"; const IS_ADMIN_STORAGE_KEY = "scud_is_admin"; const USER_ID_STORAGE_KEY = "scud_user_id"; const AuthManager = { getToken() { return localStorage.getItem(AUTH_STORAGE_KEY) || ""; }, getUserId() { const uid = localStorage.getItem(USER_ID_STORAGE_KEY); return uid ? parseInt(uid, 10) : 1; }, getUsername() { return localStorage.getItem(USERNAME_STORAGE_KEY) || ""; }, getFullName() { return localStorage.getItem(FULLNAME_STORAGE_KEY) || this.getUsername() || "Пользователь"; }, isAdmin() { return localStorage.getItem(IS_ADMIN_STORAGE_KEY) === "true"; }, isAuthenticated() { return Boolean(this.getToken()); }, setSession(token, username, fullName, isAdmin, userId = 1) { localStorage.setItem(AUTH_STORAGE_KEY, token); localStorage.setItem(USERNAME_STORAGE_KEY, username); localStorage.setItem(FULLNAME_STORAGE_KEY, fullName || username); localStorage.setItem(IS_ADMIN_STORAGE_KEY, String(isAdmin)); localStorage.setItem(USER_ID_STORAGE_KEY, String(userId)); localStorage.setItem("scud_api_auth_token", token); localStorage.setItem("auth_token", token); }, getAuthHeaders() { const token = this.getToken(); const headers = { "Content-Type": "application/json" }; if (token) { headers["Authorization"] = `Bearer ${token}`; } return headers; }, logout() { console.log("[Auth] Полный выход из системы..."); localStorage.clear(); sessionStorage.clear(); document.cookie.split(";").forEach((cookie) => { const eqPos = cookie.indexOf("="); const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim(); document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`; }); window.location.href = "/"; } }; window.AuthManager = AuthManager; window.logout = () => AuthManager.logout();