TeamVis Self-Host-Bundle v0.31.0

This commit is contained in:
TeamVis Release
2026-06-25 16:38:31 +02:00
commit 717325742d
68 changed files with 3762 additions and 0 deletions
@@ -0,0 +1,39 @@
-- 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/<token>`.
-- * 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.