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
+17
View File
@@ -211,6 +211,23 @@ def test_gastzugang_und_qr(client):
assert png.content[:8] == b"\x89PNG\r\n\x1a\n" and "attachment" in png.headers["content-disposition"]
def test_eigener_einladungslink(client):
h = anmelden(client)
assert client.post("/admin/api/access/token", json={"token": "sommerfest2026"}, headers=h).status_code == 200
z = client.get("/admin/api/access").json()
assert z["link"] == "https://musik.example.de/z/sommerfest2026" and z["token"] == "sommerfest2026"
assert z["base"] == "https://musik.example.de/z/"
for falsch in ("kurz", "mit leerzeichen", "../../etc", "ümlaut1", "x" * 65, ""):
assert client.post("/admin/api/access/token", json={"token": falsch}, headers=h).status_code == 422, falsch
assert client.post("/admin/api/access/token", json={"token": "sommerfest2026"}).status_code == 403 # ohne CSRF
# Gäste kommen mit dem eigenen Link hinein, mit dem alten zufälligen nicht mehr
client.post("/admin/api/access", json={"enabled": True}, headers=h)
gast = TestClient(client.app)
assert gast.get("/z/sommerfest2026", follow_redirects=False).status_code == 303
assert gast.get("/api/status").status_code == 200
assert gast.get("/z/Sommerfest2026", follow_redirects=False).status_code == 403 # Groß/klein zählt
def test_verlauf(client):
anmelden(client)
w = wunsch(k="A")