refactor(office): toten JWT-Schlüssel entfernen, Doku richtigstellen
Beim Löschen von convert.go ist Aethers einzige Verwendung des JWT-Schlüssels mitgegangen: signJWT stand dort. Zurück blieb ein Feld auf dem Client, das niemand liest, plus Config-Eintrag und Aufrufparameter – Go meldet ungenutzte Strukturfelder nicht, deshalb lief der Build durch. Eine Einstellung, die nichts mehr tut, ist schlimmer als keine: Wer sie setzt, glaubt, sie wirke. OFFICE_JWT_SECRET bleibt in der .env, wird aber vom **Office-Container** gelesen, nicht von Aether. Geprüft mit Euro-Office: JWT_ENABLED=true und Aether ohne jedes Signieren – der WOPI-Weg läuft. Doku richtiggestellt, nachdem Marc den Compose-Schnipsel angezweifelt hat: - „Euro-Office ist hier nie gelaufen" stimmte nicht mehr. Jetzt steht da, was tatsächlich geprüft ist (Abbild, Start, Discovery, CheckFileInfo, Ausliefern, mobileEdit) und was nicht: PutFile, also das Zurückschreiben. - Der Absatz zu /ConvertService.ashx beschrieb gelöschten Code. - OFFICE_PUBLIC_URL: die Falle benannt, die einen Tag gekostet hat. Stand dort localhost, lief alles am Docker-Rechner und blieb am Telefon schwarz – dort ist localhost das Telefon. Ohne Fehlermeldung. - Zur Portbindung: Die Office-Schnipsel binden auf 0.0.0.0, anders als Aether selbst. Das ist nötig, weil der Browser direkt hin muss – steht jetzt dabei, samt dem sauberen Weg über einen Reverse Proxy. Geprüft: go build/vet sauber, alle 234 Prüfungen der sieben Selbsttest-Suiten grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
944b2c63e2
commit
7d45941c03
5 files changed
+48
-64
No files matched your search
@@ -665,6 +665,13 @@ Container heraus er selbst.
|
||||
Der Port unterscheidet sich je nach Anbieter: **Collabora lauscht auf 9980,
|
||||
OnlyOffice und Euro-Office auf 80.**
|
||||
|
||||
> **Zur Portbindung in den Schnipseln:** Dort steht `${APP_BIND:-0.0.0.0}` –
|
||||
> also standardmäßig **offen im Netz**, anders als bei Aether selbst
|
||||
> (`127.0.0.1`). Das ist Absicht: Der Browser muss den Office-Server direkt
|
||||
> erreichen, und über Loopback kann das kein zweites Gerät. Wer einen Reverse
|
||||
> Proxy davor setzt – der saubere Weg –, trägt hier `127.0.0.1` ein und lässt
|
||||
> den Proxy die öffentliche Adresse bedienen.
|
||||
|
||||
Die Schnipsel unten starten sofort mit `docker compose up -d`. Zum Abschalten
|
||||
`docker compose stop office`. Wer den Container lieber ganz aus der normalen
|
||||
Startfolge nimmt, hängt `profiles: ["office"]` an den Dienst – dann braucht es
|
||||
@@ -787,17 +794,28 @@ heißen gleich. Für uns ist es deshalb **derselbe Anbieter** –
|
||||
Die `.env` ist dieselbe wie bei OnlyOffice. Rechne mit **7 GB** allein für das
|
||||
Abbild.
|
||||
|
||||
> **Teilweise geprüft.** Collabora ist hier gemessen worden, den Kreis von
|
||||
> Tippen bis Speichern eingeschlossen. OnlyOffice lief inzwischen auf dieser
|
||||
> Anlage – gemessen sind sein Start, die Umwandlung nach PDF und die
|
||||
> JWT-Signatur (ohne Signatur antwortet es mit `{"error":-8}`); im Leerlauf
|
||||
> braucht es 396 MB, nach jedem Start belegt es für einige Minuten einen Kern,
|
||||
> weil es seine eigenen Web-Dateien packt. **Nicht** gemessen ist dort der
|
||||
> WOPI-Kreis vom Tippen bis zum Speichern. Euro-Office steht nach der
|
||||
> Dokumentation und dem gemeinsamen Weg, ist hier nie gelaufen.
|
||||
> **Stand der Prüfung (16.09.2026).** Collabora ist hier gemessen worden, den
|
||||
> Kreis von Tippen bis Speichern eingeschlossen. **Euro-Office lief inzwischen
|
||||
> auf dieser Anlage** – geprüft sind: Abbild ziehen (6,99 GB), Start,
|
||||
> `/hosting/discovery` (antwortet mit 196 KB und einer breiten Formatliste bis
|
||||
> zu iWork und EPUB), `CheckFileInfo`, das Ausliefern der Datei (der Inhalt
|
||||
> stand im Editor) und die Handy-Fassung über `mobileEdit`. **Nicht** geprüft
|
||||
> ist dort das Zurückschreiben, also `PutFile`. OnlyOffice selbst kam hier nie
|
||||
> über die Ermittlung hinaus.
|
||||
>
|
||||
> Wenn der Editor dort leer bleibt, sind das die zwei Stellen, an denen es
|
||||
> nach Aktenlage hakt:
|
||||
> Genau dieser Schnipsel lief – mit zwei Abweichungen, die nur diese Anlage
|
||||
> betreffen: Dienstname `euro` statt `office` und Port 9981 statt 9980, weil
|
||||
> Collabora daneben weiterlief.
|
||||
>
|
||||
> **Die Falle, die uns einen Tag gekostet hat**, steht nicht in dieser
|
||||
> Aufzählung, sondern eine Ebene höher: `OFFICE_PUBLIC_URL`. Stand dort
|
||||
> `http://localhost:9980`, lief alles am Rechner mit Docker – und am Telefon
|
||||
> blieb der Rahmen **schwarz**, denn dort ist „localhost" das Telefon. Diese
|
||||
> Adresse muss der Browser auflösen können: deine Domain oder die LAN-IP. Der
|
||||
> Fehler meldet sich nicht, er zeigt nur nichts.
|
||||
>
|
||||
> Bleibt der Editor trotz richtiger Adresse leer, sind das die zwei Stellen,
|
||||
> an denen es nach Aktenlage hakt:
|
||||
>
|
||||
> 1. **Der IP-Filter.** OnlyOffice nimmt WOPI-Anfragen nur von einem
|
||||
> „vertrauenswürdigen Integrator" an; dessen Adresse muss in seiner
|
||||
@@ -807,45 +825,14 @@ Abbild.
|
||||
> Signatur **nicht** – erlaubt, aber falls es dort eine Pflicht gibt, wäre
|
||||
> das der Ort.
|
||||
>
|
||||
> `JWT_SECRET` betrifft die eigene API des Dokumentenservers, nicht den
|
||||
> WOPI-Weg – unser Adapter signiert damit nichts. Nachgemessen: `POST
|
||||
> /ConvertService.ashx` ohne Signatur antwortet `{"error":-8}`, mit Signatur
|
||||
> (HS256, entweder als Feld `token` im Rumpf oder als `Authorization: Bearer`
|
||||
> über `{"payload": …}`) kommt das Ergebnis. Der Schlüssel gehört also
|
||||
> gesetzt – sonst läuft die API offen.
|
||||
|
||||
### Am Telefon: die Handy-Fassung des Editors
|
||||
|
||||
Ein Office-Dokument öffnet **überall im Editor** – am Schreibtisch wie am
|
||||
Telefon. Am Telefon fordert Aether dabei die Handy-Fassung an, wo der
|
||||
Office-Server eine anbietet:
|
||||
|
||||
| Anbieter | am Telefon |
|
||||
|---|---|
|
||||
| **Collabora** | seine eigene Handy-Ansicht (kennt keine getrennte Aktion) |
|
||||
| **OnlyOffice / Euro-Office** | die WOPI-Aktion `mobileEdit` |
|
||||
|
||||
Die Ermittlungsliste nennt zu jeder Endung mehrere Aktionen. OnlyOffice und
|
||||
Euro-Office führen neben `edit`/`view` auch `mobileEdit`/`mobileView`, und
|
||||
dahinter steckt eine eigene, für kleine Schirme gebaute Oberfläche – dieselbe
|
||||
Adresse mit `?mobile=1`. Aether hat bis zum 16.09.2026 immer die
|
||||
Schreibtisch-Fassung angefordert; am Telefon blieb zwischen Menüband,
|
||||
Formatleisten und Eigenschaftenbereich vom Dokument ein Rechteck übrig.
|
||||
|
||||
Entschieden wird am **Zeigegerät**, nicht an der Fensterbreite: Ein schmales
|
||||
Fenster auf dem Schreibtisch ist immer noch eine Maus und eine Tastatur. Die
|
||||
Oberfläche schickt dazu `?mobile=1` an `/api/v1/office/session/{id}`.
|
||||
|
||||
> **Entfallen am 16.09.2026: die PDF-Ansicht.** Ein Office-Dokument wurde am
|
||||
> Telefon zuvor als gewandeltes PDF gezeigt, mit einem „Edit"-Knopf hinein.
|
||||
> Das war eine Notlösung für eine Oberfläche, die Aether selbst falsch
|
||||
> angefordert hatte – mit `mobileEdit` ist der Anlass weg. Mit ihr sind
|
||||
> `internal/office/preview.go`, `convert.go` und die Spalte
|
||||
> `files.preview_version` gefallen (Migration 000026); die Dateien unter
|
||||
> `previews/` sammelt der GC ein. Wer ein PDF braucht, exportiert es im
|
||||
> Editor. Die Umwandlung im Hintergrund (`/cool/convert-to/pdf` bzw.
|
||||
> `/ConvertService.ashx`) hatte keinen anderen Aufrufer und ist damit
|
||||
> ebenfalls entfallen.
|
||||
> **`JWT_SECRET` liest Aether nicht.** Es schützt die *eigene* API des
|
||||
> Dokumentenservers, nicht den WOPI-Weg – der hat eigene Token. Bis zum
|
||||
> 16.09.2026 signierte Aether damit seine Umwandlungsaufrufe; mit der
|
||||
> PDF-Ansicht ist auch das entfallen, und `OFFICE_JWT_SECRET` wird von der
|
||||
> Anwendung nicht mehr gelesen. In der `.env` gehört es trotzdem gesetzt:
|
||||
> **Der Office-Container liest es**, und ohne steht seine API offen, wenn
|
||||
> `JWT_ENABLED` an ist. Geprüft mit Euro-Office: `JWT_ENABLED=true` und
|
||||
> Aether ohne jedes Signieren – der WOPI-Weg läuft.
|
||||
|
||||
### Welche Dateien, und wie gut
|
||||
|
||||
|
||||
Reference in new issue
Block a user