33 lines
2.1 KiB
Markdown
33 lines
2.1 KiB
Markdown
# ADR-0009 — Versleutelde platformmailboxen in de applicatie
|
|
|
|
- Status: accepted
|
|
- Datum: 2026-07-22
|
|
|
|
## Context
|
|
|
|
Alerts van VDAB, Indeed, LinkedIn en andere gereviewde jobboards komen in verschillende mailboxaccounts binnen en moeten vaker dan eenmaal per dag verwerkt kunnen worden. Alleen globale environmentcredentials bieden geen bruikbare beheerflow in het platform. Mailbox-app-wachtwoorden zijn secrets en mogen niet leesbaar in de database, logs, taakresultaten of HTML terechtkomen.
|
|
|
|
## Besluit
|
|
|
|
- Bewaar één gebruikersgescopeerde `MailboxConnection` per vacatureplatform.
|
|
- Ondersteun Gmail, Outlook / Microsoft 365 en een gecontroleerde aangepaste publieke IMAP-host, uitsluitend via IMAP over TLS.
|
|
- Versleutel app-wachtwoorden met Fernet/MultiFernet en een afzonderlijke `MAILBOX_CREDENTIAL_KEYS`-sleutellijst. De eerste sleutel versleutelt; volgende sleutels zijn alleen voor decryptie tijdens rotatie.
|
|
- Laat de scheduler elke vijf minuten verschuldigde mailboxen selecteren. Iedere mailbox kiest zelf 5, 15, 30, 60, 180 of 360 minuten.
|
|
- Gebruik een databaselease per mailbox, idempotentie per mailbox + Message-ID en foutisolatie per mailbox/bericht.
|
|
- Alle UI-mutaties zijn login-, user-scope- en CSRF-beveiligd. Het wachtwoordveld wordt nooit opnieuw gevuld.
|
|
- Valideer de IMAP-host als publieke host voor de verbinding. Platformlinks uit mail worden niet automatisch gevolgd.
|
|
|
|
## Sleutelrotatie
|
|
|
|
1. Voeg de nieuwe sleutel vóór de oude toe aan `MAILBOX_CREDENTIAL_KEYS`.
|
|
2. Herstart web, worker en scheduler.
|
|
3. Draai `python manage.py rotate_mailbox_credentials`.
|
|
4. Verwijder de oude sleutel pas nadat de opdracht slaagt en een mailboxsync is getest.
|
|
|
|
## Gevolgen
|
|
|
|
- `cryptography` is een productieafhankelijkheid en staat exact gepind in de lockfile.
|
|
- Een databasedump bevat ciphertext en blijft gevoelig; de encryptiesleutel wordt apart in de secretstore/back-up bewaard.
|
|
- Zonder expliciete sleutel is mailboxbeheer in productie fail-closed. Alleen DEBUG gebruikt een lokale sleutel afgeleid van de development `SECRET_KEY`.
|
|
- Dit is een mailboxlogin, geen login bij een jobboard en geen toestemming voor directe platformfetch.
|