Eigener Forgejo: Admin-Zugangsdaten ins geteilte App-Support-Verzeichnis spiegeln #90

Closed
opened 2026-10-22 17:13:46 +00:00 by alf · 1 comment
Owner

forgejo_service.ensure_setup() spiegelt zusätzlich forgejo-admin.json (Benutzer, Passwort, interne Adresse; Rechte 600, atomar, idempotent) in das geteilte App-Support-Verzeichnis (data/iris-app-support; in server unter /home/iris/Library/Application Support/Iris, in beiden Hermes-Containern unter /root/Library/Application Support/Iris gemountet).

Wofür: Plugin-Skripte, die in den Containern laufen (z. B. iris-plugin-dev, iris/iris-plugins#224: eigener Forgejo als Default + Picker), kennen keinen Fernet-Secret-Store. Die Datei im geteilten Verzeichnis ist in Panel (Server-Container) und Hermes-Containern sichtbar — eine Quelle, kein Env-Plumbing pro Container, und kein Passwort in der Plugin-Konfigurationsdatei. Auf dem Mac schreibt die App dieselbe Datei (kein App-Änderung nötig).

Warum nicht Umgebungsvariablen: Das Panel-Skript und der Agent (Hermes-/Sandbox-Container) bekämen beide eigenes Plumben; die Datei folgt ensure_setup() und heilt sich selbst (z. B. nach einer Passwort-Reset-Zurücksetzung). Ein Schreibfehler bleibt eine Logzeile und bricht das Setup nicht.

`forgejo_service.ensure_setup()` spiegelt zusätzlich `forgejo-admin.json` (Benutzer, Passwort, interne Adresse; Rechte 600, atomar, idempotent) in das **geteilte App-Support-Verzeichnis** (`data/iris-app-support`; in `server` unter `/home/iris/Library/Application Support/Iris`, in beiden Hermes-Containern unter `/root/Library/Application Support/Iris` gemountet). **Wofür:** Plugin-Skripte, die in den Containern laufen (z. B. `iris-plugin-dev`, iris/iris-plugins#224: eigener Forgejo als Default + Picker), kennen keinen Fernet-Secret-Store. Die Datei im geteilten Verzeichnis ist in Panel (Server-Container) **und** Hermes-Containern sichtbar — eine Quelle, kein Env-Plumbing pro Container, und kein Passwort in der Plugin-Konfigurationsdatei. Auf dem Mac schreibt die App dieselbe Datei (kein App-Änderung nötig). **Warum nicht Umgebungsvariablen:** Das Panel-Skript und der Agent (Hermes-/Sandbox-Container) bekämen beide eigenes Plumben; die Datei folgt `ensure_setup()` und heilt sich selbst (z. B. nach einer Passwort-Reset-Zurücksetzung). Ein Schreibfehler bleibt eine Logzeile und bricht das Setup nicht.
alf changed title from Panel-Skripte: Zugangsdaten des eigenen Forgejo als Umgebungsvariablen to Eigener Forgejo: Admin-Zugangsdaten ins geteilte App-Support-Verzeichnis spiegeln 2026-10-22 18:56:06 +00:00
Author
Owner

PR #92 gemergt: feat(forgejo): Admin-Zugangsdaten als forgejo-admin.json ins geteilte App-Support-Verzeichnis spiegeln (#90)
#92

Commits:

  • feat(forgejo): Admin-Zugangsdaten als forgejo-admin.json ins geteilte App-Support-Verzeichnis spiegeln (#90)

Befund

Die Zugangsdaten des eigenen Forgejo lagen nur im Fernet-Secret-Store (Server-Prozess). Plugin-Skripte, die in den Containern laufen, kennen diesen nicht — auf dem Linux-Server hätte iris-plugin-dev (iris/iris-plugins#224) weder im Panel noch im Hermes-Container den eigenen Forgejo erkennen können.

Geändert

  • app/forgejo_service.py: ensure_setup() schreibt nach der Einrichtung (Admin + Repo iris-vault) forgejo-admin.json (Benutzer, Passwort, interne FORGEJO_URL) ins geteilte App-Support-Verzeichnis ($IRIS_APP_SUPPORT oder ~/Library/Application Support/Iris) — Rechte 600, atomar (.tmp → replace), idempotent (gleicher Inhalt = kein Schreibzugriff), ein OSError bleibt eine Logzeile. Dasselbe Verzeichnis bind-mounted: server (/home/iris/...) und beide Hermes-Container (/root/...), dieselbe data/iris-app-support-Datenbank.
  • tests/test_forgejo_service.py: neuer Test (Spiegelinhalt inkl. interner Adresse, 0600, Idempotenz, Aktualisierung nach Passwort-Reset).

Geprüft

  • pytest tests/test_forgejo_service.py lokal: 14 passed (davon 1 neu; 120 s — die Laufzeit steckt im bereits bestehenden Unreachable-Test).
  • Compose-Mounts: data/iris-app-support hängt in server (Zeile 131), hermes (258), hermes-scheduled (349) und der Sandbox-Vorlage (379) — ein File erreicht beide Seiten; die App schreibt auf dem Mac in dasselbe Verzeichnis.
  • Pfade: server-Home /home/iris und Hermes-Home /root — Path.home()/Library/Application Support/Iris löst in beiden Containern auf den Mount (ohne Env-Var).

Nicht geprüft

  • Nicht gegen alf@iris-server deployet (das geschieht als nächster Schritt zusammen mit dem Plugin-Paket); docker compose up -d --build und das Vorhandensein der Datei nach einem Neustart fehlen noch.
  • Nicht gemessen: Schreibberechtigung des iris-Users auf den Mount, falls der Host-Ordner anders geowned ist (das entrypoint-chown deckt data/-Pfade; iris-app-support ist bereits in Betrieb, da die Plugin-Konfigurationsdateien dort landen).

Grenzen / Offen

  • Das Passwort liegt fortan in zwei Dateien des selben Verzeichnisses (Secret-Store-Encrypted + forgejo-admin.json 0600) — bewusst: nur so finden es auch die Container. Beide unter data/, nie im Image.
  • Ein manuelles Passwort-Ändern im Forgejo (außerhalb Iris) veraltet den Spiegel, bis ensure_setup() beim nächsten Serverstart den gesparten Wert zurücksetzt (bestehendes Verhalten des Secret-Stores).
PR #92 gemergt: feat(forgejo): Admin-Zugangsdaten als forgejo-admin.json ins geteilte App-Support-Verzeichnis spiegeln (#90) https://forgejo.lewerken.duckdns.org/iris/iris-linux-server/pulls/92 Commits: - feat(forgejo): Admin-Zugangsdaten als forgejo-admin.json ins geteilte App-Support-Verzeichnis spiegeln (#90) --- ## Befund Die Zugangsdaten des eigenen Forgejo lagen nur im Fernet-Secret-Store (Server-Prozess). Plugin-Skripte, die in den Containern laufen, kennen diesen nicht — auf dem Linux-Server hätte `iris-plugin-dev` (iris/iris-plugins#224) weder im Panel noch im Hermes-Container den eigenen Forgejo erkennen können. ## Geändert - `app/forgejo_service.py`: `ensure_setup()` schreibt nach der Einrichtung (Admin + Repo `iris-vault`) `forgejo-admin.json` (Benutzer, Passwort, interne `FORGEJO_URL`) ins geteilte App-Support-Verzeichnis (`$IRIS_APP_SUPPORT` oder `~/Library/Application Support/Iris`) — Rechte 600, atomar (`.tmp` → `replace`), idempotent (gleicher Inhalt = kein Schreibzugriff), ein `OSError` bleibt eine Logzeile. Dasselbe Verzeichnis bind-mounted: `server` (`/home/iris/...`) und beide Hermes-Container (`/root/...`), dieselbe `data/iris-app-support`-Datenbank. - `tests/test_forgejo_service.py`: neuer Test (Spiegelinhalt inkl. interner Adresse, 0600, Idempotenz, Aktualisierung nach Passwort-Reset). ## Geprüft - `pytest tests/test_forgejo_service.py` lokal: 14 passed (davon 1 neu; 120 s — die Laufzeit steckt im bereits bestehenden Unreachable-Test). - Compose-Mounts: `data/iris-app-support` hängt in `server` (Zeile 131), `hermes` (258), `hermes-scheduled` (349) und der Sandbox-Vorlage (379) — ein File erreicht beide Seiten; die App schreibt auf dem Mac in dasselbe Verzeichnis. - Pfade: `server`-Home `/home/iris` und Hermes-Home `/root` — `Path.home()/Library/Application Support/Iris` löst in beiden Containern auf den Mount (ohne Env-Var). ## Nicht geprüft - Nicht gegen `alf@iris-server` deployet (das geschieht als nächster Schritt zusammen mit dem Plugin-Paket); `docker compose up -d --build` und das Vorhandensein der Datei nach einem Neustart fehlen noch. - Nicht gemessen: Schreibberechtigung des `iris`-Users auf den Mount, falls der Host-Ordner anders geowned ist (das entrypoint-`chown` deckt `data/`-Pfade; `iris-app-support` ist bereits in Betrieb, da die Plugin-Konfigurationsdateien dort landen). ## Grenzen / Offen - Das Passwort liegt fortan in **zwei** Dateien des selben Verzeichnisses (Secret-Store-Encrypted + `forgejo-admin.json` 0600) — bewusst: nur so finden es auch die Container. Beide unter `data/`, nie im Image. - Ein manuelles Passwort-Ändern **im Forgejo** (außerhalb Iris) veraltet den Spiegel, bis `ensure_setup()` beim nächsten Serverstart den gesparten Wert zurücksetzt (bestehendes Verhalten des Secret-Stores).
alf closed this issue 2026-10-27 10:41:06 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-linux-server#90
No description provided.