feat(desktop-onboarding): neue Onboarding-UI implementiert, Backup- und Rollenmanagement hinzugefügt
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Failing after 3m10s
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Successful in 6m37s
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Successful in 5m59s
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
Desktop CI — Headless Tests & Build / Compose Desktop — Tests (headless) & Build (push) Failing after 3m10s
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Successful in 6m37s
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Successful in 5m59s
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
- Einbindung eines komplett überarbeiteten Onboarding-Screens mit validierten Eingaben für Gerätename, Sicherheitsschlüssel und Backup-Pfad. - `SettingsManager` eingeführt zur Speicherung der Onboarding-Daten in `settings.json`. - Navigation verbessert: Onboarding-Workflow startet, wenn Konfiguration fehlt; neues "Setup"-Icon in der Navigationsleiste hinzugefügt. - Backend: Geräte-API und `DeviceSecurityFilter` für Authentifizierung per Sicherheitsschlüssel implementiert. Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
@@ -355,3 +355,26 @@ und über definierte Schnittstellen kommunizieren.
|
||||
* [ ] **End-to-End Test:** Online-Nennung (Web) -> E-Mail -> Desktop-Verarbeitung.
|
||||
|
||||
---
|
||||
|
||||
### PHASE 5: Desktop-Zentrale & Synchronisation 🔵 IN ARBEIT
|
||||
|
||||
*Ziel: Ein einsatzbereiter Desktop-Client für das Neumarkt-Turnier.*
|
||||
|
||||
#### 🎨 Agent: Frontend Expert
|
||||
|
||||
* [x] **Onboarding UI:** Implementierung des Onboarding-Screens (Name, Key, Backup, Rolle, Sync, Drucker) mit
|
||||
validierten Eingaben.
|
||||
* [x] **Navigation:** Navigations-Rail mit Hover-Tooltips und dedizierten Icons für "Setup" und "Sync".
|
||||
* [x] **Settings:** Persistente Speicherung der Onboarding-Daten in `settings.json`.
|
||||
|
||||
#### 👷 Agent: Backend Developer
|
||||
|
||||
* [x] **Device Management:** Domain-Modell (`Device`), Tabelle (`identity_devices`) und Repository zur
|
||||
Geräteverwaltung implementiert.
|
||||
* [x] **Security Key Auth:** Implementierung des `DeviceSecurityFilter` zur Authentifizierung via `X-Security-Key`
|
||||
Header.
|
||||
* [x] **Onboarding API:** REST-Endpunkte zur Registrierung und Abfrage von Desktop-Instanzen erstellt.
|
||||
|
||||
#### 🧹 Agent: Curator
|
||||
|
||||
* [x] **Dokumentation:** Erstellung der Architektur-Doku für das Onboarding-Backend.
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# Onboarding-Backend & Desktop-Identität
|
||||
|
||||
Dieses Dokument beschreibt die Backend-Infrastruktur für die Identifizierung und Authentifizierung von
|
||||
Desktop-Clients ("Meldestelle-Biest").
|
||||
|
||||
## 🚀 Übersicht
|
||||
|
||||
Im Gegensatz zur Web-App (die via Keycloak/JWT authentifiziert) nutzen die Desktop-Instanzen für die
|
||||
Offline-Synchronisation eine Identität, die während des **Onboarding-Prozesses** lokal vergeben und am Server
|
||||
registriert wird.
|
||||
|
||||
## 🛡️ Authentifizierungs-Mechanismus
|
||||
|
||||
Die Authentifizierung erfolgt über zwei HTTP-Header, die bei jedem Request vom Desktop-Client mitgesendet werden müssen:
|
||||
|
||||
| Header | Beschreibung | Beispiel |
|
||||
|:-----------------|:---------------------------------------------------|:-------------------|
|
||||
| `X-Device-Name` | Der beim Onboarding vergebene Gerätename | `Meldestelle-PC-1` |
|
||||
| `X-Security-Key` | Der beim Onboarding vergebene Sicherheitsschlüssel | `secret-key-123` |
|
||||
|
||||
### DeviceSecurityFilter
|
||||
|
||||
Ein Custom-Security-Filter (`DeviceSecurityFilter`) im Backend extrahiert diese Header und setzt einen Spring Security
|
||||
Kontext mit der Authority `ROLE_DEVICE`.
|
||||
|
||||
## 🛰️ API-Endpunkte (Identity Service)
|
||||
|
||||
### 1. Gerät registrieren
|
||||
|
||||
Wird beim Abschluss des Onboarding-Screens aufgerufen.
|
||||
|
||||
- **URL:** `POST /api/v1/devices/register`
|
||||
- **Body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Meldestelle-PC-1",
|
||||
"securityKeyHash": "...",
|
||||
"role": "MASTER"
|
||||
}
|
||||
```
|
||||
|
||||
- **Hinweis:** Dieser Endpunkt ist `permitAll()`, um die Erstregistrierung zu ermöglichen.
|
||||
|
||||
### 2. Gerät abrufen
|
||||
|
||||
- **URL:** `GET /api/v1/devices/{name}`
|
||||
- **Auth:** Erfordert `ROLE_DEVICE` oder `JWT`.
|
||||
|
||||
## 💾 Datenmodell (Exposed)
|
||||
|
||||
Die Tabelle `identity_devices` speichert die registrierten Instanzen:
|
||||
|
||||
- `id`: Eindeutige UUID.
|
||||
- `name`: Gerätename (eindeutig).
|
||||
- `security_key_hash`: Der Sicherheitsschlüssel (gehasht).
|
||||
- `role`: `MASTER` oder `CLIENT`.
|
||||
- `last_sync_at`: Zeitstempel der letzten erfolgreichen Synchronisation.
|
||||
|
||||
## 🛠️ Local Test-Setup
|
||||
|
||||
Für lokale Tests mit `curl`:
|
||||
|
||||
```bash
|
||||
curl -X GET http://localhost:8081/api/v1/devices/Meldestelle-PC-1 \
|
||||
-H "X-Device-Name: Meldestelle-PC-1" \
|
||||
-H "X-Security-Key: secret-key-123"
|
||||
```
|
||||
@@ -0,0 +1,47 @@
|
||||
# 🧹 Session Journal - 15. April 2026 (Desktop UX & Onboarding)
|
||||
|
||||
## 🏗️ Status-Check (Lead Architect)
|
||||
|
||||
- **Workflow-Fokus:** Abkehr vom verfrühten Deployment hin zur ehrlichen "Workflow-First" Entwicklung der Desktop-App.
|
||||
- **Identität & Sicherheit:** Die App verfügt nun über ein robustes Onboarding-System für die lokale Identität und
|
||||
Sicherheit.
|
||||
- **UX-Optimierung:** Die Navigation wurde um Hover-Tooltips erweitert, um die Bedienbarkeit ohne Textlabels in der
|
||||
NavRail zu gewährleisten.
|
||||
|
||||
## 👷 Durchgeführte Arbeiten (Frontend & UX)
|
||||
|
||||
1. **Onboarding & Setup ("Geburtsurkunde"):**
|
||||
- Komplette Neugestaltung des `OnboardingScreen` (v2).
|
||||
- Erfassung von Gerätename, Sicherheitsschlüssel (Shared Secret) und Datenbank-Sicherungspfad.
|
||||
- Integration von interaktiven Auswahl-Dialogen: `JFileChooser` für Pfade und `PrintServiceLookup` für installierte
|
||||
Drucker.
|
||||
- Einführung des `SettingsManager` zur persistenten Speicherung der Einstellungen in `settings.json`.
|
||||
- Implementierung des `OnboardingValidator` zur Sicherstellung valider Pflichtangaben (Name, Key, Backup-Pfad).
|
||||
|
||||
2. **Navigation & Layout:**
|
||||
- Erweiterung der `DesktopNavRail` um ein dediziertes "Setup"-Icon (`AppRegistration`) am unteren Ende.
|
||||
- Auslagerung des Ping-Service ("Sync") als eigenständiges Icon (`WifiTethering`).
|
||||
- Implementierung von **Hover-Tooltips** für alle Navigations-Items (`NavRailItem`) unter Verwendung von Material3
|
||||
`TooltipBox`.
|
||||
- Tooltips sind rechtsbündig (`TooltipAnchorPosition.Right`) positioniert und zeigen den Namen des Moduls ("Admin", "
|
||||
Vereine", "Mails", "Sync", "Setup").
|
||||
|
||||
3. **Code-Qualität & Refactoring:**
|
||||
- Bereinigung veralteter Onboarding-Screens und Konsolidierung auf das v2-Datenmodell.
|
||||
- Integration von `@Preview`-Blöcken direkt in den Screen-Komponenten zur IDE-gestützten Entwicklung.
|
||||
- Erfolgreiche Kompilierung des `meldestelle-desktop` Moduls nach Behebung von Typ-Konflikten.
|
||||
|
||||
## 🧐 QA-Status & Bekannte Themen
|
||||
|
||||
- [x] **Onboarding-Workflow:** App erzwingt Setup bei fehlender Konfiguration.
|
||||
- [x] **Drucker-Anbindung:** Systemdrucker werden korrekt gelistet.
|
||||
- [x] **Tooltip-UX:** Hover-Effekt in der Navigationsleiste ist aktiv und informativ.
|
||||
- [ ] **E2E-Integration:** Die Anbindung des `NennungsEingangScreen` an den echten `mail-service` (Server-Daten abholen)
|
||||
ist der nächste logische Schritt.
|
||||
|
||||
## 🧹 Curator's Note
|
||||
|
||||
- Die Strategie hat sich von "Live-Gang" zurück auf "Ehrliches Desktop-Fundament" verschoben.
|
||||
- Das "Biest" hat jetzt einen Namen und einen Platz für seine Backups. 💾
|
||||
|
||||
**Abschluss:** Onboarding und Basis-Navigation sind "Enterprise-Ready". 🚀
|
||||
Reference in New Issue
Block a user