Admin: eigenen Einladungslink festlegen

Statt des zufälligen Links kann der Admin einen sprechenden Link wählen
(z. B. /z/sommerfest2026, mind. 6 Zeichen: A–Z, a–z, 0–9, - und _).
Alte Zugänge werden dabei ungültig; der QR-Code passt sich an.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 20:53:37 +01:00
co-authored by Claude Opus 5.5
parent fc15f2b933
commit 35985fe66d
4 changed files with 59 additions and 5 deletions
+10 -2
View File
@@ -108,8 +108,16 @@
<button id="link-kopieren" class="gross" type="button">Link kopieren</button>
<a id="qr-png" class="gross" href="/admin/api/access/qr?format=png" download>QR als Bild</a>
</div>
<button id="link-erneuern" class="gross voll" type="button">Neuen Link erzeugen</button>
<p class="hinweis klein">Ein neuer Link macht den alten und alle damit erteilten Zugänge ungültig.</p>
<button id="link-erneuern" class="gross voll" type="button">Neuen Link erzeugen (zufällig)</button>
<label class="name-zeile">
<span>Eigener Link: <span id="link-basis"></span>…</span>
<input id="link-eigen" type="text" maxlength="64" autocomplete="off" autocapitalize="off" spellcheck="false"
placeholder="z. B. sommerfest2026" pattern="[A-Za-z0-9_\-]{6,64}">
</label>
<button id="link-festlegen" class="gross voll" type="button">Eigenen Link übernehmen</button>
<p class="hinweis klein">Ein geänderter Link macht den alten und alle damit erteilten Zugänge ungültig.
Eigener Link: mindestens 6 Zeichen, nur Buchstaben, Ziffern, - und _; Groß-/Kleinschreibung zählt.
Je kürzer und gebräuchlicher, desto leichter zu erraten – für eine Party ist z. B. „sommerfest2026“ in Ordnung.</p>
</div>
<div class="karte">
+13
View File
@@ -293,6 +293,8 @@ async function ladeZugang() {
const z = await api("/access");
setzeSchalter("s-zugang", z.enabled);
$("einladungslink").value = z.link;
$("link-basis").textContent = z.base;
setzeWert("link-eigen", z.token);
$("qr").src = "/admin/api/access/qr?t=" + Date.now();
}
@@ -426,6 +428,17 @@ function start() {
toast("Neuer Link erzeugt");
ladeZugang();
});
$("link-festlegen").addEventListener("click", async () => {
const token = $("link-eigen").value.trim();
if (!/^[A-Za-z0-9_-]{6,64}$/.test(token)) {
toast("Mindestens 6 Zeichen: nur Buchstaben, Ziffern, - und _", true);
return;
}
if (!confirm(`Link auf „${token}“ ändern? Der alte Link und alle bisherigen Gastzugänge werden ungültig.`)) return;
await api("/access/token", { token });
toast("Eigener Link übernommen");
ladeZugang();
});
$("playlist-wechseln").addEventListener("click", async () => {
await aktion("/playlist", { link: $("playlist-neu").value }, "Playlist gewechselt").catch(() => {});