OciServe-aanmelding: uitnodiging accepteren en (waar het beleid dat toestaat) zelf registreren vanuit OciDeck #2425

Closed
opened 2026-10-14 18:40:43 +00:00 by brenno · 1 comment
Owner

Wat wil je bereiken

Een cursist die door een organisatie is uitgenodigd kan zich in OciDeck registreren en meteen beginnen, zonder een beheerdersapp. Nu verwijst de uitnodiging naar Keiko.

Wat mist er nu (origin/main 5802e9360)

  • OciDeck kent de publieke registratieroutes niet (nul aanroepen): POST /api/v1/invitation-registration-preview, POST /api/v1/invitation-registrations, POST /api/v1/invitation-acceptances. De "Uitnodiging openen…" op het welkomstscherm (welcome_screen.dart:403) gaat over Managed Intake-formulieren, niet over een account.
  • De uitnodigingsmail zegt "Open Keiko, kies Uitnodiging accepteren" (OciServe internal/api/handler.go:3997). Een deelnemer die alleen OciDeck gebruikt, moet dus Keiko installeren. Server-kant: brenno/OciServe#661.
  • self-register en het registratiebeleid hebben ook geen OciDeck-kant (POST /organizations/{org}/self-register).

Contract (OciServe 560f1ba)

  1. POST /api/v1/invitation-registration-preview (publiek, rate-limited) body {invitation_id (uuid), secret} → 200 {invited_email}; alle fouten zijn één generieke 400 (geen enumeratie), 429 bij te veel pogingen.
  2. POST /api/v1/invitation-registrations (publiek, Idempotency-Key verplicht) body {invitation_id, secret, display_name, password (min 12, max 1024)}. Het wachtwoord gaat rechtstreeks naar de identiteitsprovider en wordt nergens bewaard of gelogd; herhaling met dezelfde sleutel is veilig.
  3. Daarna één keer de normale OIDC Authorization Code + PKCE-aanmelding met het uitgenodigde adres als login_hint en prompt=login, zodat een nog actieve sessie van de uitnodiger niet wordt hergebruikt (zoals Keiko, docs/INVITATIONS.md in OciServe). lib/services/ociserve/ociserve_auth.dart stuurt nu alleen acr_values en max_age (uit de step-up, regel 105-106); login_hint en prompt=login moeten erbij.
  4. Voor een bestaande identiteit: POST /api/v1/invitation-acceptances (aangemeld).
  5. Zelfregistratie volgt zodra brenno/OciServe#661 kiest hoe die werkt; bouw die kant dan pas.

Gevraagd

  • Een korte begeleide reis (sluit aan op #2022): serveradres, uitnodigingsnummer en code, naam, wachtwoord met bevestiging, dan aanmelden.
  • Het wachtwoord leeft alleen in de invoervelden en wordt na de aanroep gewist; nooit in log, diagnose, klembordgeschiedenis of crashrapport. Een eigen idempotency-sleutel per schermsessie.
  • Mislukt het openen van de aanmelding ná een geslaagde registratie, toon dan een bevestigingsscherm met een handmatige knop Aanmelden en herhaal de registratie nooit automatisch.
  • De uitnodigingscode komt nooit in een URL of bestand.

Toets op de kernwaarden

Alleen actief voor wie bewust met een OciServe is verbonden (ongewijzigd); zonder server blijft OciDeck volledig lokaal werken. Geen telemetrie, geen wijziging van het bestandsformaat, geen nieuwe verplichte afhankelijkheid. De route staat al in de gepinde speckopie (test/fixtures/ociserve_openapi.yaml, OciServe 45d9a87), dus de pin hoeft niet omhoog; registreer de nieuwe aanroepen wel in test/ociserve_api_drift_test.dart (de contractpoort, #2042).

Acceptatiecriteria

  • Een nieuwe cursist registreert en meldt aan zonder Keiko (proef tegen een echte OciServe met Keycloak).
  • Generieke fout bij elke ongeldige combinatie; geen onderscheid tussen verlopen en onbekend zichtbaar.
  • Wachtwoordvelden: zichtbaarheidsknop, geen autofill-lek, geen tekst in diagnose.
  • Offline of herhaald indrukken maakt geen tweede account.

Acceptatiecriteria (algemeen)

  • Nieuwe aanroepen staan in de contractpoort met de velden die OciDeck leest.
  • Nieuwe l10n.d('…')-teksten via make add-l10n (31 talen).
  • make check groen; docs/USER_GUIDE.md, docs/SOURCE_MAP.md en CHANGELOG.md bijgewerkt.

Gerelateerd

Server: brenno/OciServe#661. Keiko: brenno/Keiko#395 (beleid instellen). Overzicht: brenno/OciServe#659.


Keten-audit van 2026-10-14, getoetst aan OciServe 560f1ba, Keiko 093f679 en OciDeck 5802e9360. Overzicht: brenno/OciServe#659.

## Wat wil je bereiken Een cursist die door een organisatie is uitgenodigd kan zich in OciDeck registreren en meteen beginnen, zonder een beheerdersapp. Nu verwijst de uitnodiging naar Keiko. ## Wat mist er nu (origin/main `5802e9360`) - OciDeck kent de publieke registratieroutes niet (nul aanroepen): `POST /api/v1/invitation-registration-preview`, `POST /api/v1/invitation-registrations`, `POST /api/v1/invitation-acceptances`. De "Uitnodiging openen…" op het welkomstscherm (`welcome_screen.dart:403`) gaat over Managed Intake-formulieren, niet over een account. - De uitnodigingsmail zegt "Open Keiko, kies Uitnodiging accepteren" (OciServe `internal/api/handler.go:3997`). Een deelnemer die alleen OciDeck gebruikt, moet dus Keiko installeren. Server-kant: brenno/OciServe#661. - `self-register` en het registratiebeleid hebben ook geen OciDeck-kant (`POST /organizations/{org}/self-register`). ## Contract (OciServe `560f1ba`) 1. `POST /api/v1/invitation-registration-preview` (publiek, rate-limited) body `{invitation_id (uuid), secret}` → 200 `{invited_email}`; alle fouten zijn één generieke 400 (geen enumeratie), 429 bij te veel pogingen. 2. `POST /api/v1/invitation-registrations` (publiek, `Idempotency-Key` verplicht) body `{invitation_id, secret, display_name, password (min 12, max 1024)}`. Het wachtwoord gaat rechtstreeks naar de identiteitsprovider en wordt nergens bewaard of gelogd; herhaling met dezelfde sleutel is veilig. 3. Daarna één keer de normale OIDC Authorization Code + PKCE-aanmelding met het uitgenodigde adres als `login_hint` en `prompt=login`, zodat een nog actieve sessie van de uitnodiger niet wordt hergebruikt (zoals Keiko, `docs/INVITATIONS.md` in OciServe). `lib/services/ociserve/ociserve_auth.dart` stuurt nu alleen `acr_values` en `max_age` (uit de step-up, regel 105-106); `login_hint` en `prompt=login` moeten erbij. 4. Voor een bestaande identiteit: `POST /api/v1/invitation-acceptances` (aangemeld). 5. Zelfregistratie volgt zodra brenno/OciServe#661 kiest hoe die werkt; bouw die kant dan pas. ## Gevraagd - Een korte begeleide reis (sluit aan op #2022): serveradres, uitnodigingsnummer en code, naam, wachtwoord met bevestiging, dan aanmelden. - Het wachtwoord leeft alleen in de invoervelden en wordt na de aanroep gewist; nooit in log, diagnose, klembordgeschiedenis of crashrapport. Een eigen idempotency-sleutel per schermsessie. - Mislukt het openen van de aanmelding ná een geslaagde registratie, toon dan een bevestigingsscherm met een handmatige knop **Aanmelden** en herhaal de registratie nooit automatisch. - De uitnodigingscode komt nooit in een URL of bestand. ## Toets op de kernwaarden Alleen actief voor wie bewust met een OciServe is verbonden (ongewijzigd); zonder server blijft OciDeck volledig lokaal werken. Geen telemetrie, geen wijziging van het bestandsformaat, geen nieuwe verplichte afhankelijkheid. De route staat al in de gepinde speckopie (`test/fixtures/ociserve_openapi.yaml`, OciServe `45d9a87`), dus de pin hoeft niet omhoog; registreer de nieuwe aanroepen wel in `test/ociserve_api_drift_test.dart` (de contractpoort, #2042). ## Acceptatiecriteria - [ ] Een nieuwe cursist registreert en meldt aan zonder Keiko (proef tegen een echte OciServe met Keycloak). - [ ] Generieke fout bij elke ongeldige combinatie; geen onderscheid tussen verlopen en onbekend zichtbaar. - [ ] Wachtwoordvelden: zichtbaarheidsknop, geen autofill-lek, geen tekst in diagnose. - [ ] Offline of herhaald indrukken maakt geen tweede account. ## Acceptatiecriteria (algemeen) - [ ] Nieuwe aanroepen staan in de contractpoort met de velden die OciDeck leest. - [ ] Nieuwe `l10n.d('…')`-teksten via `make add-l10n` (31 talen). - [ ] `make check` groen; `docs/USER_GUIDE.md`, `docs/SOURCE_MAP.md` en `CHANGELOG.md` bijgewerkt. ## Gerelateerd Server: brenno/OciServe#661. Keiko: brenno/Keiko#395 (beleid instellen). Overzicht: brenno/OciServe#659. --- _Keten-audit van 2026-10-14, getoetst aan OciServe `560f1ba`, Keiko `093f679` en OciDeck `5802e9360`. Overzicht: brenno/OciServe#659._
Author
Owner

Gemerged in #2444 (merge-commit 5446218c72). Na het samenvoegen met main is de per-bestand-dekking van de nieuwe provider-, dialoog- en bewijslagen met tests aangevuld; make check, check-secrets en sast zijn groen. #2424 was al gedekt door me/exam-results.

Gemerged in https://pawprint.vigilis.online/LibreKAT/Ocideck/pulls/2444 (merge-commit 5446218c72). Na het samenvoegen met main is de per-bestand-dekking van de nieuwe provider-, dialoog- en bewijslagen met tests aangevuld; make check, check-secrets en sast zijn groen. #2424 was al gedekt door me/exam-results.
Sign in to join this conversation.
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
LibreKAT/Ocideck#2425
No description provided.