-- Empfang-Kiosk-Modus: separates Auth-Modell fuer das Tablet am -- Empfangstresen — KEIN Admin-Zugriff. -- ==================================================================== -- Idee: -- * Admin legt einen Kiosk an (Name, z.B. "Empfangstresen Hauptgebaeude"), -- bekommt einmalig eine URL `https://teamvis.de/empfang/k/`. -- * Diese URL wird einmal auf dem Tablet geoeffnet → Server validiert -- Token gegen `token_hash`, setzt langlebiges `kiosk_session`-Cookie -- (iron-session, 1 Jahr) und redirected auf `/empfang`. -- * Das Tablet bleibt damit dauerhaft im Empfangs-Modus, kann aber -- ueber das Cookie nichts anderes als die Empfang-Action. -- * Token wird nicht im Klartext gespeichert — bei Verlust einfach -- widerrufen (`revoked_at` setzen) und neuen Kiosk anlegen. create table if not exists public.reception_kiosks ( id uuid primary key default gen_random_uuid(), name text not null, -- Slug zum Anzeigen in Admin-UI / Logs (z.B. "empfang-haupt"). -- Eindeutig, klein, ohne Leerzeichen — generiert aus dem Namen. slug text not null unique, -- SHA256-Hex des Tokens. Token selbst (Base64URL ~32B) wird nur -- bei der Erstellung an die Admin-UI zurueckgegeben und sofort -- in die Aktivierungs-URL eingebaut. Danach nicht mehr abrufbar. token_hash text not null, created_at timestamptz not null default now(), -- Wann zuletzt ein Request mit dem Kiosk-Cookie validiert wurde. -- Hilfreich um vergessene/inaktive Tablets zu erkennen. last_used_at timestamptz, -- Soft-Revoke. Eintraege bleiben fuer Audit-Zwecke erhalten; -- ein widerrufener Kiosk akzeptiert kein Cookie und keine URL mehr. revoked_at timestamptz ); create index if not exists reception_kiosks_token_hash_idx on public.reception_kiosks (token_hash) where revoked_at is null; alter table public.reception_kiosks enable row level security; -- Default deny — Admin-Zugriff laeuft ueber Service-Role.