release: v0.09.00 – Mitarbeiter-Rolle, /config-Seite, Paket-Log-Filter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ppfeiffer 2026-02-20 23:01:46 +01:00
parent eda9177b54
commit fa03bcaac2
3 changed files with 243 additions and 1 deletions

View file

@ -1,5 +1,49 @@
# Changelog # Changelog
## [0.09.00] - 2026-02-20
### Summary
Release 0.9 konsolidiert alle seit v0.08.15 eingeführten Erweiterungen und bündelt
sie als neues Minor-Release. Schwerpunkte: neues Rollensystem (Mitarbeiter),
Konfigurationsseite im Dashboard, erweitertes Paket-Log, strukturelle Bereinigungen.
### Added
- **Rollensystem Mitarbeiter** (closes #7): Neue Rolle `mitarbeiter` ersetzt `user`
vollständig. Einladungs-Workflow per E-Mail mit auto-generiertem Passwort und
Pflicht-Passwortwechsel beim ersten Login. Neue Seite `/auth/change-password`.
- **Konfigurationsseite `/config`** (closes #4): Bearbeitbare Bot-, Meshtastic-,
Web- und Links-Einstellungen direkt im Dashboard (Admin). `config.py`: `save()`.
- **Paket-Log: Erweiterte Filterzeile** (closes #6): Von, An, Kanal-Dropdown,
Hops-Maximum und Freitext alle Filter kombiniert (AND-Logik).
- **Initialer Admin-User**: Erster Start ohne Datenbank legt automatisch
`admin@localhost` / `changeme` an (verifiziert, Passwort-Änderung empfohlen).
- **Sidebar: Konfigurationen-Gruppe**: Gruppenüberschrift mit eingerückten
Untereinträgen (Scheduler, NINA, Einstellungen) für Staff-Mitglieder.
### Changed
- **Umbenennung MeshDD-Bot → MeshDD-Dashboard** (closes #4): Alle Seiten-Titel
und Navbar-Texte aktualisiert.
- **NINA-Verbesserungen** (closes #2): Quellenkennung (`[DWD@NINA]` etc.),
Schalter nebeneinander, Intervalle in Minuten, `last_sent`-Anzeige.
- **Konfiguration konsolidiert**: Alle Config-Dateien in `config/`, `.env` in
`config.yaml` integriert keine separate Secrets-Datei mehr nötig.
- **Datenbank in `data/`**: SQLite-Datei nach `data/meshdd.db` verschoben;
WAL-Checkpoint beim Schließen; isolierter Shutdown (jeder Schritt try/except).
- **API-Auth**: `/api/send`, `/api/node/config`, `/api/nina/*`, `GET /api/scheduler/jobs`
nutzen `require_staff_api` (Mitarbeiter + Admin).
- **Scheduler/NINA read-only für Mitarbeiter**: Schaltflächen und Eingaben gesperrt,
Badge „Nur Lesezugriff".
- **Docker entfernt**: `Dockerfile`, `docker-compose.yml`, `.dockerignore` gelöscht;
Deployment ausschließlich per systemd-Service.
### Fixed
- **Karte: Legende theme-aware** (closes #5): CSS-Variablen + JS-Inline-Styles
für zuverlässige Light/Dark-Umschaltung im Leaflet-Control-Kontext.
- **Dashboard**: `channelBreakdown`-Card entfernt; Nachrichten-Trenner stärker
(closes #1).
- **`upsert_node` Race-Condition**: `INSERT OR IGNORE` + `UPDATE` statt
SELECT → INSERT kein `UNIQUE constraint failed` mehr bei gleichzeitigen Updates.
## [0.08.26] - 2026-02-20 ## [0.08.26] - 2026-02-20
### Added ### Added

View file

@ -1,4 +1,4 @@
version: "0.08.26" version: "0.09.00"
bot: bot:
name: "MeshDD-Bot" name: "MeshDD-Bot"

198
docs/whats-new-0.9.md Normal file
View file

@ -0,0 +1,198 @@
# Was ist neu in MeshDD-Dashboard 0.9.x
> Aktueller Stand: **v0.09.00** · Release-Datum: 2026-02-20
---
## Übersicht
Release 0.9 bündelt alle seit v0.08.15 eingeführten Erweiterungen. Schwerpunkte sind
das neue **Rollensystem** (Mitarbeiter statt User), eine vollständige
**Konfigurationsseite** im Dashboard, eine erweiterte **Paket-Log-Filterzeile**
sowie eine Reihe struktureller Bereinigungen (Konfiguration, Datenbank, Benennung).
---
## Neues Rollensystem: Mitarbeiter
### Rollenhierarchie
```
Public → Mitarbeiter → Admin
```
Die bisherige Rolle `user` entfällt vollständig. Alle bestehenden `user`-Accounts
werden automatisch per DB-Migration zu `mitarbeiter` umgeschrieben.
| Bereich | Public | Mitarbeiter | Admin |
|---|---|---|---|
| Dashboard, Karte, Pakete, Nachrichten | Ja | Ja | Ja |
| Nachrichten senden | Nein | Ja | Ja |
| Scheduler, NINA, Einstellungen lesen | Nein | Ja | Ja |
| Scheduler, NINA, Einstellungen bearbeiten | Nein | Nein | Ja |
| Benutzerverwaltung `/admin` | Nein | Nein | Ja |
### Einladungs-Workflow
1. Admin öffnet `/admin` → „Mitarbeiter einladen"
2. Modal: Name + E-Mail eingeben
3. Backend generiert automatisch ein 12-stelliges Passwort
4. Einladungsmail mit Login-URL und Passwort wird versendet
5. Erster Login: Weiterleitung zu `/auth/change-password` (Pflichtänderung)
6. Nach dem Passwortwechsel: normaler Zugang
### Sidebar: staff-sichtbare Einträge
Scheduler, NINA und Einstellungen sind jetzt in einer Gruppe **„Konfigurationen"**
zusammengefasst und für alle Mitarbeiter (und Admins) sichtbar. Reine Admin-Links
(Benutzerverwaltung) sind davon getrennt.
### Read-only-Modus für Mitarbeiter
Mitarbeiter sehen Scheduler-Jobs und NINA-Konfiguration, können aber nicht bearbeiten:
- **Scheduler**: Schaltflächen „Neuer Job", „Bearbeiten", „Löschen" deaktiviert;
Badge „Nur Lesezugriff" in der Aktionen-Spalte.
- **NINA**: Alle Eingabefelder und der Speichern-Button sind disabled.
---
## Neue Konfigurationsseite (`/config`)
Eine neue Admin-Seite ermöglicht die Bearbeitung der Bot-Konfiguration direkt
im Dashboard — ohne SSH-Zugriff auf den Server.
### Bearbeitbare Bereiche
| Abschnitt | Felder |
|---|---|
| **Bot** | Name, Kommando-Präfix |
| **Meshtastic** | Host, Port |
| **Web** | Port, Online-Schwellwert (s) |
| **Links** | Liste mit URL + Bezeichnung (hinzufügen/entfernen) |
Die Konfiguration wird direkt in `config/config.yaml` geschrieben.
Der Live-Reload-Mechanismus übernimmt Änderungen ohne Neustart.
---
## Paket-Log: Erweiterte Filterzeile
Unterhalb des bestehenden Typ-Filter-Balkens steht jetzt eine zweite Filterzeile:
```
[ Von: __ ] [ An: __ ] [ Kanal: [Alle ▾] ] [ Hops ≤: __ ] [ 🔍 Freitext ] [ ✕ ]
```
| Filter | Funktion |
|---|---|
| **Von** | Teilstring auf Node-ID, Langname oder Kurzname |
| **An** | Teilstring; `alle`/`broadcast` für Broadcast-Pakete |
| **Kanal** | Dropdown mit bekannten Kanälen (aus WS-`channels`-Event) |
| **Hops ≤** | Zahl; filtert auf berechneten Hop-Wert (`hop_start hop_limit`) |
| **Freitext** | Suche über alle Spalten (Von, An, Typ, Kanal, Info) |
| **✕** | Alle Zusatzfilter zurücksetzen |
Alle Filter wirken kombiniert (AND-Logik). Typ-Filter und Zusatzfilter greifen
unabhängig voneinander.
Die Filterung erfolgt rein im DOM `buildRow()` befüllt beim Rendern
`data-from/to/channel/hops/search` für maximale Performance ohne Re-Render.
---
## NINA-Verbesserungen
### Quellenkennung im Mesh
Meldungen tragen jetzt die Quelle als Präfix:
```
[DWD@NINA] Schwerwiegend: Sturmböen (Dresden, Stadt)
[KATWARN@NINA] Mäßig: Starkregen (Meißen)
[NINA] Aufgehoben: ...
```
### UI-Verbesserungen
- **Schalter nebeneinander**: „Aktiviert" und „Ins Mesh senden" in einer Zeile
- **Intervalle in Minuten**: Eingabe und Anzeige in Minuten (intern weiter Sekunden)
- **Zuletzt gesendet**: Zeitstempel der letzten Mesh-Aussendung sichtbar
---
## Konfiguration: Strukturelle Bereinigung
### Verzeichnisstruktur
```
config/
config.yaml ← zentrale Konfiguration (Bot, Web, Auth, SMTP, Links)
scheduler.yaml ← Scheduler-Jobs
nina.yaml ← NINA-Konfiguration
data/
meshdd.db ← SQLite-Datenbank
*.db-wal ← WAL-Journal (gitignored)
*.db-shm ← Shared Memory (gitignored)
```
### `.env` abgeschafft
Alle Konfigurationswerte (`auth.secret_key`, `smtp.*`) sind direkt in
`config/config.yaml` keine separate Secrets-Datei mehr nötig.
### Datenbank robuster
- WAL-Checkpoint (`PRAGMA wal_checkpoint(FULL)`) vor dem Schließen
keine Daten bleiben im Journal
- Jeder Shutdown-Schritt ist einzeln mit `try/except` gekapselt
`db.close()` wird auch bei Fehlern in anderen Komponenten immer ausgeführt
---
## Umbenennung: MeshDD-Bot → MeshDD-Dashboard
Alle Seiten-Titel (`<title>`) und Navbar-Texte wurden von „MeshDD-Bot" auf
„MeshDD-Dashboard" umgestellt.
---
## API-Änderungen
### Neue Endpunkte
| Methode | Pfad | Beschreibung | Auth |
|---|---|---|---|
| `GET` | `/api/config` | Bot-/Web-/Link-Konfiguration lesen | Admin |
| `PUT` | `/api/config` | Konfiguration speichern | Admin |
| `POST` | `/api/admin/invite` | Mitarbeiter einladen (Passwort auto-generiert) | Admin |
| `GET` | `/auth/change-password` | Pflicht-Passwortänderungs-Seite | — |
| `POST` | `/auth/change-password` | Neues Passwort setzen | Login |
### Auth-Änderungen bestehender Endpunkte
| Endpunkt | Vorher | Jetzt |
|---|---|---|
| `POST /api/send` | `require_user_api` | `require_staff_api` |
| `GET /api/node/config` | `require_admin_api` | `require_staff_api` |
| `GET /api/nina/config` | `require_admin_api` | `require_staff_api` |
| `GET /api/nina/alerts` | `require_admin_api` | `require_staff_api` |
| `GET /api/scheduler/jobs` | ohne Auth | `require_staff_api` |
---
## Sonstige Fixes
- **`upsert_node` Race-Condition** behoben: `INSERT OR IGNORE` + `UPDATE` statt
SELECT → INSERT kein `UNIQUE constraint failed` mehr bei parallelen Node-Updates.
- **Karte: Legende theme-aware** (closes #5): CSS-Variablen + JS-Inline-Styles
für zuverlässige Light/Dark-Umschaltung im Leaflet-Control-Kontext.
- **Dashboard**: `channelBreakdown`-Card entfernt; Nachrichten-Trenner stärker
(Padding + Border-Breite), closes #1.
---
## Versionshistorie 0.9.x
| Version | Datum | Schwerpunkt |
|---|---|---|
| 0.09.00 | 2026-02-20 | Mitarbeiter-Rolle, /config-Seite, Paket-Log-Filter, Bereinigungen |