// auth.js import { setCookie } from '/static/js/cookies.js'; import { apiRequest } from '/static/js/api.js'; const form = document.getElementById('loginForm'); const loginInput = document.getElementById('loginInput'); const passwordInput = document.getElementById('passwordInput'); const submitBtn = document.getElementById('submitBtn'); const formError = document.getElementById('formError'); function showError(msg) { formError.hidden = false; formError.textContent = msg; } function clearError() { formError.hidden = true; formError.textContent = ''; } async function getUserEndpoint() { const meta = document.querySelector('meta[name="userAuth-endpoint"]'); return meta ? meta.getAttribute('content') : '/user'; } form.addEventListener('submit', async (ev) => { ev.preventDefault(); clearError(); submitBtn.disabled = true; submitBtn.textContent = 'Входим...'; const login = loginInput.value.trim(); const password = passwordInput.value; if (!login || !password) { showError('Введите логин и пароль'); submitBtn.disabled = false; submitBtn.textContent = 'Войти'; return; } try { const url = await getUserEndpoint(); // Отправляем данные const resp = await apiRequest(url, { login, password }); // Пример ожидаемого формата: // { "status": "ok" | "error", "user": {...}, "access": {...} } if (!resp || typeof resp !== 'object') { throw new Error('Некорректный ответ от сервера'); } if (resp.status && (resp.status === 'error' || resp.status === 'fail')) { // Ошибка авторизации showError(resp.message || 'Неправильный логин или пароль'); submitBtn.disabled = false; submitBtn.textContent = 'Войти'; return; } // Если статус == success / ok / authenticated и есть user + access — считаем успешной const okStatuses = new Set(['ok', 'success', 'authenticated']); const isOk = resp.status && okStatuses.has(String(resp.status).toLowerCase()); // fallback: если resp.user или resp.access присутствуют — считаем ок const hasData = resp.user && typeof resp.user === 'object' && resp.access && typeof resp.access === 'object'; if (!isOk && !hasData) { showError('Авторизация не выполнена: пустой ответ'); submitBtn.disabled = false; submitBtn.textContent = 'Войти'; return; } await setCookie('toolbox_user', JSON.stringify(resp.user)); await setCookie('toolbox_access', JSON.stringify(resp.access)); window.location.href = '/'; // или другой URL } catch (err) { console.error(err); showError(err.message || 'Ошибка при авторизации'); submitBtn.disabled = false; submitBtn.textContent = 'Войти'; } });