58 lines
3.2 KiB
Markdown
58 lines
3.2 KiB
Markdown
# #034 M21 – Benachrichtigungen per Mail und Webhook
|
||
|
||
**Status:** offen
|
||
**Im Tracker:** [#54](https://git.wilde-server.de/florian.wilde/Laufzettel/issues/54)
|
||
**Meilenstein:** v0.2.0
|
||
**Labels:** phase-2, backend, frontend, infra
|
||
**Geschätzt:** 10 h **Tatsächlich:** –
|
||
|
||
## Ziel
|
||
|
||
Ein zugewiesener Lauf fällt heute nur auf, wenn jemand die Übersicht öffnet. Ein überfälliger
|
||
überhaupt nicht. Vier Ereignisse sind es wert, gemeldet zu werden: **zugewiesen**, **überfällig**,
|
||
**abgeschlossen**, **Verzeichnisabgleich fehlgeschlagen**.
|
||
|
||
## Zu entscheiden
|
||
|
||
- [ ] **Nur diese vier Ereignisse, je Empfänger abschaltbar** — Empfehlung. Ein allgemeiner
|
||
Benachrichtigungsbaukasten ist eine Phase für sich; vier Ereignisse decken ab, was im Betrieb
|
||
wirklich fehlt.
|
||
- [ ] **Mail über SMTP, keine Dienstanbindung.** Eine selbst gehostete Anwendung soll an den
|
||
Mailserver des Hauses können, und das ist SMTP. Zugangsdaten verschlüsselt wie das
|
||
LDAP-Bind-Passwort.
|
||
- [ ] **Zustellung in einer Warteschlange in der Datenbank**, nicht im Anfrage-Pfad. Ein hängender
|
||
Mailserver darf kein Abhaken blockieren. Dieselbe Sperre wie beim Abgleich
|
||
(`AbgleichSperre`) verhindert, dass zwei Instanzen dasselbe zweimal schicken.
|
||
|
||
## Aufgaben
|
||
|
||
- [ ] Modell `Zustellung`: Ereignis, Empfänger, Weg (MAIL | WEBHOOK), Versuche, letzter Fehler,
|
||
Zustand; mit Index auf das, was der Zeitplan abholt
|
||
- [ ] SMTP-Einstellungen unter Admin → Einstellungen: Host, Port, TLS, Benutzer, Passwort
|
||
(verschlüsselt, nie in einer Antwort), Absender, „Testmail schicken“
|
||
- [ ] Webhook: Ziel-URL, Geheimnis, **HMAC-SHA256 über den Rumpf** im Kopf `X-Laufzettel-Signatur`,
|
||
dazu ein Zeitstempel gegen Wiedereinspielen
|
||
- [ ] Wiederholung mit wachsendem Abstand (1, 5, 30, 120 Minuten), dann aufgeben und sichtbar
|
||
machen. Eine stille Warteschlange ist schlimmer als keine
|
||
- [ ] Überfälligkeit erkennt der Zeitplan, der schon läuft (`node-cron` im Prozess) — kein zweiter
|
||
Dienst
|
||
- [ ] Je Benutzer abschaltbar; ein Benutzer ohne Mailadresse bekommt keine Mail und keinen Fehler
|
||
- [ ] Admin: die letzten Zustellungen mit Zustand und Grund
|
||
- [ ] **`{{generiertes_passwort}}` kommt in keine Nachricht.** Eine Mail mit dem Lauf-Inhalt wäre
|
||
genau die Lücke, die das Projekt an jeder anderen Stelle geschlossen hat. Die Nachricht
|
||
enthält Titel, Status und einen Link — **keine Schrittinhalte**
|
||
- [ ] `docs/betrieb/`: SMTP einrichten, Webhook prüfen, Signatur nachrechnen
|
||
- [ ] Anleitung Kapitel 07
|
||
|
||
## Akzeptanzkriterien
|
||
|
||
- [ ] Test gegen einen echten SMTP-Fänger im Container (mailpit): zugewiesen, überfällig,
|
||
abgeschlossen, Abgleich fehlgeschlagen — vier Mails, richtige Empfänger
|
||
- [ ] Test gegen einen lokalen Empfänger: die Signatur lässt sich mit dem Geheimnis nachrechnen, mit
|
||
einem falschen nicht
|
||
- [ ] Test: eine fehlgeschlagene Zustellung wird wiederholt und ist danach sichtbar
|
||
- [ ] Test: zwei gleichzeitige Durchgänge schicken nichts zweimal
|
||
- [ ] Test: in **keiner** Nachricht steht ein erzeugtes Passwort — über alle Rumpftexte geprüft, wie
|
||
in #012
|
||
- [ ] Test: ein Benutzer mit abgeschalteter Benachrichtigung bekommt nichts
|