Einstellungen: eigener Forgejo als Default, Repos per Picker #224
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/iris-plugins#224
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Das Einstellungs-Panel (
web/settings.html+panel_api.py) verlangt heute von Hand: Forgejo-Adresse, Plugin-Repo, Registry-Repo, Token.forgejo.lewerken.duckdns.org).GET /api/v1/user/reposinkl. Org-Repos, paginiert), plus manuelle Eingabe als Fallback und „neues Repo anlegen“ (damit ein frischer eigener Forgejoiris-plugins/registrydirekt im Panel bekommt).einstellungen()nutzt den eigenen Forgejo, wenn die Konfiguration auf ihn zeigt (server-Feld, oder die Adresse stimmt überein, oder sie ist leer) — der Zugang kommt zur Laufzeit per Basic; es steht kein Token in der Datei.Erkennung des eigenen Forgejo
IRIS_FORGEJO_URL/IRIS_FORGEJO_USER/IRIS_FORGEJO_PASSWORD,$IRIS_APP_SUPPORT/forgejo-admin.json(Mac:~/Library/Application Support/Iris, 0600, von der App geschrieben; ein optionalesurl-Feld hat Vorrang vorROOT_URLausforgejo/custom/conf/app.ini, Rückfallhttp://127.0.0.1:3300). Auf dem Linux-Server spiegelt der Server dieselbe Datei in das App-Support-Verzeichnis, dasserverund beide Hermes-Container teilen (iris/iris-linux-server#90) — so kommt der Zugang in Panel und Skill ohne Umgebungsvariablen.Zugang: Basic statt Token (Entscheidung 2026-10-22)
Forgejo 16+ liefert bei der Token-Anlage kein Klartext zurück (nur die SHA1), und genau diese SHA1 lehnt die API für alle Routen mit 403 ab, während Git sie akzeptiert (an 16.0.6 gemessen, git ls-remote ok /
/user/repos403). Für den eigenen, ausschließlich intern erreichbaren Forgejo ist die Admin-Basic der robuste Weg: sie gilt für API und Git auf jeder Version, und die Konfigurationsdatei bleibt ohne Geheimnis (server: eigener_forgejo+ Adresse; das Passwort kommt zur Laufzeit aus Datei bzw. Variablen und verlässt das Modul nur alsAuthorization-Header). Manueller Server: wie bisher mit Token (im Web-UI angelegtes Klartext-Token funktioniert auf allen Versionen).Konfig-Format (vorwärtskompatibel zu iris-plugins#113)
Neues Feld
server:eigener_forgejo| leer = manuell. #113 (iris-forgejo, eigene Instanzen/Profile) baut darauf auf; die Instanzen-Profile selbst sind nicht Teil dieses Issues.Abnahme
server+Adresse; Picker listet die Repos; „neues Repo anlegen“ legt ein privates Repo an; Verbindungstest prüft Server/Repo/Registry gegen die Admin-Anmeldung.config-status: eigener Forgejo eingetragen/erkannt →configured(ohne Netz, nur lokale Erkennung)./version,/user/repospaginiert + Repo-Anlage, Admin-Repo-Details) +einstellungen()-Fallback; alle bestehenden Tests grün (insgesamt 206).erste-schritte.md/einschraenkungen.md.PR #226 gemergt: feat(iris-plugin-dev): eigener Forgejo fix und fertig, Repos per Picker (0.1.14) (#224)
#226
Commits:
Befund
Das Panel verlangte von Hand Adresse, zwei Repos und ein Token. Dabei bringt jede Iris-Installation ihren eigenen Forgejo mit (iris/Iris#112) — und auf Forgejo 16+ taugt das Token-Muster des App-Vault-Logins nicht mehr für API-Aufrufe: die Anlage liefert nur die SHA1 zurück (kein Klartext), und genau diese SHA1 lehnt die API für alle Routen mit 403 ab, während Git sie akzeptiert (an 16.0.6 gemessen:
git ls-remoteok,/user/repos403; mit Basic 200 überall). Die App bleibt davon im Alltag unberührt (Tages-Sync ist reines Git); neuangelegte Tokens wären auf 16 API-unbrauchbar.Geändert
pd_eigener.py(neu): Erkennung des eigenen Forgejo ($IRIS_APP_SUPPORT/forgejo-admin.json— Mac: von der App, Linux: gespiegelt vom Server, iris/iris-linux-server#90 — oderIRIS_FORGEJO_*-Variablen; Adresse ausurl-Feld /ROOT_URL/ Standard) und Basic-Authentifizierung dafür:erreichbar,repos(paginiert/user/repos),repo_anlegen,git_kopf. Das Admin-Passwort verlässt das Modul nur alsAuthorization-Header.pd_forgejo.py:einstellungen()kennt dasserver-Feld (eigener_forgejo= Basic zur Laufzeit, kein Token in der Datei; alte Token-Konfigurationen auf der eigenen Adresse heilen automatisch um, Konfigurationen fremder Server bleiben unberührt, explizite Env-Varialen suppressen den Fallback).Forgejo.anfrage()/git()/_authentifizierung(): modusabhängigerAuthorization-Header (Basic/Token) inkl. korrektem Schwärzen des jeweiligen Geheimnisses.panel_api.py: neue Befehleeigener-einrichten,repos(Picker, paginiert),repo-anlegen;statusmeldet den eigenen Forgejo (verfuegbar/erreichbar);testprüft im Eigenfall Server/Repo/Registry gegen die Admin-Anmeldung;savespeichertserverund setzt die eigene Adresse aus dem System.web/settings.html: Quellenwahl (eigener Forgejo mit Badge / manueller Server), beide Repos per Picker + „anderes“-Feld + „neues Repo anlegen“, angepasste Hinweise.erste-schritte.md(Quellenwahl + Picker),einschraenkungen.md(neue Meldung),store/description.md+store-page.json+store/changelog.md0.1.14,plugin.json0.1.14 mit neuenpanel_api-Befehlen.test_eigener.py(neu, 19) — Erkennung, Basic (Repos-Paginierung, 401/409, Passwort-Schwärzung, Erreichbarkeit),einstellungen()-Fallback (Basic statt tot-erkanntem Token, fremde Konfiguration unberührt, Env-Suppression, Fehlermeldungen). Fake-Forgejo (test_forgejo/helfer) nimmt Basic an den Eigen-Routen; Testumgebungen hermetisch (IRIS_APP_SUPPORT/IRIS_FORGEJO_*gepatcht). Panel-Tests um Eigenfall erweitert; Manifest-Test auf die neuen Befehle.Geprüft
python3 -I -m unittest discover -s tests: 206 passed (lokal, Mac).build-irisplugin.shbaut; Inhalt geprüft (neue/aktualisierte Dateien drin,PLAN.md/tests/storedraußen); Privatheitsscan: nur die seit 0.1.13 erlaubte öffentliche Forgejo-Domain, sonst keine Hostnamen/Pfade/Zugangsdaten.forgejo-admin.json-Reader gegen beide realen Formate (Mac-App-Datei ohneurl-Feld; Linux-Spiegel miturl) abgedeckt.Nicht geprüft
~/Desktopund wartet auf die Drop-Zone voniris-server(nächster Schritt, zusammen mit dem frisch gemergten linux-server-Stand #90/PR 92); Panel-Render auf dem Linux-Server und der Picker gegen den öffentlichen Forgejo auf dem Mac fehlen noch.hermes-Nutzung dereinstellungen()-Basic-Anmeldung im Hermes-Container (Datei-Leseweg über den gemeinsamen Mount) — vom Code aus korrekt, nicht in einem echten Skill-Lauf gemessen.Grenzen / Offen
hermes/Skill auf einem Mac ohne eigenen Forgejo + manueller Server: wie bisher Token-basiert — auf einem 16er Forgejo außerhalb der Iris könnte ein per Web-UI angelegtes Klartext-Token API- und Git-fähig sein; ein von der API angelegtes wäre es für die API nicht (bekanntes Forgejo-16-Verhalten, hier unbehebbar, daher der Basic-Default nur für den eigenen Forgejo).server-Feld ist vorwärtskompatibel zu iris-plugins#113 (iris-forgejo: mehrere Profile) gehalten, baut dort aber nichts auf.PR #227 gemergt: fix(iris-plugin-dev): Picker und Repo-Anlage nennen das fehlende Recht „Benutzer“ am Token (0.1.15, #224)
#227
Commits:
Stand (0.1.15)
Befund: Bei der Live-Verifikation von 0.1.14 auf
alf@iris-serverzeigte sich: Das gespeicherte Token der öffentlichen Forgejo-Installation (Rechte Repository + Issue) bekommt aufGET /user/repos— also genau dem Picker — 403 [read:user], gemessen gegen den echten Forgejo 15. AufPOST /user/repos(Probe mit ungültigem Namen, nichts wurde angelegt) verlangt derselbe Forgejo write:user. Forgejo 15+ prüft API-Rechte also pro Token, und die Repo-Liste sowie die Repo-Anlage hängen unter der Kategorie „Benutzer“ — ein Token nach der bisherigen Anleitung (Repository + Issue) listet und legt nichts auf.Geändert:
panel_api.py: Der Picker (repos), „Neues Repo anlegen“ (repo-anlegen) und der Verbindungstest (neuer Schritt Picker,GET /user/repos?limit=1) nennen bei 403 das fehlende Recht „Benutzer“ mit konkretem Hinweis (Einstellungen → Anwendungen, am Token nachtragen; Forgejo 15+).web/settings.html,docs/erste-schritte.md, Store-Text: Das Token braucht Repository, Issue und Benutzer (jeweils Lesen + Schreiben), ohne Admin-Rechte.ohne-benutzerund die/user/repos-Route; neue Tests für den Picker-Schritt und die Picker-Fehlermeldung.Geprüft:
iris-vault); gegen die öffentliche Forgejo 15 bestätigt der 403 mit[read:user]das Befund-Muster.GET /user/repos403 read:user undPOST /user/repos403 write:user beide am echten Forgejo 15 gemessen.Nicht geprüft:
alf@iris-serverinstalliert und visuell im Browser geprüft (nächster Schritt nach dem Merge).PR #228 gemergt: chore(iris-plugin-dev): Store-Seite aus store-page.json neu erzeugt (0.1.15) (#224)
#228
Commits:
PR #229 gemergt: fix(iris-plugin-dev): eigener Forgejo im Sharing-Modus — CA-Vertrauen und urllib-Handler-Kontext (0.1.16, #224)
#229
Commits:
Befund
Das Mac-Panel zeigte „Der eigene Forgejo unter http://forgejo:3300 … nicht erreichbar“:
~/Library/Application Support/Iris/forgejo-admin.jsonenthielt eine Kopie des Linux-Spiegels (3 Felder inkl.url: http://forgejo:3300— interne Docker-Adresse, auf dem Mac nicht auflösbar — und das Admin-Passwort des Linux-Servers). Byte-Layout exakt derjson.dumps(indent=2)-Ausgabe des Linux-Writers; die App selbst schreibt 2 Felder (Swift-JSONEncoder), das Plugin nur Lesezugriff — die Kopie kam von außen, der Schreiber ist nicht identifiziert (Mac-/Linux-Shell-Historie, eigene Session, Plugin-Quellen, Backup geprüft; 20:54 lokal geschrieben, Linux-Gegenstück 18:59 UTC).loadSecrets()-Aufruf liest die Datei) — der Vault-Sync der App lief bereits mit den falschen Zugangsdaten, und die App hatte keine Recovery-Fähigkeit mehr über die Datei.Recovery (Mac): Passwort des Admins per
forgejo admin user change-password(das exakte CLI-Muster der App) auf ein frisches 32-Byte-token_urlsafe-Passwort gesetzt, Datei im App-Format (2 Felder, 0600, atomisch) neu geschrieben; die kaputte Kopie bleibt alsforgejo-admin.json.corrupt-2026-10-22daneben. Verifiziert: neues Passwort 200 auf 127.0.0.1 und 192.168.178.94, altes Passwort 401 auf beiden (also nirgendwo mehr gültig).Was geändert wurde
pd_netz.py:_kontext()lädt die CA der Installation ($IRIS_APP_SUPPORT/forgejo-tls/ca.crt, Sharing-Modus = selbst signiert) in denssl-Kontext; ohne die Datei bleibt der System-Truststore (Linux: reines HTTP, unverändert).https_openversorgt den Handler immer mit dem frisch gebauten Kontext —self._context or …hätte nie gegriffen, weilurllib.request.HTTPSHandlerin neueren Pythons immer einen CA-freien Default-Kontext trägt (gemessen: 192 System-CAs, eigene nie geladen).tests/test_netz.py: 2 neue Tests mit echten openssl-Zertifikaten (Temp-Verzeichnis,IRIS_APP_SUPPORTdorthin): mit CA aus dem App-Support verifiziert (200), ohne CA-Datei muss der Request scheitern. Die Zertifikate tragen die vollen Erweiterungen wie die echten (authorityKeyIdentifier,keyUsage/keyCertSign) — OpenSSL 3.x verifiziert streng und verwirft beides (beide Versagensformen im Testlauf beobachtet).plugin.json0.1.16 + Changelog;store/changelog.md,docs/erste-schritte.md(Sharing-Modus funktioniert von selbst),PLAN.md(0.1.16 + Lesson).Geprüft
python3 -m unittest discover -s tests).pd_eigener.eigener_server()→https://192.168.178.94:3300,erreichbar= True (Admin-Basic über TLS mit der App-CA),repos()=['iris-admin/iris-vault']— der Picker-Pfad des Panels, exakt wie vom Panel aufgerufen.curl --cacert forgejo-tls/ca.crtgegen den eigenen Forgejo: TLS-Verifizierung ok (OpenSSL 4 CLI); altes Passwort 401 / neues 200 auf beiden Hostnamen.Nicht geprüft
forgejo-tls/) weiter verbindet — das ist App-interne Sache und wurde nicht angefasst.ensure_setup), und das Plugin liest die Datei je Aufruf, also selbstheilend.PR #232 gemergt: fix(iris-plugin-dev): Picker-Feld-Ids angleichen, Repo-Liste paginieren (0.1.17, #224)
#232
Commits:
Stand 0.1.17 (iris-plugin-dev)
Befund
Im Einstellungs-Fenster wirkte „Neues Repo anlegen“ tot, der Picker stand im Zustand „Anderes …“ mit der Konsolenmeldung „null is not an object (evaluating 'andere.value')“.
Wurzel: Die HTML-Felder heißen
repoAndere/registryAndere, das JavaScript sprach sie aber als$(selectId + "Andere")→repoSelectAndere/registrySelectAndere= null an. Stand das Standard-Repo (iris/iris-plugins) nicht in der geladenen Liste, warffuelleSelectaufandere.value = standard; der Knopf liest$(selectId + "Andere").valueunbedingterweise → Fehler in der ersten Zeile des Handlers.Auslöser-Szenario: der eigene Forgejo — eine frische Instanz hat nur
iris-admin/iris-vault, damit stehen beide Standards im „Anderes …“-Zweig.Geändert
web/settings.html: HTML-Ids an das JS-Muster angleichen (repoSelectAndere/registrySelectAndere, 4 Stellen);ladeRepospaginiert jetzt die gesamte Repository-Liste (ob_mehr/seitelagen seit 0.1.14 im Backend, das JS nutzte sie nicht).tests/test_settings_html.py(neu): Alle$("…")-Referenzen und alle<select id>+Anderemüssen ein Element treffen.plugin.json-Changelog,store/changelog.md,PLAN.md(Versionszeile + Lessons Learned).Geprüft
status→ eigener Forgejohttps://192.168.178.94:3300erreichbar (0,17 s),repos→['iris-admin/iris-vault']— exakt das Auslöser-Szenario.web/settings.html+plugin.json(0.1.17), Diff gegen das Repo leer.Nicht geprüft
Grenzen / Offen
iris-plugins→ entstehtiris-admin/iris-plugins).PR #300 gemergt: fix(iris-plugin-dev): Tippfehler in der Status-Anzeige des Einstellungs-Fensters (0.1.18, #224)
#300
Commits:
Stand 0.1.18 — Fehler im Einstellungs-Fenster behoben
Befund (Meldung beim ersten Einsatz): „Eigener Forgejo eintragen“ tat nichts, „Speichern“ im manuellen Modus zeigte „Can't find variable: gespeicherterEigener“. Ursache: In
web/settings.html(zeigeStatus) hieß die VariablegespeichertEigener, die Zeile danach schriebgespeicherterEigener— ein Tippfehler seit 0.1.14.zeigeStatusläuft nach Laden, Speichern und „Eigener Forgejo eintragen“; es brach jedes Mal ab (die Server-Seite von „eintragen“ lief durch, nur die Anzeige danach brach).Geändert: Variablenname korrigiert. Neuer Test
StatusAnzeigeTests: führt das Skript der Seite in Node mit Attrappen-Oberfläche aus und ruft die Anzeige für drei Zustände auf (ohne eigenen Forgejo, gespeichert eigener, eigener verfügbar aber manuell). Mit dem alten Tippfehler ist er rot, mit der Korrektur grün. Version 0.1.18, Änderungstext,store/changelog.md, Lessons Learned inPLAN.md.Geprüft: Gesamte Testsuite des Plugins (233 Tests) grün; Gegenprobe mit dem alten Fehler schlägt fehl.
Nicht geprüft: Das echte Fenster in Iris von Hand (Knöpfe „Eigener Forgejo eintragen“, „Speichern“, „Verbindung testen“) — Issue bleibt
status/zu-testen. Der Test läuft nur, wonodeinstalliert ist.Offen: In deinem Screenshot meldet „Verbindung testen“ zusätzlich: „Rechte des Tokens: Das Token hat Admin-Rechte. Ein eigenes Token nur mit Repository- und Issue-Schreibrecht ist sicherer.“ Das ist ein Hinweis, kein Fehler — das gespeicherte Token ist zu mächtig, nicht kaputt.
Veröffentlicht: Plugin „Plugins entwickeln“ (
iris-plugin-dev) 0.1.18plugin-registry, nach dem Pull geprüft); Paketpackages/iris-plugin-dev/iris-plugin-dev-0.1.18.irisplugin.status/zu-testen). Der Hinweis „Token hat Admin-Rechte“ im Verbindungstest ist eine Warnung, kein Fehler.