OciServe-certificaten: toon 'Mijn certificaten' en bewaar de PDF #2426

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

Wat wil je bereiken

Een cursist ziet de certificaten die hij heeft gekregen, kan ze als PDF bewaren en kan ze laten controleren. Nu heeft OciDeck geen enkel certificaatscherm (nul treffers op certificates).

Contract (OciServe 560f1ba)

  • GET /organizations/{org}/participants/{pid}/certificates → CertificateList {certificates:[{id, participant_id, title, description, certificate_number, status (issued|revoked), issued_at, created_at}]}. De gekoppelde deelnemer met content:view mag zijn eigen lijst lezen.
  • GET …/certificates/{certificate_id}/pdf → de PDF (binair); dezelfde toegangsregel.
  • Het participant_id haalt OciDeck nu uit GET me/privacy-data; brenno/OciServe#660 stelt voor het aan het lidmaatschap in GET /me toe te voegen.
  • Controleren door een derde loopt via POST /api/v1/public/certificates/verify {certificate_number, verification_secret}; waar dat woont beslist brenno/OciServe#660. OciDeck hoeft niets te verifiëren, alleen de PDF te kunnen tonen.

Gevraagd

  • In de eLearning-module bij Mijn bewijs (vierde bestemming) een sectie Certificaten: titel, uitgiftedatum, status; een ingetrokken certificaat blijft zichtbaar met die status.
  • PDF bewaren via de bestaande exportroutes (file_picker saveFile) en bekijken in de bestaande PDF-viewer (lib/widgets/reader/pdf_evidence_viewer.dart). De PDF bevat het verificatiegeheim: geen kopieer- of deelknop in de app zelf, geen caching buiten de bewuste opslagplek, geen logregel met de inhoud.
  • Het certificaat telt mee in de gegevensinzage en export van de cursist (zoals #2041 voor bewijs).
  • Leeg staat uitleggen: certificaten worden door de organisatie uitgegeven.

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

  • Lijst, PDF bewaren en weergeven werken; status revoked is duidelijk.
  • Het PDF-geheim verschijnt in geen log, diagnose of crashrapport (test op de logstroom).
  • Gegevensinzage toont de certificaten.

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#660. Keiko uitgeven: brenno/Keiko#394. 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 ziet de certificaten die hij heeft gekregen, kan ze als PDF bewaren en kan ze laten controleren. Nu heeft OciDeck geen enkel certificaatscherm (nul treffers op `certificates`). ## Contract (OciServe `560f1ba`) - `GET /organizations/{org}/participants/{pid}/certificates` → `CertificateList {certificates:[{id, participant_id, title, description, certificate_number, status (issued|revoked), issued_at, created_at}]}`. De gekoppelde deelnemer met `content:view` mag zijn eigen lijst lezen. - `GET …/certificates/{certificate_id}/pdf` → de PDF (binair); dezelfde toegangsregel. - Het `participant_id` haalt OciDeck nu uit `GET me/privacy-data`; brenno/OciServe#660 stelt voor het aan het lidmaatschap in `GET /me` toe te voegen. - Controleren door een derde loopt via `POST /api/v1/public/certificates/verify` `{certificate_number, verification_secret}`; waar dat woont beslist brenno/OciServe#660. OciDeck hoeft niets te verifiëren, alleen de PDF te kunnen tonen. ## Gevraagd - In de eLearning-module bij **Mijn bewijs** (vierde bestemming) een sectie **Certificaten**: titel, uitgiftedatum, status; een ingetrokken certificaat blijft zichtbaar met die status. - PDF bewaren via de bestaande exportroutes (`file_picker` saveFile) en bekijken in de bestaande PDF-viewer (`lib/widgets/reader/pdf_evidence_viewer.dart`). De PDF bevat het verificatiegeheim: geen kopieer- of deelknop in de app zelf, geen caching buiten de bewuste opslagplek, geen logregel met de inhoud. - Het certificaat telt mee in de gegevensinzage en export van de cursist (zoals #2041 voor bewijs). - Leeg staat uitleggen: certificaten worden door de organisatie uitgegeven. ## 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 - [ ] Lijst, PDF bewaren en weergeven werken; status `revoked` is duidelijk. - [ ] Het PDF-geheim verschijnt in geen log, diagnose of crashrapport (test op de logstroom). - [ ] Gegevensinzage toont de certificaten. ## 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#660. Keiko uitgeven: brenno/Keiko#394. 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#2426
No description provided.