/** * auth.js — Управление авторизацией владельца */ import { apiFetch, readJsonResponse } from "./api.js"; export function showAuthOverlay() { const overlay = document.querySelector("#auth-overlay"); const loginPassword = document.querySelector("#login-password"); const loginError = document.querySelector("#login-error"); if (overlay) overlay.hidden = false; if (loginError) { loginError.hidden = true; loginError.textContent = ""; } if (loginPassword) { loginPassword.value = ""; loginPassword.focus(); } } export function hideAuthOverlay() { const overlay = document.querySelector("#auth-overlay"); if (overlay) overlay.hidden = true; } export async function checkAuth() { try { const res = await fetch("/api/me"); if (res.ok) { hideAuthOverlay(); const logoutBtn = document.querySelector("#logout-button"); if (logoutBtn) logoutBtn.hidden = false; return true; } } catch { // Network or server error } showAuthOverlay(); const logoutBtn = document.querySelector("#logout-button"); if (logoutBtn) logoutBtn.hidden = true; return false; } export async function submitLogin(event) { event.preventDefault(); const loginUsername = document.querySelector("#login-username"); const loginPassword = document.querySelector("#login-password"); const loginError = document.querySelector("#login-error"); const loginSubmit = document.querySelector("#login-submit"); const username = String(loginUsername?.value || "").trim(); const password = String(loginPassword?.value || ""); if (!username || !password) { if (loginError) { loginError.textContent = "Укажите логин и пароль."; loginError.hidden = false; } return; } if (loginSubmit) loginSubmit.disabled = true; if (loginError) loginError.hidden = true; try { const res = await fetch("/api/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, password }), }); const data = await readJsonResponse(res); if (!res.ok || !data || !data.ok) { if (loginError) { loginError.textContent = data?.error || "Неверный логин или пароль."; loginError.hidden = false; } return; } hideAuthOverlay(); const logoutBtn = document.querySelector("#logout-button"); if (logoutBtn) logoutBtn.hidden = false; // Reload page or refresh state window.location.reload(); } catch (err) { if (loginError) { loginError.textContent = err.message || "Не удалось подключиться к серверу."; loginError.hidden = false; } } finally { if (loginSubmit) loginSubmit.disabled = false; } } export async function logout() { try { await apiFetch("/api/logout", { method: "POST" }); } catch { // ignore } showAuthOverlay(); const logoutBtn = document.querySelector("#logout-button"); if (logoutBtn) logoutBtn.hidden = true; }