feat(beispiel): die Leiste ueber die eigene Adresse der App ausliefern

Marcs BentoPDF-Image (ghcr.io/alam00000/bentopdf-simple) schickt eine strenge
CSP — mit dem Image von Docker Hub, an dem ich zuerst geprueft hatte, war das
nicht zu sehen. Statt fremde Kopfzeilen umzuschreiben, reicht der Einsetzer
jetzt auch /honeybar/ und die zwei Abfragen der Leiste unter seiner eigenen
Adresse durch. Damit ist fuer den Browser alles derselbe Ursprung: CSP
unangetastet, kein CORS, kein COEP, und der Schluessel bleibt auf dem Server.

Durchgereicht wird nur /api/apps und /api/weather, nur lesend. Ein pauschales
/api/ haette die ganze Schnittstelle unter die Adresse der App gehaengt — beim
Ausprobieren hat meine eigene Schreibprobe prompt die App-Liste geleert.

Das Binden auf 127.0.0.1 ist raus: Es passt nur, wenn der Proxy auf demselben
Wirt im Host-Netz laeuft, und nicht fuer Marcs Aufbau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-08-29 01:28:12 +02:00
1 parent d1cd20586f
commit 8f294e15db
4 files changed
+107 -54

No files matched your search

+22 -1
View File
@@ -231,9 +231,30 @@ aus. Ohne das erscheint dort keine Leiste, und in der Konsole steht nur
`ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep`.
Das COEP der App bleibt dabei unangetastet — ihre eigenen Fähigkeiten also auch.
**Zwei Bauarten.** Die zweite ist die bessere, sobald die App eine eigene CSP
schickt — und das tun die meisten:
| | Skript von HoneyOS | Skript über die eigene Adresse |
|---|---|---|
| CSP der App | muss ersetzt werden | **unangetastet** (`'self'` genügt) |
| CORS | Ursprung muss eingetragen sein | entfällt |
| COEP der App | braucht `Cross-Origin-Resource-Policy` | entfällt |
| `HONEYOS_APPS_KEY` | steht im Quelltext der Seite | **bleibt auf dem Server** |
| Aufwand | eine `sub_filter`-Zeile | drei `location`-Blöcke |
Bei der zweiten reicht der Einsetzer auch `/honeybar/` und die zwei Abfragen der
Leiste durch, unter *seiner* Adresse. Für den Browser ist damit alles derselbe
Ursprung, und die drei Hürden fallen auf einmal weg. Durchgereicht werden dabei
**nur** `/api/apps` und `/api/weather`, und nur lesend (`limit_except GET`) —
ein pauschales `/api/` hinge sonst die ganze HoneyOS-Schnittstelle unter die
Adresse der App.
**Fertige Beispiele:**
- [`beispiele/bentopdf/`](beispiele/bentopdf/) — ein Dienst, kürzestmöglich.
- [`beispiele/bentopdf/`](beispiele/bentopdf/) — ein Dienst, alles über die
eigene Adresse. Geprüft mit `ghcr.io/alam00000/bentopdf-simple`, das eine
strenge CSP und COEP mitbringt: Leiste, Apps und Wetter erscheinen, ohne dass
an dessen Kopfzeilen etwas geändert wird.
- [`beispiele/mehrere-apps/`](beispiele/mehrere-apps/) — **HoneyOS und ein
Einsetzer für alle Dienste in einem Stapel.** Am Host erkennt nginx, welcher
Dienst gemeint ist; eine neue App sind zwei Zeilen in den Tabellen oben in