Files
provisioning-server/migrations/0072_personalisierung_einladung.sql
T
adminandClaude Opus 5.5 bcfe411290 Personalisierung per Einladung statt Aktivierungscode (ADR-0041, 24.10.2026)
Kunden-Admin trägt die Adresse ein (nur mit Merkmal), der Link (7 Tage,
einmalig) führt zu Anmeldename und Passwort; Stand-Seite per abgeleitetem
Token. Migration 0072: Stand eingeladen, Code-Spalten optional, laufende
Codes zurückgezogen. Code-Endpunkte entfernt; Passwort-vergessen-Kiosk
bleibt bis zur Umstellung der Rolle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:52:14 +02:00

34 lines
1.5 KiB
PL/PgSQL

BEGIN;
-- Vereinfachte Personalisierung (ADR-0041, Ergänzung 24.10.2026): Der
-- Kunden-Admin trägt die Adresse des Benutzers beim Gerät ein, der Benutzer
-- wählt Anmeldename und Passwort über einen Mail-Link. Kein Aktivierungscode
-- und keine eigene Bestätigung mehr; der Link belegt den Besitz der Adresse.
--
-- Neuer Ablauf der Stände:
-- eingeladen -> bestaetigt -> angelegt
-- Der Link nutzt bestaetigung_token_hash/bestaetigung_bis (7 Tage). Die
-- Adresse bleibt beim Verfall erhalten: Sie stammt vom Kunden-Admin, nicht
-- von einer unbestätigten Eingabe.
ALTER TABLE personalisierungen DROP CONSTRAINT personalisierungen_status_check;
ALTER TABLE personalisierungen ADD CONSTRAINT personalisierungen_status_check CHECK (status IN (
'eingeladen', 'code_offen', 'eingereicht', 'bestaetigt', 'angelegt',
'zurueckgezogen', 'verfallen', 'fehlgeschlagen', 'beendet'
));
ALTER TABLE personalisierungen ALTER COLUMN code_hash DROP NOT NULL;
ALTER TABLE personalisierungen ALTER COLUMN code_gueltig_bis DROP NOT NULL;
-- Laufende Vorgänge aus dem Code-Weg gibt es nach dem Umbau nicht mehr.
UPDATE personalisierungen
SET status = 'zurueckgezogen', passwort_hash = NULL, bestaetigung_token_hash = NULL
WHERE status IN ('code_offen', 'eingereicht');
DROP INDEX personalisierungen_ein_offener_je_geraet;
CREATE UNIQUE INDEX personalisierungen_ein_offener_je_geraet
ON personalisierungen (device_id)
WHERE status IN ('eingeladen', 'code_offen', 'eingereicht', 'bestaetigt');
COMMIT;