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:
parent
eda9177b54
commit
fa03bcaac2
44
CHANGELOG.md
44
CHANGELOG.md
|
|
@ -1,5 +1,49 @@
|
|||
# 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
|
||||
|
||||
### Added
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
version: "0.08.26"
|
||||
version: "0.09.00"
|
||||
|
||||
bot:
|
||||
name: "MeshDD-Bot"
|
||||
|
|
|
|||
198
docs/whats-new-0.9.md
Normal file
198
docs/whats-new-0.9.md
Normal 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 |
|
||||
Loading…
Reference in a new issue