This commit is contained in:
jpmvaz
2026-09-13 20:23:05 +01:00
commit 34900bf069
45 changed files with 4879 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
const $ = (s) => document.querySelector(s);
// Decide whether to show the sign-in form or the first-run setup form.
fetch('/api/me').then((r) => r.json()).then((m) => {
if (m.authed) { location.href = '/'; return; }
if (m.needsSetup) {
$('#loginView').style.display = 'none';
$('#setupView').style.display = 'block';
$('#s_username').focus();
} else {
$('#username').focus();
}
}).catch(() => {});
// --- sign in ---------------------------------------------------------------
async function signIn() {
const username = $('#username').value.trim();
const password = $('#password').value;
$('#err').textContent = '';
if (!username || !password) { $('#err').textContent = 'Enter your username and password.'; return; }
$('#signin').disabled = true;
try {
const res = await fetch('/api/login', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new Error(data.error || 'Sign in failed.');
location.href = '/';
} catch (e) { $('#err').textContent = e.message; $('#signin').disabled = false; }
}
$('#signin').addEventListener('click', signIn);
// --- first-run setup -------------------------------------------------------
async function createAdmin() {
const username = $('#s_username').value.trim();
const email = $('#s_email').value.trim();
const password = $('#s_password').value;
const password2 = $('#s_password2').value;
$('#s_err').textContent = '';
if (!username || !password) { $('#s_err').textContent = 'Choose a username and password.'; return; }
if (password !== password2) { $('#s_err').textContent = 'The passwords do not match.'; return; }
$('#createAdmin').disabled = true;
try {
const res = await fetch('/api/setup', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, email, password })
});
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new Error(data.error || 'Could not create the account.');
location.href = '/';
} catch (e) { $('#s_err').textContent = e.message; $('#createAdmin').disabled = false; }
}
$('#createAdmin').addEventListener('click', createAdmin);
document.addEventListener('keydown', (e) => {
if (e.key !== 'Enter') return;
if ($('#setupView').style.display !== 'none') createAdmin();
else signIn();
});