All checks were successful
Deploy netdiag / deploy (push) Successful in 14s
NetDiag war die letzte AWL-App mit eigenem Login: eigenes JWT, eigener Schluessel,
eigene Gueltigkeitsdauer, keine Moeglichkeit ein verlorenes Handy gezielt abzumelden.
- api/auth.php prueft das Passwort ueber awlauth_login(). Damit greifen dort auch die
Brute-Force-Bremse (5 Fehlversuche je IP in 15 min, 10 je Benutzername in 30 min)
und die einheitliche, nicht-verraeterische Fehlermeldung. Das Token kommt aus
awlauth_issue_bearer() und legt eine Sitzungszeile an: das Geraet erscheint als
"NetDiag-App · Android" in der awlauth-Geraeteliste und ist dort einzeln abmeldbar.
- netdiag_api_authenticate() prueft zuerst das awlauth-Token; ein widerrufenes Token
fuehrt sofort zu 401, auch wenn die Signatur noch stimmt.
- Uebergangsweise gilt ein bereits ausgestelltes altes netdiag-JWT weiter, damit die
Umstellung niemanden mitten im Einsatz aussperrt. Faellt weg, sobald alle Geraete
einmal neu angemeldet sind.
- Ohne aktives awlauth laeuft das Modul unveraendert mit dem eigenen JWT weiter.
Die Antwortform von auth.php bleibt bewusst {token, expiresIn, user}: bereits
installierte APKs laufen nach einer einmaligen Neuanmeldung ohne Update weiter.
Haette man sie geaendert, waeren alle Geraete ausgesperrt — und die neue APK gibt es
nur ueber update.php, das Anmeldung verlangt.
CORS: Wildcard-Origin raus. Die API liefert Kundendaten aus; ein * erlaubt jeder
Webseite die Antwort auszulesen, sobald sie an ein Token kommt. Erlaubt sind jetzt nur
die App-Origins und der Vite-Dev-Server, dazu Vary: Origin. Anfragen ohne Origin
(nativer Client, APK-Downloader im Plugin, curl) sind unveraendert.
Lokal gegen das Test-Dolibarr geprueft: Login liefert awlauth-Token, Sitzungszeile
entsteht, orders.php mit Bearer = 200, falsches Passwort = 401, kein/manipuliertes
Token = 401, 4. Fehlversuch = 429 mit Wartezeit, Alt-Token = 200 (Fallback),
fremder Origin bekommt keinen CORS-Header. Anschliessend im Emulator durchgespielt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 lines
2.4 KiB
Markdown
44 lines
2.4 KiB
Markdown
# Changelog NetDiag
|
|
|
|
## 1.1.0 — 2026-08-14
|
|
|
|
### Anmeldung läuft über das zentrale Auth-Modul (awlauth)
|
|
|
|
NetDiag war die letzte AWL-App mit eigenem Login: eigenes JWT, eigener Schlüssel
|
|
(`NETDIAG_API_JWT_SECRET`), eigene Gültigkeitsdauer, keine Möglichkeit, ein verlorenes
|
|
Handy gezielt abzumelden. Ab sofort stellt awlauth das Token aus — dasselbe Token,
|
|
derselbe Schlüssel und dieselbe Sitzungs-Registry wie bei den sechs Browser-Apps.
|
|
|
|
- `api/auth.php` prüft das Passwort über `awlauth_login()`. Damit greifen dort auch die
|
|
**Brute-Force-Bremse** (5 Fehlversuche je IP in 15 min, 10 je Benutzername in 30 min)
|
|
und die einheitliche, nicht-verräterische Fehlermeldung. Das Token kommt aus
|
|
`awlauth_issue_bearer()` und legt eine Sitzungszeile an — das Gerät erscheint als
|
|
„NetDiag-App · Android" in der awlauth-Geräteliste und ist dort einzeln abmeldbar.
|
|
- `netdiag_api_authenticate()` prüft zuerst das awlauth-Token. Ein **abgelaufenes oder
|
|
widerrufenes** Token führt sofort zu 401, auch wenn die Signatur noch stimmt.
|
|
- **Übergangsweise** wird ein bereits ausgestelltes altes netdiag-JWT weiterhin akzeptiert,
|
|
damit die Umstellung niemanden mitten im Einsatz aussperrt. Dieser Pfad entfällt, sobald
|
|
alle Geräte einmal neu angemeldet sind.
|
|
- Ohne aktives awlauth-Modul läuft NetDiag unverändert mit dem eigenen JWT weiter.
|
|
|
|
**Die Antwortform von `auth.php` ist bewusst unverändert** (`{token, expiresIn, user}`).
|
|
Bereits installierte APKs laufen nach einer **einmaligen Neuanmeldung** ohne Update weiter.
|
|
|
|
### CORS enger gefasst
|
|
|
|
`Access-Control-Allow-Origin: *` ist raus. Die API liefert Kundendaten aus; ein Wildcard
|
|
erlaubt jeder beliebigen Webseite, die Antwort auszulesen, sobald sie an ein Token kommt.
|
|
Erlaubt sind jetzt nur die App-Origins (`https://localhost`, `capacitor://localhost`,
|
|
`http://localhost`, `ionic://localhost`) und der Vite-Dev-Server; dazu `Vary: Origin`.
|
|
Anfragen ohne Origin-Header (nativer HTTP-Client, der APK-Downloader im Kotlin-Plugin,
|
|
curl) bekommen wie bisher eine Antwort — dort greift die Same-Origin-Policy ohnehin nicht.
|
|
|
|
## 1.0.0
|
|
|
|
- Erstversion
|
|
- Datenmodell: Protokoll, Gerät, Messung
|
|
- JSON-API: auth, customers, orders, protocols (Sync), pdf
|
|
- Tab "Netzwerk-Diagnose" an Kunde und Auftrag
|
|
- PDF-Protokoll-Generator + ECM-Ablage
|
|
- Backend: Protokoll-Liste und Detailansicht
|
|
- Admin: Token-Einstellung, QR-Code zum App-Download
|