dolibarr.netdiag/README.md
Eduard Wisch 9f07896b05
All checks were successful
Deploy netdiag / deploy (push) Successful in 13s
Doku + Version 1.1.1: die Whitelist-Falle steht jetzt im README [deploy]
Version auf 1.1.1 gezogen — auf Prod lief sonst eine 1.1.0, die nicht der
1.1.0 im Repo entspricht (die vier Bugfixes gingen ohne Versionssprung raus).

ChangeLog 1.1.1 mit allen vier Fehlern, der Rechtelücke im GET-Zweig und den
neuen Monitor-Feldern.

README:
- Neuer Abschnitt "Neue Messart aus der App aufnehmen" mit den DREI Stellen in
  netdiag.lib.php und der Spalte "wenn vergessen". Das ist die Falle, in die
  hier schon zweimal getappt wurde - einmal mit erfundenen Testdaten, einmal
  mit 'typ' statt 'type'. Feldnamen immer aus dem erzeugenden App-Code ablesen.
- Anmeldung laeuft ueber awlauth (stand noch "JWT-Auth")
- Rechteprüfung je Endpunkt dokumentiert, inkl. der Begruendung, warum der
  GET-Zweig auch 'write' akzeptiert
- Hinweis, dass '?jwt=' nur fuer den PDF-Download existiert und in Logs landet
2026-08-16 19:56:10 +02:00

86 lines
4.1 KiB
Markdown

# NetDiag — Netzwerk-Diagnose für Dolibarr
Dolibarr-Modul für die Ablage von Netzwerk-Diagnose-Protokollen. Erfasst per
mobiler App (siehe Projekt `NetzwerkDiagnose/app`) gefundene Geräte, Ports und
Messungen und hängt die Protokolle dauerhaft an **Kunde** und **Auftrag**.
## Funktionen
- Datenmodell: Protokoll → Geräte → Messungen (`llx_netdiag_*`)
- Tab **Netzwerk-Diagnose** an Kunde (thirdparty) und Auftrag (commande)
- JSON-API unter `/custom/netdiag/api/` für die mobile App. Anmeldung seit
v1.1.0 über das zentrale Auth-Modul **awlauth** (Brute-Force-Bremse,
gemeinsame Sitzungsliste, „Gerät abmelden"); der alte modul-eigene JWT-Pfad
bleibt als Rückfall, bis alle Geräte die neue APK haben
- PDF-Protokoll, wird im Dokumentenarchiv (ECM) abgelegt
- **Zwei Sichten auf dieselben Messdaten:** die Technikeransicht zeigt alles,
das Kunden-PDF nur eine Whitelist (siehe „Neue Messart" unten)
- Rechtesystem: `netdiag → protocol → read/write/delete`
- Mehrsprachig (de_DE, en_US)
- QR-Code zum App-Download in der Modul-Einrichtung
## Installation
1. Verzeichnis `netdiag/` nach `htdocs/custom/` auf den Dolibarr-Server kopieren.
Auf dem Produktivsystem übernimmt das die Forgejo-Pipeline
(`.forgejo/workflows/deploy.yml`) — Commit mit `[deploy]` in der Message
synct das Modul automatisch auf den Server.
2. In Dolibarr: **Einrichtung → Module → NetDiag** aktivieren.
3. Beim Aktivieren werden die Tabellen `llx_netdiag_protocol`,
`llx_netdiag_device`, `llx_netdiag_measurement` angelegt und ein
JWT-Schlüssel erzeugt.
4. Benutzern das Recht **NetDiag → Protokolle lesen/schreiben** geben.
## API-Endpunkte
Alle unter `https://<dolibarr>/custom/netdiag/api/`:
| Endpunkt | Methode | Zweck |
|----------|---------|-------|
| `auth.php` | POST `{login,password}` | Anmeldung → `{token,expiresIn,user}` |
| `customers.php` | GET `?q=` / `?id=` | Kundensuche / Kundendetail |
| `orders.php` | GET `?open=1&q=` / `?id=` | Auftragsliste / Auftragsdetail |
| `protocols.php` | GET `?id=` | Protokoll mit Geräten + Messungen |
| `protocols.php` | POST `{action:"sync",protocol:{…}}` | Protokoll anlegen/aktualisieren (idempotent über `clientUuid`) |
| `pdf.php` | GET `?id=&jwt=` | Protokoll-PDF streamen |
Authentifizierung per `Authorization: Bearer <token>` oder `?jwt=<token>`.
Jeder Endpunkt prüft ein Recht — `protocols.php` im GET-Zweig `protocol read`
**oder** `write`: die Rechte sind in Dolibarr einzeln vergebbar, und ein
Techniker mit Schreib- ohne ausdrückliches Leserecht darf nicht ausgesperrt
werden (das fiele erst beim Kunden auf).
> `?jwt=` in der URL ist nur für den PDF-Download da (der Browser kann dort
> keinen Header setzen). Langzeit-Token in URLs landen in Zugriffs- und
> Proxy-Logs — Ablösung steht in `ROADMAP_UMSETZUNG.md`, Phase L5.
## Neue Messart aus der App aufnehmen
Die App schickt Messergebnisse als freies JSON. Damit ein Feld beim Kunden
ankommt, sind **drei** Stellen in `lib/netdiag.lib.php` zu pflegen:
| Funktion | Zweck | Wenn vergessen |
|----------|-------|----------------|
| `netdiagKundenfelder()` | Whitelist + Beschriftung + Einheit | Feld verschwindet im Kunden-PDF spurlos, übrig bleibt die Ampel |
| `netdiagToolName()` | Klarname des Werkzeugs | beim Kunden steht „[netzwerk] meintool" |
| `netdiagKundentext()` | Rohwerte übersetzen/entschärfen | englische API-Werte im deutschen Abnahmedokument |
Spiegelbildlich dazu `app/src/lib/messfelder.ts` in der App.
**Feldnamen immer aus dem erzeugenden Code der App ablesen** (`types.ts`, die
`run()`-Rümpfe der Werkzeuge), nie aus dem Kopf und nie aus selbst
geschriebenen Testdaten — das ist hier schon zweimal schiefgegangen (KB #1084).
Braucht die Messart eine eigene Tabellendarstellung im PDF, einen Zweig in
`lib/netdiag_pdf.lib.php` ergänzen (Vorbilder: `netdiagPdfStressTest`,
`netdiagPdfWifiKanal`) — sonst wird das Ergebnis zu einer `|`-getrennten Zeile
zusammengeschoben.
## Einrichtung
**Einrichtung → Module → NetDiag → Einstellungen:**
- Token-Gültigkeit (Sekunden)
- App-Download-URL (APK) — wird als QR-Code angezeigt
## Lizenz
GPLv3