75 lines
2.5 KiB
JavaScript
75 lines
2.5 KiB
JavaScript
/**
|
|
* ===============================================================================
|
|
* 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(); |