From f560fd3a58e9871e2484f601c8caeb4f37e7930a Mon Sep 17 00:00:00 2001 From: Eddy Date: Sat, 18 Jul 2026 14:55:34 +0200 Subject: [PATCH] Doku: README auf SSO/awlauth + Neuer-Auftrag-Flow aktualisiert [deploy] - Auth-Doku von JWT auf zentrales SSO (HttpOnly-Cookie awl_sso, same-origin) umgestellt: Stack, Feature-Login, lib-Beschreibung, /auth.php, photo.php/pdf.php (?jwt= entfaellt, Cookie wird same-origin auch fuer img/object mitgeschickt) - Feature 'Neuer Auftrag' dokumentiert (Ihr Zeichen/Beschreibung/Liefertermin/Freigabe) --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1086363..e98c7e4 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,17 @@ Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprachnotiz - **Vanilla JavaScript** — kein Build, keine Framework-Abhängigkeit - **Service Worker** für App-Shell-Cache (Workbox-frei, eigene Implementierung) -- **IndexedDB** für JWT-Storage und Offline-Upload-Queue +- **IndexedDB** für die Offline-Upload-Queue (Auth-Session steckt im HttpOnly-Cookie, nicht in IndexedDB) - **REST API** des `bericht`-Dolibarr-Moduls unter `/custom/bericht/api/` ## Features **Aufträge** -- ✅ Login mit Dolibarr-Credentials → JWT (7 Tage gültig) +- ✅ Login mit Dolibarr-Credentials → zentrales SSO (HttpOnly-Cookie `awl_sso`, same-origin; Single-Sign-On/-Logout über alle AWL-Apps). WebAuthn/Passkey-Login möglich - ✅ Auftragsliste mit Suche, gefiltert auf eigene Aufträge (Multi-User) - ✅ Toggle "Auch abgeschlossene" (Filter in localStorage persistiert) - ✅ Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call) +- ✅ **Neuer Auftrag** (FAB): Kunde per Suche/Zuletzt-verwendet wählen, dann **Ihr Zeichen** (Pflicht), **Auftragsbeschreibung** (optional), **Geplanter Liefertermin** (Datum + Uhrzeit) und Checkbox **Auftrag direkt freigeben**. Kunden-Defaults (Zahlungsbedingung/Zahlart, Ansprechpartner) werden übernommen. Bei „direkt freigeben" hängt das Backend automatisch eine Std-Lohn-Zeile an (Kundenkarten-Default bzw. Fallback-Produkt, kundenspezifischer Preis) und validiert den Auftrag. **Foto-Upload** - ✅ Live-Kamera-Modal (getUserMedia): bleibt für Serien-Aufnahmen offen — Auslöser + Filmstreifen mit Upload-Status je Foto (💾 gesichert → ⏳ lädt hoch → ✓ fertig), Front-/Rückkamera-Umschaltung, Fehlschuss löschbar @@ -84,8 +85,8 @@ baustelle-pwa/ ├── app.js Hauptlogik (Routes, Views) ├── app.css Mobile-first Styling ├── lib/ -│ ├── idb.js IndexedDB-Wrapper (JWT + Foto-Queue) -│ ├── api.js REST-API-Client (JWT, JSON-Guard, Timeout) +│ ├── idb.js IndexedDB-Wrapper (Foto-Queue) +│ ├── api.js REST-API-Client (SSO-Cookie same-origin, JSON-Guard, Timeout) │ ├── offline.js Offline-Queue + Sync (Persist-First) │ ├── router.js Hash-Router │ ├── pdf.min.js PDF.js (Lieferschein-Vorschau) @@ -100,7 +101,7 @@ baustelle-pwa/ Die App spricht die Bericht-API unter `/custom/bericht/api/`: **Auth** -- `POST /auth.php` — Login mit Dolibarr-Credentials → JWT +- `POST /auth.php` — Login mit Dolibarr-Credentials → setzt HttpOnly-Cookie `awl_sso` (zentrales SSO via awlauth). Folge-Requests authentisieren same-origin über das Cookie (kein Bearer-Token) **Aufträge** - `GET /orders.php` — Aufträge des Users (Filter: `?open=1`, `?q=suche`) @@ -137,11 +138,11 @@ Die App spricht die Bericht-API unter `/custom/bericht/api/`: - `POST /shipments.php?id=X&action=confirm` — Kunden-Unterschrift einstempeln (FormData mit signature_png, signer_name, gps_lat, gps_lon, signed_at). Backend setzt signed_status=1 und schließt die Expedition **Medien** -- `GET /photo.php?relpath=X&jwt=Y` — Foto abrufen (mit Thumbnail: `&size=thumb`) +- `GET /photo.php?relpath=X` — Foto abrufen (mit Thumbnail: `&size=thumb`); Auth über `awl_sso`-Cookie (same-origin, auch für ``-Tags — kein `?jwt=` mehr nötig) - `POST /delete_photo.php` — Foto löschen - `POST /voice.php?order_id=X` — Sprachnotiz hochladen - `POST /transcribe.php` — Whisper-Transkription anfordern -- `GET /pdf.php?id=X&jwt=Y` — PDF abrufen (Final oder Preview) +- `GET /pdf.php?id=X` — PDF abrufen (Final oder Preview); Auth über `awl_sso`-Cookie (same-origin) **Templates** - `GET /templates.php` — Bericht-Vorlagen