init
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
# Projektstand
|
||||
|
||||
**Version:** 0.1.0-alpha.5
|
||||
**Datum:** 2026-09-15
|
||||
|
||||
## Fertig in diesem Snapshot
|
||||
|
||||
### Outbox, Mail, weitere Provider und Betrieb (alpha.5)
|
||||
|
||||
- SQLite-Outbox mit atomarer Annahme, expliziter Deduplizierung, Lease-Recovery und Retry/Backoff.
|
||||
- Pro Ziel gespeicherter Versandauftrag einschließlich ursprünglicher Live-/Dry-Run-Einstellung.
|
||||
- SMTP-Ausgang mit TLS/STARTTLS, IMAP-Eingang mit UID-/UIDVALIDITY-Checkpoint und MIME-Text.
|
||||
- ntfy- und Gotify-Ausgänge sowie signierter Discord-Slash-Command-Eingang.
|
||||
- WebUI für neue Provider, Mail-/Discord-Eingänge, Historie und manuelle Wiederholung.
|
||||
- Readiness, geschützte Prometheus-Zustandsmetriken und graceful Shutdown.
|
||||
- bcrypt mit Legacy-Migration, CSRF/Origin-Prüfung, CSP, Login- und Body-Limits, `env:`-Secrets.
|
||||
- Betrieb, Konfiguration und Grenzen dokumentiert in [OPERATIONS.md](OPERATIONS.md).
|
||||
- **API-Änderung:** HTTP-Eingänge liefern 202 nach Speicherung; Versandstatus steht in der Historie.
|
||||
|
||||
### Provider-Erweiterung (2026-09-15, auf Basis alpha.4)
|
||||
|
||||
- Benannte Discord-/HTTP-Webhook-Ausgänge mit Live-Opt-in, Timeout und optionalem Bearer-Token.
|
||||
- Neuer WebUI-Bereich **Ausgänge**, Zuordnung pro Regel und Vorschau für beide Provider.
|
||||
- Unabhängige Zustellung über mehrere Regeln mit Einzelergebnissen bei Teilfehlern.
|
||||
- Discord-Mentions deaktiviert, Längenlimit geprüft; HTTP-Redirects blockiert und neue Transportfehler ohne URL-/Token-Leaks.
|
||||
- Regression behoben: identische Regex für mehrere Felder werden jeweils ausgewertet.
|
||||
- Ausbauplan für Outbox, Mail und weitere Ein-/Ausgänge: [PROVIDER_PLAN.md](PROVIDER_PLAN.md).
|
||||
|
||||
### Bisheriger Funktionsumfang
|
||||
|
||||
- Go-Server mit persistentem JSON-Store und Admin-Authentifizierung
|
||||
- neue formularbasierte WebUI statt JSON-Texteditor
|
||||
- getrennte Bereiche für Divera247, Eingänge, Zuordnungen und Server/Sicherheit
|
||||
- Divera247-Zugang mit Accesskey, UCR, Timeout und Dry-Run konfigurierbar
|
||||
- Divera247 `pull/all` aus der WebUI; lesende Aufrufe bleiben auch im Dry-Run möglich
|
||||
- Personenabruf primär über v2 `pull/all` aus `data.cluster.consumer`; numerische Collection-Keys werden als UCR-IDs verwendet
|
||||
- robuster v2-Fallback: numerische `cluster.consumer`-Schlüssel werden als UCR-ID erhalten und nicht mit globalen User-IDs verwechselt
|
||||
- automatische Aufbereitung geladener Stammdaten für Einheiten, Gruppen, Personen und Fahrzeuge
|
||||
- Mehrfacheinheiten werden über `data.ucr` erkannt und parallel mit begrenzter Konkurrenz über v2 `pull/all?ucr=...` geladen
|
||||
- visueller Regel-Editor für Quelle/Kanal/Titel/Meldung/Priorität
|
||||
- Divera247-Stichwort, Meldung, Adresse, Zieltyp und Versandwege als Formularfelder
|
||||
- einheitsübergreifende Alarmierung mit Empfängerart Alle/Gruppen/Personen pro Einheit
|
||||
- durchsuchbare Auswahl von Gruppen, Personen und Fahrzeugen mit manueller ID als Fallback
|
||||
- Vorschau einer Testmeldung auf das resultierende Divera247-Payload ohne Versand
|
||||
- Browser-Konfigurations-API liefert weder Admin-Passwort-Hash noch Session-Secret aus
|
||||
- ntfy-Ingress: Text, JSON, GET-Trigger und Aliase
|
||||
- Gotify-Ingress: `POST /message`
|
||||
- generischer Webhook-Ingress
|
||||
- Bearer/Basic/Token-Authentifizierung für Ingress
|
||||
- Divera247 v2 Client für Alarm/News/Event CRUD und Zusatzfunktionen sowie Pull
|
||||
- Dry-Run, Dockerfile, Compose, Makefile und Linux-amd64-Build
|
||||
|
||||
## Geprüft
|
||||
|
||||
Alpha.5:
|
||||
|
||||
- `go test ./...`, `go vet ./...`, UI-Syntaxprüfung und Linux-amd64-Build ohne CGO erfolgreich.
|
||||
- Unit-/Integrationstests für Outbox-Neustart, parallele Deduplizierung, Lease-Recovery und selektive Wiederholung.
|
||||
- Lokale SMTP-Server: TLS/STARTTLS, fehlendes STARTTLS, Zertifikatsfehler, temporäre/permanente Fehler und MIME.
|
||||
- Lokaler IMAP-Server: neue Nachrichten, Checkpoints, erneuter Abruf nach simuliertem Absturz, fehlende Zuordnung.
|
||||
- Discord-Signaturen, Allowlist, Replay, CSRF, Login-Limit, Body-Limit und geschützte Metriken.
|
||||
- Echter Chrome-Test: Login, SMTP-/Mail-Formulare, Zuordnung, Vorschau, CSRF-Speichern, Queue und Historie.
|
||||
- Ausschließlich lokale Testdaten und Dry-Run; keine echten Provider-Nachrichten.
|
||||
|
||||
Provider-Erweiterung:
|
||||
|
||||
- `go test ./...` und `go vet ./...`: erfolgreich.
|
||||
- `node scripts/check-ui.cjs`: JavaScript-Syntax und eindeutige DOM-IDs erfolgreich geprüft; kein Browser-Interaktionstest.
|
||||
- Integration: Admin-Konfiguration inklusive Persistenz, Vorschau und authentifizierter ntfy-Eingang → Discord-Dry-Run.
|
||||
- HTTP-Testserver: POST/Auth, Dry-Run ohne Netzwerk, Teilfehler, HTTP 429/500, Redirect-Blockierung und Secret-Redaktion.
|
||||
- Bestehende Divera247-Tests weiterhin erfolgreich; ausschließlich lokale Testserver/Dry-Run genutzt.
|
||||
|
||||
Bisherige Snapshot-Prüfungen:
|
||||
|
||||
- `go test ./...`: erfolgreich
|
||||
- `go vet ./...`: erfolgreich
|
||||
- JavaScript-Syntax der eingebetteten WebUI: erfolgreich geprüft
|
||||
- Regressionstest UCR-ID vs. globale User-ID: erfolgreich
|
||||
- Mock-Integrationstest für mehrere v2-UCRs mit `cluster.consumer`, korrekten UCR-IDs und ohne v3-Zugriff: erfolgreich
|
||||
- Regressionstest: v3 HTTP 403 wird nach einem Versuch kompakt gemeldet statt pro Einheit wiederholt
|
||||
- lokaler Healthcheck: erfolgreich
|
||||
- Admin-Login und Laden der neuen WebUI: erfolgreich
|
||||
- Konfigurations-API: sensible interne Auth-Werte werden nicht ausgegeben
|
||||
- Regelvorschau ntfy → Divera247 Alarm: erfolgreich
|
||||
- ntfy/Gotify/Webhook → Divera247 Dry-Run aus dem vorherigen Snapshot weiterhin durch Unit-/Dispatcher-Tests abgedeckt
|
||||
|
||||
## Noch offen / nächste sinnvolle Schritte
|
||||
|
||||
Aktuelle Prioritäten: Retention/Archivierung, OAuth2/HTML-Mail/Quarantäne,
|
||||
Secret-Verschlüsselung und automatisierte Backups/CI/Lasttests. Die nachfolgende
|
||||
Liste stammt aus alpha.4; Queue, bcrypt, CSRF, Readiness und Basis-Metriken sind
|
||||
inzwischen wie oben beschrieben umgesetzt.
|
||||
|
||||
1. Stammdaten persistent cachen und automatisch/periodisch aktualisieren.
|
||||
2. Regelreihenfolge, Stop/Continue, Fallback- und Default-Regeln ausbauen.
|
||||
3. Zusätzliche Divera247 Alarmfelder wie Alarmvorlage, Einsatznummer, Objekt, Anrufer, Patient und Rückmeldezeit als strukturierte UI-Felder ergänzen.
|
||||
4. Divera247 v3 vollständig typisieren.
|
||||
5. SQLite + Audit/Outbox/Retry/Deduplizierung.
|
||||
6. Security-Härtung (Argon2id/bcrypt, CSRF, Secret-Verschlüsselung, Rate Limits).
|
||||
7. Prometheus/Readiness/strukturierte Logs und CI.
|
||||
|
||||
## Wichtiger Hinweis
|
||||
|
||||
Es wurde **kein echter Alarm an Divera247** gesendet, da kein realer Accesskey vorliegt. Der Default bleibt `divera.dry_run=true`. Lesende Stammdaten-Aufrufe sind davon bewusst ausgenommen. Vor produktiver Alarmierung sollte mit einer Testeinheit und kontrollierten Empfängern verifiziert werden.
|
||||
Reference in New Issue
Block a user