diff --git a/README.md b/README.md index 0e327fb..103b66b 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/beispiele/bentopdf/docker-compose.yml b/beispiele/bentopdf/docker-compose.yml index 3410c3f..f535b6f 100644 --- a/beispiele/bentopdf/docker-compose.yml +++ b/beispiele/bentopdf/docker-compose.yml @@ -1,35 +1,102 @@ -# ───────────────────────────────────────────────────────────── -# BentoPDF mit HoneyOS-Leiste +# ───────────────────────────────────────────────────────────────────────────── +# BentoPDF mit HoneyOS-Leiste — alles über den eigenen Ursprung. # -# Aufbau: Pangolin → leiste (nginx) → bentopdf +# Pangolin → leiste → bentopdf +# ↘ honeyos (nur /honeybar/ und zwei Abfragen) # -# Der nginx tut nichts weiter, als beim Durchreichen einen '; + } + } networks: - intern: + honeybar: + external: true diff --git a/beispiele/bentopdf/leiste.conf b/beispiele/bentopdf/leiste.conf deleted file mode 100644 index af376df..0000000 --- a/beispiele/bentopdf/leiste.conf +++ /dev/null @@ -1,34 +0,0 @@ -# Setzt die HoneyOS-Leiste in eine fremde App ein, die man nicht ändern kann. -# -# Angepasst werden müssen genau zwei Dinge: die Adresse von HoneyOS und -# data-app (der Name muss der id der App in HoneyOS entsprechen, sonst weiss -# die Leiste nicht, wo man gerade ist). -server { - listen 80; - - location / { - proxy_pass http://bentopdf:8080; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_http_version 1.1; - - # Unkomprimiert anfordern — in einem gzip-Strom ist nichts zu ersetzen. - # Das betrifft nur die Strecke Einsetzer→App; nach draussen komprimiert - # Pangolin weiterhin. - proxy_set_header Accept-Encoding ""; - - # Nur HTML anfassen. Bilder, JSON und Downloads gehen unberührt durch. - sub_filter_types text/html; - sub_filter_once on; - sub_filter '' - ''; - - # Falls die App eine eigene CSP schickt (BentoPDF tut es nicht), muss - # sie ersetzt werden — zwei CSP-Kopfzeilen heissen nicht „mehr erlaubt", - # sondern „beide müssen zustimmen". Dann diese zwei Zeilen einschalten: - # - # proxy_hide_header Content-Security-Policy; - # add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://honeyos.duckdns.org; connect-src 'self' https://honeyos.duckdns.org; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:" always; - } -} diff --git a/beispiele/mehrere-apps/leiste.conf b/beispiele/mehrere-apps/leiste.conf index 88720a0..5fc96c6 100644 --- a/beispiele/mehrere-apps/leiste.conf +++ b/beispiele/mehrere-apps/leiste.conf @@ -62,7 +62,6 @@ server { proxy_set_header Accept-Encoding ""; # Nur HTML anfassen; alles andere geht unberührt durch. - sub_filter_types text/html; sub_filter_once on; sub_filter '' '';