Display-Seiten: Gäste holen sich den Zugang selbst #7

Merged
friloo merged 2 commits from feature/kiosk into main 2026-09-23 16:52:17 +00:00
Owner

Je Site lässt sich eine öffentliche Seite anlegen, die auf einem Bildschirm oder Tablet am Empfang läuft: ein großer Knopf, ein Klick, ein Zugangscode mit QR-Code. Nach einer einstellbaren Anzeigedauer springt der Bildschirm zurück – der nächste Gast sieht den Code seines Vorgängers nicht.

Verwaltung

Administration → Display-Seiten

Einstellung Wirkung
Site für welchen Standort die Codes erzeugt werden
Voucher-Profil Laufzeit, Geräteanzahl, Bandbreite (leer = Standardwerte)
Überschrift / Text was auf dem Bildschirm steht
Codes pro Tag Obergrenze je Kalendertag (0 = unbegrenzt)
Wartezeit Abstand zwischen zwei Codes an diesem Display
Anzeigedauer danach Rücksprung auf den Startbildschirm

Der geheime Link lässt sich kopieren, als QR-Code anzeigen (praktisch zum Öffnen auf dem Tablet) und jederzeit erneuern – der alte gilt dann sofort nicht mehr.

Für Bildschirme ohne Touch

Der Startbildschirm zeigt zusätzlich einen QR-Code auf sich selbst. Gäste öffnen die Seite damit am eigenen Handy und tippen dort.

Absicherung

Der Link ist der Zugang, deshalb:

  • Tageslimit und Wartezeit je Display
  • CSRF-Token am Formular, noindex, nofollow im Kopf
  • jeder ausgegebene Code landet im Audit-Log (Aktion „Voucher am Display geholt") und trägt über vouchers.kiosk_id seine Herkunft
  • keine Webhooks für Kiosk-Codes – ein Empfangsdisplay würde den Slack-Kanal fluten
  • schlägt der Controller fehl, erscheint eine freundliche Meldung statt einer Fehlerseite (geprüft)

Technik

  • neue Tabelle kiosks plus vouchers.kiosk_id (Migration 0005_kiosk.sql, database.sql nachgezogen)
  • includes/Kiosk.php kapselt Token, Limits und Profil-Auflösung
  • includes/VoucherService.php bündelt die Voucher-Erstellung, die vorher in index.php lag und für den Kiosk ein zweites Mal nötig gewesen wäre
  • Display-Seiten funktionieren unabhängig vom globalen öffentlichen Modus

Geprüft

9 neue Tests für Token-Prüfung, Wartezeit, Tageslimit und Profil-Auflösung (38 Tests, 80 Assertions), PHPStan deckt Kiosk.php mit ab, Sprachdateien deckungsgleich (573 Schlüssel), alle Seiten gerendert. Screenshots der Display-Seite und der Verwaltung sind im Screenshot-Werkzeug hinterlegt und in der README verlinkt.

Version auf 2.7.0 angehoben.

🤖 Generated with Claude Code

Je Site lässt sich eine **öffentliche Seite** anlegen, die auf einem Bildschirm oder Tablet am Empfang läuft: ein großer Knopf, ein Klick, ein Zugangscode mit QR-Code. Nach einer einstellbaren Anzeigedauer springt der Bildschirm zurück – der nächste Gast sieht den Code seines Vorgängers nicht. ## Verwaltung Administration → **Display-Seiten** | Einstellung | Wirkung | |---|---| | Site | für welchen Standort die Codes erzeugt werden | | Voucher-Profil | Laufzeit, Geräteanzahl, Bandbreite (leer = Standardwerte) | | Überschrift / Text | was auf dem Bildschirm steht | | Codes pro Tag | Obergrenze je Kalendertag (0 = unbegrenzt) | | Wartezeit | Abstand zwischen zwei Codes an diesem Display | | Anzeigedauer | danach Rücksprung auf den Startbildschirm | Der geheime Link lässt sich kopieren, als QR-Code anzeigen (praktisch zum Öffnen auf dem Tablet) und jederzeit erneuern – der alte gilt dann sofort nicht mehr. ## Für Bildschirme ohne Touch Der Startbildschirm zeigt zusätzlich einen QR-Code auf sich selbst. Gäste öffnen die Seite damit am eigenen Handy und tippen dort. ## Absicherung Der Link *ist* der Zugang, deshalb: - **Tageslimit** und **Wartezeit** je Display - CSRF-Token am Formular, `noindex, nofollow` im Kopf - jeder ausgegebene Code landet im **Audit-Log** (Aktion „Voucher am Display geholt") und trägt über `vouchers.kiosk_id` seine Herkunft - **keine Webhooks** für Kiosk-Codes – ein Empfangsdisplay würde den Slack-Kanal fluten - schlägt der Controller fehl, erscheint eine freundliche Meldung statt einer Fehlerseite (geprüft) ## Technik - neue Tabelle `kiosks` plus `vouchers.kiosk_id` (Migration `0005_kiosk.sql`, `database.sql` nachgezogen) - `includes/Kiosk.php` kapselt Token, Limits und Profil-Auflösung - `includes/VoucherService.php` bündelt die Voucher-Erstellung, die vorher in `index.php` lag und für den Kiosk ein zweites Mal nötig gewesen wäre - Display-Seiten funktionieren unabhängig vom globalen öffentlichen Modus ## Geprüft 9 neue Tests für Token-Prüfung, Wartezeit, Tageslimit und Profil-Auflösung (**38 Tests, 80 Assertions**), PHPStan deckt `Kiosk.php` mit ab, Sprachdateien deckungsgleich (573 Schlüssel), alle Seiten gerendert. Screenshots der Display-Seite und der Verwaltung sind im Screenshot-Werkzeug hinterlegt und in der README verlinkt. Version auf 2.7.0 angehoben. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
friloo added 2 commits 2026-09-23 16:52:17 +00:00
Für Empfang, Lobby oder Tagungsraum lässt sich je Site eine öffentliche
Seite anlegen (kiosk.php), die auf einem Bildschirm oder Tablet läuft:
ein großer Knopf, ein Klick, ein Zugangscode mit QR-Code. Nach einer
einstellbaren Anzeigedauer springt der Bildschirm zurück, damit der
nächste Gast nicht den Code seines Vorgängers sieht.

Verwaltung unter Administration → Display-Seiten:
- Site und optionales Voucher-Profil (bestimmt Laufzeit, Geräte, QoS)
- eigene Überschrift und Text für den Bildschirm
- Codes pro Tag, Wartezeit zwischen zwei Codes, Anzeigedauer
- geheimer Link zum Kopieren, als QR-Code anzeigbar und jederzeit
  erneuerbar (der alte Link gilt dann sofort nicht mehr)

Absicherung: der Link ist der Zugang, deshalb Tageslimit und Wartezeit
je Display, CSRF-Token am Formular, `noindex` im Kopf und ein Eintrag im
Audit-Log für jeden ausgegebenen Code. Webhooks werden für Kiosk-Codes
bewusst nicht ausgelöst – ein Empfangsdisplay würde den Kanal fluten.

Technik:
- neue Tabelle `kiosks`, `vouchers.kiosk_id` hält die Herkunft fest
  (Migration 0005, database.sql nachgezogen)
- includes/Kiosk.php kapselt Token, Limits und Profil-Auflösung
- includes/VoucherService.php bündelt die Voucher-Erstellung, die vorher
  in index.php lag und für den Kiosk ein zweites Mal nötig gewesen wäre
- Startbildschirm zeigt zusätzlich einen QR auf sich selbst, damit Gäste
  die Seite am eigenen Handy öffnen können

Tests: 9 neue Fälle für Token-Prüfung, Wartezeit, Tageslimit und
Profil-Auflösung (38 Tests gesamt), PHPStan deckt Kiosk.php mit ab.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Version 2.7.0
Some checks are pending
CI / PHP Lint (push) Waiting to run
CI / PHP Lint-1 (push) Waiting to run
CI / Unit Tests & Static Analysis (push) Waiting to run
CI / PHP Lint (pull_request) Waiting to run
CI / PHP Lint-1 (pull_request) Waiting to run
CI / Unit Tests & Static Analysis (pull_request) Waiting to run
ee3b85add4
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
friloo merged commit 943e427150 into main 2026-09-23 16:52:17 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: friloo/Unifi-Voucher-Tool#7
No description provided.