Name, Seitentitel, Dienste (playwish-web, playwish-controller), Dienst-Benutzer (playwish), Pfade (/opt/playwish, /usr/local/src/playwish), Vorlagen und Repository-Adresse. „Audiofy“ war bereits von mehreren Produkten belegt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 lines
1.3 KiB
JavaScript
36 lines
1.3 KiB
JavaScript
// Playwish – Admin-Login
|
||
"use strict";
|
||
|
||
let schutz = { token: async () => null, reset() {}, bereit: () => true }; // Turnstile (falls aktiv)
|
||
window.PlaywishTurnstile.einrichten(document.getElementById("turnstile"), "login").then((s) => { schutz = s; });
|
||
|
||
document.getElementById("login").addEventListener("submit", async (ereignis) => {
|
||
ereignis.preventDefault();
|
||
const fehler = document.getElementById("fehler");
|
||
const knopf = ereignis.target.querySelector("button");
|
||
fehler.textContent = "";
|
||
knopf.disabled = true;
|
||
try {
|
||
if (!schutz.bereit()) knopf.textContent = "Sicherheitsprüfung …";
|
||
const turnstile = await schutz.token();
|
||
knopf.textContent = "Anmelden …";
|
||
const antwort = await fetch("/admin/login", {
|
||
method: "POST",
|
||
credentials: "same-origin",
|
||
headers: { "Content-Type": "application/json" },
|
||
body: JSON.stringify({ password: document.getElementById("passwort").value, turnstile }),
|
||
}).finally(() => schutz.reset());
|
||
if (antwort.ok) {
|
||
location.href = "/admin";
|
||
return;
|
||
}
|
||
let meldung = "Anmeldung fehlgeschlagen.";
|
||
try { meldung = (await antwort.json()).detail || meldung; } catch (_) { /* leer */ }
|
||
fehler.textContent = meldung;
|
||
} catch (_) {
|
||
fehler.textContent = "Keine Verbindung zum Server.";
|
||
}
|
||
knopf.textContent = "Anmelden";
|
||
knopf.disabled = false;
|
||
});
|