Geräteverwaltung im Einstellungen-Menü des Remote-Clients, für Mac- und Linux-Server #284

Open
opened 2026-10-31 15:34:46 +00:00 by alf · 13 comments
Owner

Warum

Die Geräteverwaltung (Liste, Sperren, Entfernen, Terminal- und Bildschirm-Freigabe, Token neu erzeugen) gibt es nur im Companion Panel des Mac-Servers. Der Linux-Server hat sie gar nicht, obwohl er dasselbe Wire-Protokoll spricht und auch das Terminal (iris/Iris#274) dort gebraucht wird. Die Verwaltung soll im Einstellungen-Menü des Remote-Clients liegen und gegen beide Server gleich funktionieren.

Entscheidung (Alf, 2026-10-31)

Jedes gekoppelte Gerät darf alles verwalten, auch die Terminal-Freigabe. Begründung: Wer das Token hat, hat ohnehin Zugriff; sobald Alf den Verlust merkt, sperrt er das Gerät. Bewusst in Kauf genommen: Ein gestohlenes Gerät kann sich in der Zwischenzeit selbst das Terminal freigeben. Ergänzend wegen des gemeinsamen Tokens (Sperren per Geräte-ID hält nicht fest): „Token neu erzeugen“ gehört in dasselbe Menü.

Umfang

  • Wire-Protokoll (Entwicklerdokumentation/02-Wire-Protokoll.md): GET /devices, POST /devices/<id>/block|unblock|remove|rename, Freigaben (terminal, remote-desktop), POST /token/regenerate (Antwort mit neuem Token; der aufrufende Client übernimmt es).
  • Mac-Server: Routen auf RegisteredDeviceStore; das Companion Panel bleibt.
  • Linux-Server: Geräteregister (X-Device-ID, Name, zuletzt gesehen, gesperrt, Freigaben) und Durchsetzung der Sperre; danach Terminal dort (PTY im Container, Freigabe über dieselben Routen).
  • Mac-Client (Iris/IrisClient): Abschnitt „Geräte“ im Einstellungen-Menü. iOS: Abschnitt in den Einstellungen.
  • Handbuch: Kapitel Remote-Server und Geräteverwaltung, Terminal-Kapitel.

Etappen

  1. Wire-Protokoll + Mac-Server-Routen + Mac-Client-UI
  2. Linux-Server: Geräteregister und Routen
  3. iOS-UI
  4. Terminal auf dem Linux-Server

Verwandt: iris/Iris#274 (Terminal), iris/2ndbrain-ios#77.

## Warum Die Geräteverwaltung (Liste, Sperren, Entfernen, Terminal- und Bildschirm-Freigabe, Token neu erzeugen) gibt es nur im Companion Panel des Mac-Servers. Der Linux-Server hat sie gar nicht, obwohl er dasselbe Wire-Protokoll spricht und auch das Terminal (iris/Iris#274) dort gebraucht wird. Die Verwaltung soll im Einstellungen-Menü des Remote-Clients liegen und gegen beide Server gleich funktionieren. ## Entscheidung (Alf, 2026-10-31) Jedes gekoppelte Gerät darf alles verwalten, auch die Terminal-Freigabe. Begründung: Wer das Token hat, hat ohnehin Zugriff; sobald Alf den Verlust merkt, sperrt er das Gerät. Bewusst in Kauf genommen: Ein gestohlenes Gerät kann sich in der Zwischenzeit selbst das Terminal freigeben. Ergänzend wegen des gemeinsamen Tokens (Sperren per Geräte-ID hält nicht fest): „Token neu erzeugen“ gehört in dasselbe Menü. ## Umfang - **Wire-Protokoll** (`Entwicklerdokumentation/02-Wire-Protokoll.md`): `GET /devices`, `POST /devices/<id>/block|unblock|remove|rename`, Freigaben (`terminal`, `remote-desktop`), `POST /token/regenerate` (Antwort mit neuem Token; der aufrufende Client übernimmt es). - **Mac-Server:** Routen auf `RegisteredDeviceStore`; das Companion Panel bleibt. - **Linux-Server:** Geräteregister (`X-Device-ID`, Name, zuletzt gesehen, gesperrt, Freigaben) und Durchsetzung der Sperre; danach Terminal dort (PTY im Container, Freigabe über dieselben Routen). - **Mac-Client (Iris/IrisClient):** Abschnitt „Geräte“ im Einstellungen-Menü. **iOS:** Abschnitt in den Einstellungen. - Handbuch: Kapitel Remote-Server und Geräteverwaltung, Terminal-Kapitel. ## Etappen 1. Wire-Protokoll + Mac-Server-Routen + Mac-Client-UI 2. Linux-Server: Geräteregister und Routen 3. iOS-UI 4. Terminal auf dem Linux-Server Verwandt: iris/Iris#274 (Terminal), iris/2ndbrain-ios#77.
Author
Owner

PR #141 gemergt: docs(wire): Geräteverwaltung /devices (iris/Iris#284)
http://docker:3000/alf/2ndbrain/pulls/141

Commits:


Stand: Etappe 1 – Mac-Server-Routen und Geräte-Fenster im Mac-Client

Geändert

  • Mac-Server: GET /devices und POST /devices/<id>/block|unblock|remove|rename|terminal|remote-desktop auf dem vorhandenen RegisteredDeviceStore (gleiche Wirkung wie im Companion Panel, Entzug des Terminals beendet die Sitzungen). Eigenes Gerät sperren/entfernen → 409.
  • Mac-Client: RemoteDevices.swift (Client + Sheet „Geräte“: Terminal-, Bildschirm-, Sperr-, Entfernen-Knopf), Eintrag „Geräte“ im Einstellungen-Menü.
  • Wire-Protokoll um den Abschnitt „Geräteverwaltung“ ergänzt (Entwicklerdokumentation/02-Wire-Protokoll.md).

Geprüft: Xcode-Build des Schemas Iris (erfolgreich; ein erster Lauf direkt nach dem Anlegen der Datei meldete Fehler ohne Fehlerzeile, der zweite lief durch).

Nicht geprüft: Alles zur Laufzeit (Liste, Schalter, Sperren, Entfernen, Dialog); Build von IrisClient; die Routen gegen den laufenden Server.

Offen: „Token neu erzeugen“ (Rückgabe des neuen Tokens an den aufrufenden Client, Profil aktualisieren), Linux-Server (Etappe 2), iOS (Etappe 3), Terminal auf Linux (Etappe 4), Handbuch.

PR #141 gemergt: docs(wire): Geräteverwaltung /devices (iris/Iris#284) http://docker:3000/alf/2ndbrain/pulls/141 Commits: - docs(wire): Geräteverwaltung /devices (iris/Iris#284) --- **Stand: Etappe 1 – Mac-Server-Routen und Geräte-Fenster im Mac-Client** **Geändert** - Mac-Server: `GET /devices` und `POST /devices/<id>/block|unblock|remove|rename|terminal|remote-desktop` auf dem vorhandenen `RegisteredDeviceStore` (gleiche Wirkung wie im Companion Panel, Entzug des Terminals beendet die Sitzungen). Eigenes Gerät sperren/entfernen → 409. - Mac-Client: `RemoteDevices.swift` (Client + Sheet „Geräte“: Terminal-, Bildschirm-, Sperr-, Entfernen-Knopf), Eintrag „Geräte“ im Einstellungen-Menü. - Wire-Protokoll um den Abschnitt „Geräteverwaltung“ ergänzt (`Entwicklerdokumentation/02-Wire-Protokoll.md`). **Geprüft:** Xcode-Build des Schemas Iris (erfolgreich; ein erster Lauf direkt nach dem Anlegen der Datei meldete Fehler ohne Fehlerzeile, der zweite lief durch). **Nicht geprüft:** Alles zur Laufzeit (Liste, Schalter, Sperren, Entfernen, Dialog); Build von IrisClient; die Routen gegen den laufenden Server. **Offen:** „Token neu erzeugen“ (Rückgabe des neuen Tokens an den aufrufenden Client, Profil aktualisieren), Linux-Server (Etappe 2), iOS (Etappe 3), Terminal auf Linux (Etappe 4), Handbuch.
Author
Owner

PR #285 gemergt: feat(devices): Geräteverwaltung im Mac-Server und im Einstellungen-Menü des Mac-Clients (iris/Iris#284)
http://docker:3000/iris/Iris/pulls/285

Commits:

  • feat(devices): Geräteverwaltung im Mac-Server und im Einstellungen-Menü des Mac-Clients (iris/Iris#284)

Stand: Etappe 1 – Mac-Server-Routen und Geräte-Fenster im Mac-Client

Geändert

  • Mac-Server: GET /devices und POST /devices/<id>/block|unblock|remove|rename|terminal|remote-desktop auf dem vorhandenen RegisteredDeviceStore (gleiche Wirkung wie im Companion Panel, Entzug des Terminals beendet die Sitzungen). Eigenes Gerät sperren/entfernen → 409.
  • Mac-Client: RemoteDevices.swift (Client + Sheet „Geräte“: Terminal-, Bildschirm-, Sperr-, Entfernen-Knopf), Eintrag „Geräte“ im Einstellungen-Menü.
  • Wire-Protokoll um den Abschnitt „Geräteverwaltung“ ergänzt (Entwicklerdokumentation/02-Wire-Protokoll.md).

Geprüft: Xcode-Build des Schemas Iris (erfolgreich; ein erster Lauf direkt nach dem Anlegen der Datei meldete Fehler ohne Fehlerzeile, der zweite lief durch).

Nicht geprüft: Alles zur Laufzeit (Liste, Schalter, Sperren, Entfernen, Dialog); Build von IrisClient; die Routen gegen den laufenden Server.

Offen: „Token neu erzeugen“ (Rückgabe des neuen Tokens an den aufrufenden Client, Profil aktualisieren), Linux-Server (Etappe 2), iOS (Etappe 3), Terminal auf Linux (Etappe 4), Handbuch.

PR #285 gemergt: feat(devices): Geräteverwaltung im Mac-Server und im Einstellungen-Menü des Mac-Clients (iris/Iris#284) http://docker:3000/iris/Iris/pulls/285 Commits: - feat(devices): Geräteverwaltung im Mac-Server und im Einstellungen-Menü des Mac-Clients (iris/Iris#284) --- **Stand: Etappe 1 – Mac-Server-Routen und Geräte-Fenster im Mac-Client** **Geändert** - Mac-Server: `GET /devices` und `POST /devices/<id>/block|unblock|remove|rename|terminal|remote-desktop` auf dem vorhandenen `RegisteredDeviceStore` (gleiche Wirkung wie im Companion Panel, Entzug des Terminals beendet die Sitzungen). Eigenes Gerät sperren/entfernen → 409. - Mac-Client: `RemoteDevices.swift` (Client + Sheet „Geräte“: Terminal-, Bildschirm-, Sperr-, Entfernen-Knopf), Eintrag „Geräte“ im Einstellungen-Menü. - Wire-Protokoll um den Abschnitt „Geräteverwaltung“ ergänzt (`Entwicklerdokumentation/02-Wire-Protokoll.md`). **Geprüft:** Xcode-Build des Schemas Iris (erfolgreich; ein erster Lauf direkt nach dem Anlegen der Datei meldete Fehler ohne Fehlerzeile, der zweite lief durch). **Nicht geprüft:** Alles zur Laufzeit (Liste, Schalter, Sperren, Entfernen, Dialog); Build von IrisClient; die Routen gegen den laufenden Server. **Offen:** „Token neu erzeugen“ (Rückgabe des neuen Tokens an den aufrufenden Client, Profil aktualisieren), Linux-Server (Etappe 2), iOS (Etappe 3), Terminal auf Linux (Etappe 4), Handbuch.
Author
Owner

PR #132 gemergt: feat(devices): Geräteregister und /devices-Routen im Linux-Server (iris/Iris#284)
http://docker:3000/iris/iris-linux-server/pulls/132

Commits:

  • feat(devices): Geräteregister und /devices-Routen im Linux-Server (iris/Iris#284)

Stand: Etappe 2 – Linux-Server: Geräteregister und Routen

Geändert

  • device_store.py: Register unter /data/devices.json (Name, zuletzt gesehen, gesperrt, Terminal-Freigabe), last_seen höchstens alle 30 s geschrieben.
  • Middleware track_devices (main.py): Anfragen mit gültigem Token und X-Device-ID tragen das Gerät ein; gesperrte Geräte bekommen 403 {"error": "Device blocked"} auch mit gültigem Token (wie auf dem Mac). /health bleibt frei.
  • device_routes.py: GET /devices, POST /devices/<id>/block|unblock|remove|rename|terminal, Antworten und Fehlerform wie der Mac-Server ({"error": …}); eigenes Gerät sperren/entfernen → 409; remote-desktop → 400 (gibt es auf Linux nicht). Sperren entzieht auch die Terminal-Freigabe.

Geprüft

  • tests/test_devices.py (7 Tests) und test_health_and_auth.py gegen den Dev-Host alf@iris-server nach rsync-Deploy: 12 passed. Nur Wegwerf-Geräte (pytest-device-…) angelegt und wieder entfernt.

Nicht geprüft

  • Das Zusammenspiel mit den Clients (Mac-Client-Sheet gegen diesen Server, iOS).
  • Verhalten über Neustart des Containers hinweg (Datei liegt in /data, nur gelesen).

Offen: iOS-UI (Etappe 3), Terminal auf dem Linux-Server (Etappe 4, nutzt terminal_allowed), „Token neu erzeugen“, Handbuch.

PR #132 gemergt: feat(devices): Geräteregister und /devices-Routen im Linux-Server (iris/Iris#284) http://docker:3000/iris/iris-linux-server/pulls/132 Commits: - feat(devices): Geräteregister und /devices-Routen im Linux-Server (iris/Iris#284) --- **Stand: Etappe 2 – Linux-Server: Geräteregister und Routen** **Geändert** - `device_store.py`: Register unter `/data/devices.json` (Name, zuletzt gesehen, gesperrt, Terminal-Freigabe), `last_seen` höchstens alle 30 s geschrieben. - Middleware `track_devices` (`main.py`): Anfragen mit gültigem Token und `X-Device-ID` tragen das Gerät ein; gesperrte Geräte bekommen 403 `{"error": "Device blocked"}` auch mit gültigem Token (wie auf dem Mac). `/health` bleibt frei. - `device_routes.py`: `GET /devices`, `POST /devices/<id>/block|unblock|remove|rename|terminal`, Antworten und Fehlerform wie der Mac-Server (`{"error": …}`); eigenes Gerät sperren/entfernen → 409; `remote-desktop` → 400 (gibt es auf Linux nicht). Sperren entzieht auch die Terminal-Freigabe. **Geprüft** - `tests/test_devices.py` (7 Tests) und `test_health_and_auth.py` gegen den Dev-Host `alf@iris-server` nach rsync-Deploy: 12 passed. Nur Wegwerf-Geräte (`pytest-device-…`) angelegt und wieder entfernt. **Nicht geprüft** - Das Zusammenspiel mit den Clients (Mac-Client-Sheet gegen diesen Server, iOS). - Verhalten über Neustart des Containers hinweg (Datei liegt in `/data`, nur gelesen). **Offen:** iOS-UI (Etappe 3), Terminal auf dem Linux-Server (Etappe 4, nutzt `terminal_allowed`), „Token neu erzeugen“, Handbuch.
Author
Owner

PR #81 gemergt: feat(devices): Geräteverwaltung in den Einstellungen (iris/Iris#284)
http://docker:3000/iris/2ndbrain-ios/pulls/81

Commits:

  • feat(devices): Geräteverwaltung in den Einstellungen (iris/Iris#284)

Stand: Etappe 3 – iOS: Geräte in den Einstellungen

Geändert: DevicesSupport.swift (Client für GET /devices, POST /devices/<id>/<aktion> und die Ansicht DevicesView): Liste mit Name, zuletzt gesehen, Hinweisen „dieses Gerät“/„gesperrt“, Schalter „Terminal erlauben“, Wischen für Sperren/Entsperren/Entfernen (Bestätigung beim Entfernen; das eigene Gerät lässt sich nicht sperren oder entfernen). Einstieg: Einstellungen → „Geräte verwalten“. Gilt für Mac- und Linux-Server.

Geprüft: Build für den iOS-Simulator.
Nicht geprüft: Alles auf dem Gerät; die Ansicht gegen den Linux-Server und gegen den Mac-Server.

PR #81 gemergt: feat(devices): Geräteverwaltung in den Einstellungen (iris/Iris#284) http://docker:3000/iris/2ndbrain-ios/pulls/81 Commits: - feat(devices): Geräteverwaltung in den Einstellungen (iris/Iris#284) --- **Stand: Etappe 3 – iOS: Geräte in den Einstellungen** **Geändert:** `DevicesSupport.swift` (Client für `GET /devices`, `POST /devices/<id>/<aktion>` und die Ansicht `DevicesView`): Liste mit Name, zuletzt gesehen, Hinweisen „dieses Gerät“/„gesperrt“, Schalter „Terminal erlauben“, Wischen für Sperren/Entsperren/Entfernen (Bestätigung beim Entfernen; das eigene Gerät lässt sich nicht sperren oder entfernen). Einstieg: Einstellungen → „Geräte verwalten“. Gilt für Mac- und Linux-Server. **Geprüft:** Build für den iOS-Simulator. **Nicht geprüft:** Alles auf dem Gerät; die Ansicht gegen den Linux-Server und gegen den Mac-Server.
Author
Owner

PR #133 gemergt: feat(terminal): Terminal auf dem Linux-Server mit Freigabe je Gerät (iris/Iris#284)
http://docker:3000/iris/iris-linux-server/pulls/133

Commits:

  • feat(terminal): Terminal auf dem Linux-Server mit Freigabe je Gerät (iris/Iris#284)

Stand: Etappe 4 – Terminal auf dem Linux-Server

Geändert

  • terminal_host.py: Sitzungen an einer Pseudo-Konsole (openpty + setsid -c), 1-MiB-Ringpuffer, Long-Poll-Lesen mit Offset und reset, Besitzer = Geräte-ID, max. 8 Sitzungen, Ende nach 30 min Leerlauf, beendete Sitzungen bleiben 5 min.
  • terminal_routes.py: /terminal/access|open|list|<id>/read|write|resize|close und die öffentliche Seite /terminal/ui/… mit denselben Antwortformen wie der Mac-Server; Zugang nur mit Token und Freigabe des Geräts (403 sonst), Loopback ausgenommen.
  • Freigabe über die Geräteverwaltung (POST /devices/<id>/terminal); Entziehen, Sperren und Entfernen beenden die Sitzungen des Geräts.
  • app/terminal_web/: Kopie der Terminal-Seite (HTML/JS/CSS, xterm.js) aus frontend/macos-iris/Iris/Resources/ — bei Änderungen dort muss die Kopie nachgezogen werden.
  • Freie Shell: /bin/bash -il als Container-User iris. Claude Code nur, wenn claude im Image liegt (derzeit nicht): sonst 400 „nicht installiert“.

Geprüft: tests/test_terminal.py (5) und tests/test_devices.py (7) gegen den Dev-Host alf@iris-server nach rsync-Deploy: 12 passed — u. a. Shell-Rundlauf mit Rechenergebnis, Größe 30×100, Wieder-Anhängen mit Verlauf, fremde Sitzung → 404, Entzug beendet die Sitzung, Seite öffentlich mit CSP.

Nicht geprüft

  • Mit den echten Clients (iPhone, Mac-Client) gegen den Linux-Server; Claude Code auf Linux (nicht im Image).
  • Verhalten bei Neustart des Containers (Sitzungen enden, wie auf dem Mac beim Beenden der App).

Hinweis zur Sicherheit: Der Container-User hat über die Compose-Gruppe Zugriff auf /var/run/docker.sock. Wer eine Shell im Container hat, kann damit Docker auf dem Host steuern, das ist faktisch Root auf dem Host. Die Freigabe je Gerät ist deshalb die einzige Schranke.

PR #133 gemergt: feat(terminal): Terminal auf dem Linux-Server mit Freigabe je Gerät (iris/Iris#284) http://docker:3000/iris/iris-linux-server/pulls/133 Commits: - feat(terminal): Terminal auf dem Linux-Server mit Freigabe je Gerät (iris/Iris#284) --- **Stand: Etappe 4 – Terminal auf dem Linux-Server** **Geändert** - `terminal_host.py`: Sitzungen an einer Pseudo-Konsole (`openpty` + `setsid -c`), 1-MiB-Ringpuffer, Long-Poll-Lesen mit Offset und `reset`, Besitzer = Geräte-ID, max. 8 Sitzungen, Ende nach 30 min Leerlauf, beendete Sitzungen bleiben 5 min. - `terminal_routes.py`: `/terminal/access|open|list|<id>/read|write|resize|close` und die öffentliche Seite `/terminal/ui/…` mit denselben Antwortformen wie der Mac-Server; Zugang nur mit Token **und** Freigabe des Geräts (403 sonst), Loopback ausgenommen. - Freigabe über die Geräteverwaltung (`POST /devices/<id>/terminal`); Entziehen, Sperren und Entfernen beenden die Sitzungen des Geräts. - `app/terminal_web/`: Kopie der Terminal-Seite (HTML/JS/CSS, xterm.js) aus `frontend/macos-iris/Iris/Resources/` — bei Änderungen dort muss die Kopie nachgezogen werden. - Freie Shell: `/bin/bash -il` als Container-User `iris`. Claude Code nur, wenn `claude` im Image liegt (derzeit nicht): sonst 400 „nicht installiert“. **Geprüft:** `tests/test_terminal.py` (5) und `tests/test_devices.py` (7) gegen den Dev-Host `alf@iris-server` nach rsync-Deploy: 12 passed — u. a. Shell-Rundlauf mit Rechenergebnis, Größe 30×100, Wieder-Anhängen mit Verlauf, fremde Sitzung → 404, Entzug beendet die Sitzung, Seite öffentlich mit CSP. **Nicht geprüft** - Mit den echten Clients (iPhone, Mac-Client) gegen den Linux-Server; Claude Code auf Linux (nicht im Image). - Verhalten bei Neustart des Containers (Sitzungen enden, wie auf dem Mac beim Beenden der App). **Hinweis zur Sicherheit:** Der Container-User hat über die Compose-Gruppe Zugriff auf `/var/run/docker.sock`. Wer eine Shell im Container hat, kann damit Docker auf dem Host steuern, das ist faktisch Root auf dem Host. Die Freigabe je Gerät ist deshalb die einzige Schranke.
Author
Owner

PR #142 gemergt: docs(wire): Terminal auf dem Linux-Server (iris/Iris#284)
http://docker:3000/alf/2ndbrain/pulls/142

Commits:


Stand: Dokumentation zur Geräteverwaltung und zum Linux-Terminal

  • Wire-Protokoll: Abschnitt „Terminal“ um den Linux-Server ergänzt (gleiche Routen, Shell im Container, Claude nur wenn installiert, Seite als Kopie unter app/terminal_web/).
  • Handbuch: Kapitel „Terminal auf iPhone und Mac-Client“ (beide Server, Freigabe an drei Stellen, Sicherheitshinweis zur Selbstfreigabe und zum Docker-Zugriff auf Linux) und Abschnitt „Geräte vom Client aus verwalten“ im Kapitel Remote-Server und Geräteverwaltung. BENUTZERHANDBUCH.md und HTML-Site neu gebaut.

Nicht geprüft: Darstellung in der App.
Offen in iris/Iris#284: „Token neu erzeugen“ aus dem Client; Prüfung aller Teile von Hand.

PR #142 gemergt: docs(wire): Terminal auf dem Linux-Server (iris/Iris#284) http://docker:3000/alf/2ndbrain/pulls/142 Commits: - docs(wire): Terminal auf dem Linux-Server (iris/Iris#284) --- **Stand: Dokumentation zur Geräteverwaltung und zum Linux-Terminal** - Wire-Protokoll: Abschnitt „Terminal“ um den Linux-Server ergänzt (gleiche Routen, Shell im Container, Claude nur wenn installiert, Seite als Kopie unter `app/terminal_web/`). - Handbuch: Kapitel „Terminal auf iPhone und Mac-Client“ (beide Server, Freigabe an drei Stellen, Sicherheitshinweis zur Selbstfreigabe und zum Docker-Zugriff auf Linux) und Abschnitt „Geräte vom Client aus verwalten“ im Kapitel Remote-Server und Geräteverwaltung. `BENUTZERHANDBUCH.md` und HTML-Site neu gebaut. **Nicht geprüft:** Darstellung in der App. **Offen in iris/Iris#284:** „Token neu erzeugen“ aus dem Client; Prüfung aller Teile von Hand.
Author
Owner

PR #286 gemergt: docs(handbuch): Terminal auf beiden Servern, Geräte im Client verwalten (iris/Iris#284)
http://docker:3000/iris/Iris/pulls/286

Commits:

  • docs(handbuch): Terminal auf beiden Servern, Geräte im Client verwalten (iris/Iris#284)

Stand: Dokumentation zur Geräteverwaltung und zum Linux-Terminal

  • Wire-Protokoll: Abschnitt „Terminal“ um den Linux-Server ergänzt (gleiche Routen, Shell im Container, Claude nur wenn installiert, Seite als Kopie unter app/terminal_web/).
  • Handbuch: Kapitel „Terminal auf iPhone und Mac-Client“ (beide Server, Freigabe an drei Stellen, Sicherheitshinweis zur Selbstfreigabe und zum Docker-Zugriff auf Linux) und Abschnitt „Geräte vom Client aus verwalten“ im Kapitel Remote-Server und Geräteverwaltung. BENUTZERHANDBUCH.md und HTML-Site neu gebaut.

Nicht geprüft: Darstellung in der App.
Offen in iris/Iris#284: „Token neu erzeugen“ aus dem Client; Prüfung aller Teile von Hand.

PR #286 gemergt: docs(handbuch): Terminal auf beiden Servern, Geräte im Client verwalten (iris/Iris#284) http://docker:3000/iris/Iris/pulls/286 Commits: - docs(handbuch): Terminal auf beiden Servern, Geräte im Client verwalten (iris/Iris#284) --- **Stand: Dokumentation zur Geräteverwaltung und zum Linux-Terminal** - Wire-Protokoll: Abschnitt „Terminal“ um den Linux-Server ergänzt (gleiche Routen, Shell im Container, Claude nur wenn installiert, Seite als Kopie unter `app/terminal_web/`). - Handbuch: Kapitel „Terminal auf iPhone und Mac-Client“ (beide Server, Freigabe an drei Stellen, Sicherheitshinweis zur Selbstfreigabe und zum Docker-Zugriff auf Linux) und Abschnitt „Geräte vom Client aus verwalten“ im Kapitel Remote-Server und Geräteverwaltung. `BENUTZERHANDBUCH.md` und HTML-Site neu gebaut. **Nicht geprüft:** Darstellung in der App. **Offen in iris/Iris#284:** „Token neu erzeugen“ aus dem Client; Prüfung aller Teile von Hand.
Author
Owner

PR #82 gemergt: feat(devices): alle Aktionen sichtbar, Bildschirmfreigabe und Umbenennen (iris/Iris#284)
http://docker:3000/iris/2ndbrain-ios/pulls/82

Commits:

  • feat(devices): alle Aktionen sichtbar, Bildschirmfreigabe und Umbenennen (iris/Iris#284)

Stand: Geräteverwaltung mit vollem Umfang (Rückmeldung nach dem Test)

Befund (Alf): Auf dem iPhone ließ sich nur das Terminal ein- und ausschalten; Sperren und Entfernen steckten als Wischgesten, die Bildschirmfreigabe fehlte.

Geändert

  • iOS: Zeile je Gerät mit Schaltern „Terminal erlauben“ und „Bildschirmfreigabe erlauben“ (nur beim Mac-Server) sowie sichtbaren Knöpfen Umbenennen, Sperren/Entsperren, Entfernen (mit Bestätigung); das eigene Gerät lässt sich nicht sperren oder entfernen.
  • Mac-Client: Umbenennen im Sheet „Geräte“ ergänzt (Terminal, Bildschirm, Sperren, Entfernen waren schon da).

Geprüft: iOS-Simulator-Build, Xcode-Build des Schemas Iris.
Nicht geprüft: Gerät; Bildschirmfreigabe-Schalter gegen den Mac-Server.

PR #82 gemergt: feat(devices): alle Aktionen sichtbar, Bildschirmfreigabe und Umbenennen (iris/Iris#284) http://docker:3000/iris/2ndbrain-ios/pulls/82 Commits: - feat(devices): alle Aktionen sichtbar, Bildschirmfreigabe und Umbenennen (iris/Iris#284) --- **Stand: Geräteverwaltung mit vollem Umfang (Rückmeldung nach dem Test)** **Befund (Alf):** Auf dem iPhone ließ sich nur das Terminal ein- und ausschalten; Sperren und Entfernen steckten als Wischgesten, die Bildschirmfreigabe fehlte. **Geändert** - iOS: Zeile je Gerät mit Schaltern „Terminal erlauben“ und „Bildschirmfreigabe erlauben“ (nur beim Mac-Server) sowie sichtbaren Knöpfen Umbenennen, Sperren/Entsperren, Entfernen (mit Bestätigung); das eigene Gerät lässt sich nicht sperren oder entfernen. - Mac-Client: Umbenennen im Sheet „Geräte“ ergänzt (Terminal, Bildschirm, Sperren, Entfernen waren schon da). **Geprüft:** iOS-Simulator-Build, Xcode-Build des Schemas Iris. **Nicht geprüft:** Gerät; Bildschirmfreigabe-Schalter gegen den Mac-Server.
Author
Owner

PR #287 gemergt: feat(devices): Umbenennen im Geräte-Sheet (iris/Iris#284)
http://docker:3000/iris/Iris/pulls/287

Commits:


Stand: Geräteverwaltung mit vollem Umfang (Rückmeldung nach dem Test)

Befund (Alf): Auf dem iPhone ließ sich nur das Terminal ein- und ausschalten; Sperren und Entfernen steckten als Wischgesten, die Bildschirmfreigabe fehlte.

Geändert

  • iOS: Zeile je Gerät mit Schaltern „Terminal erlauben“ und „Bildschirmfreigabe erlauben“ (nur beim Mac-Server) sowie sichtbaren Knöpfen Umbenennen, Sperren/Entsperren, Entfernen (mit Bestätigung); das eigene Gerät lässt sich nicht sperren oder entfernen.
  • Mac-Client: Umbenennen im Sheet „Geräte“ ergänzt (Terminal, Bildschirm, Sperren, Entfernen waren schon da).

Geprüft: iOS-Simulator-Build, Xcode-Build des Schemas Iris.
Nicht geprüft: Gerät; Bildschirmfreigabe-Schalter gegen den Mac-Server.

PR #287 gemergt: feat(devices): Umbenennen im Geräte-Sheet (iris/Iris#284) http://docker:3000/iris/Iris/pulls/287 Commits: - feat(devices): Umbenennen im Geräte-Sheet (iris/Iris#284) --- **Stand: Geräteverwaltung mit vollem Umfang (Rückmeldung nach dem Test)** **Befund (Alf):** Auf dem iPhone ließ sich nur das Terminal ein- und ausschalten; Sperren und Entfernen steckten als Wischgesten, die Bildschirmfreigabe fehlte. **Geändert** - iOS: Zeile je Gerät mit Schaltern „Terminal erlauben“ und „Bildschirmfreigabe erlauben“ (nur beim Mac-Server) sowie sichtbaren Knöpfen Umbenennen, Sperren/Entsperren, Entfernen (mit Bestätigung); das eigene Gerät lässt sich nicht sperren oder entfernen. - Mac-Client: Umbenennen im Sheet „Geräte“ ergänzt (Terminal, Bildschirm, Sperren, Entfernen waren schon da). **Geprüft:** iOS-Simulator-Build, Xcode-Build des Schemas Iris. **Nicht geprüft:** Gerät; Bildschirmfreigabe-Schalter gegen den Mac-Server.
Author
Owner

PR #134 gemergt: feat(devices): Token-Rotation bei Sperren und Entfernen (iris/Iris#284)
http://docker:3000/iris/iris-linux-server/pulls/134

Commits:

  • feat(devices): Token-Rotation bei Sperren und Entfernen (iris/Iris#284)

Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)

Ablauf: Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (pending, nach X-Device-ID), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). GET /health meldet token_epoch; ein Client mit abweichender Epoche holt mit dem alten Token das neue über GET /auth/token (nur für pending-Geräte, sonst null). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. POST /auth/rotate wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). {"rotate": false} bei block/remove lässt die Rotation aus.

Geändert

  • Mac-Server: TokenRotation.swift, isAuthorized mit Übergangsregel, /auth/token, /auth/rotate, token_epoch in /health; Companion „Regenerate token“ nutzt die Rotation.
  • Linux-Server: token_rotation.py, device_middleware.py (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), /auth/token, /auth/rotate, token_epoch.
  • Clients: Mac-Client (followTokenRotation, Profil wird aktualisiert) und iOS (TokenRotationSupport.swift, Profil über Benachrichtigung aktualisiert).
  • Wire-Protokoll und Handbuch.

Geprüft

  • Linux: tests/test_token_rotation_local.py (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar).
  • Builds: Xcode-Schema Iris, iOS-Simulator.

Nicht geprüft

  • Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an).
  • Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden.

Vorfall: Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts alf@iris-server zweimal gewechselt, bevor es rotate: false gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen rotate: false, der Rotationstest läuft nur lokal.

PR #134 gemergt: feat(devices): Token-Rotation bei Sperren und Entfernen (iris/Iris#284) http://docker:3000/iris/iris-linux-server/pulls/134 Commits: - feat(devices): Token-Rotation bei Sperren und Entfernen (iris/Iris#284) --- **Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)** **Ablauf:** Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (`pending`, nach `X-Device-ID`), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). `GET /health` meldet `token_epoch`; ein Client mit abweichender Epoche holt mit dem alten Token das neue über `GET /auth/token` (nur für `pending`-Geräte, sonst `null`). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. `POST /auth/rotate` wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). `{"rotate": false}` bei `block`/`remove` lässt die Rotation aus. **Geändert** - Mac-Server: `TokenRotation.swift`, `isAuthorized` mit Übergangsregel, `/auth/token`, `/auth/rotate`, `token_epoch` in `/health`; Companion „Regenerate token“ nutzt die Rotation. - Linux-Server: `token_rotation.py`, `device_middleware.py` (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), `/auth/token`, `/auth/rotate`, `token_epoch`. - Clients: Mac-Client (`followTokenRotation`, Profil wird aktualisiert) und iOS (`TokenRotationSupport.swift`, Profil über Benachrichtigung aktualisiert). - Wire-Protokoll und Handbuch. **Geprüft** - Linux: `tests/test_token_rotation_local.py` (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar). - Builds: Xcode-Schema Iris, iOS-Simulator. **Nicht geprüft** - Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an). - Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden. **Vorfall:** Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts `alf@iris-server` zweimal gewechselt, bevor es `rotate: false` gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen `rotate: false`, der Rotationstest läuft nur lokal.
Author
Owner

PR #83 gemergt: feat(devices): Token-Rotation folgen und Token neu erzeugen (iris/Iris#284)
http://docker:3000/iris/2ndbrain-ios/pulls/83

Commits:

  • feat(devices): Token-Rotation folgen und Token neu erzeugen (iris/Iris#284)

Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)

Ablauf: Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (pending, nach X-Device-ID), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). GET /health meldet token_epoch; ein Client mit abweichender Epoche holt mit dem alten Token das neue über GET /auth/token (nur für pending-Geräte, sonst null). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. POST /auth/rotate wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). {"rotate": false} bei block/remove lässt die Rotation aus.

Geändert

  • Mac-Server: TokenRotation.swift, isAuthorized mit Übergangsregel, /auth/token, /auth/rotate, token_epoch in /health; Companion „Regenerate token“ nutzt die Rotation.
  • Linux-Server: token_rotation.py, device_middleware.py (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), /auth/token, /auth/rotate, token_epoch.
  • Clients: Mac-Client (followTokenRotation, Profil wird aktualisiert) und iOS (TokenRotationSupport.swift, Profil über Benachrichtigung aktualisiert).
  • Wire-Protokoll und Handbuch.

Geprüft

  • Linux: tests/test_token_rotation_local.py (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar).
  • Builds: Xcode-Schema Iris, iOS-Simulator.

Nicht geprüft

  • Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an).
  • Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden.

Vorfall: Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts alf@iris-server zweimal gewechselt, bevor es rotate: false gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen rotate: false, der Rotationstest läuft nur lokal.

PR #83 gemergt: feat(devices): Token-Rotation folgen und Token neu erzeugen (iris/Iris#284) http://docker:3000/iris/2ndbrain-ios/pulls/83 Commits: - feat(devices): Token-Rotation folgen und Token neu erzeugen (iris/Iris#284) --- **Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)** **Ablauf:** Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (`pending`, nach `X-Device-ID`), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). `GET /health` meldet `token_epoch`; ein Client mit abweichender Epoche holt mit dem alten Token das neue über `GET /auth/token` (nur für `pending`-Geräte, sonst `null`). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. `POST /auth/rotate` wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). `{"rotate": false}` bei `block`/`remove` lässt die Rotation aus. **Geändert** - Mac-Server: `TokenRotation.swift`, `isAuthorized` mit Übergangsregel, `/auth/token`, `/auth/rotate`, `token_epoch` in `/health`; Companion „Regenerate token“ nutzt die Rotation. - Linux-Server: `token_rotation.py`, `device_middleware.py` (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), `/auth/token`, `/auth/rotate`, `token_epoch`. - Clients: Mac-Client (`followTokenRotation`, Profil wird aktualisiert) und iOS (`TokenRotationSupport.swift`, Profil über Benachrichtigung aktualisiert). - Wire-Protokoll und Handbuch. **Geprüft** - Linux: `tests/test_token_rotation_local.py` (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar). - Builds: Xcode-Schema Iris, iOS-Simulator. **Nicht geprüft** - Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an). - Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden. **Vorfall:** Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts `alf@iris-server` zweimal gewechselt, bevor es `rotate: false` gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen `rotate: false`, der Rotationstest läuft nur lokal.
Author
Owner

PR #288 gemergt: feat(devices): Token-Rotation im Mac-Server und -Client (iris/Iris#284)
http://docker:3000/iris/Iris/pulls/288

Commits:

  • feat(devices): Token-Rotation im Mac-Server und -Client (iris/Iris#284)

Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)

Ablauf: Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (pending, nach X-Device-ID), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). GET /health meldet token_epoch; ein Client mit abweichender Epoche holt mit dem alten Token das neue über GET /auth/token (nur für pending-Geräte, sonst null). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. POST /auth/rotate wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). {"rotate": false} bei block/remove lässt die Rotation aus.

Geändert

  • Mac-Server: TokenRotation.swift, isAuthorized mit Übergangsregel, /auth/token, /auth/rotate, token_epoch in /health; Companion „Regenerate token“ nutzt die Rotation.
  • Linux-Server: token_rotation.py, device_middleware.py (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), /auth/token, /auth/rotate, token_epoch.
  • Clients: Mac-Client (followTokenRotation, Profil wird aktualisiert) und iOS (TokenRotationSupport.swift, Profil über Benachrichtigung aktualisiert).
  • Wire-Protokoll und Handbuch.

Geprüft

  • Linux: tests/test_token_rotation_local.py (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar).
  • Builds: Xcode-Schema Iris, iOS-Simulator.

Nicht geprüft

  • Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an).
  • Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden.

Vorfall: Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts alf@iris-server zweimal gewechselt, bevor es rotate: false gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen rotate: false, der Rotationstest läuft nur lokal.

PR #288 gemergt: feat(devices): Token-Rotation im Mac-Server und -Client (iris/Iris#284) http://docker:3000/iris/Iris/pulls/288 Commits: - feat(devices): Token-Rotation im Mac-Server und -Client (iris/Iris#284) --- **Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)** **Ablauf:** Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (`pending`, nach `X-Device-ID`), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). `GET /health` meldet `token_epoch`; ein Client mit abweichender Epoche holt mit dem alten Token das neue über `GET /auth/token` (nur für `pending`-Geräte, sonst `null`). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. `POST /auth/rotate` wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). `{"rotate": false}` bei `block`/`remove` lässt die Rotation aus. **Geändert** - Mac-Server: `TokenRotation.swift`, `isAuthorized` mit Übergangsregel, `/auth/token`, `/auth/rotate`, `token_epoch` in `/health`; Companion „Regenerate token“ nutzt die Rotation. - Linux-Server: `token_rotation.py`, `device_middleware.py` (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), `/auth/token`, `/auth/rotate`, `token_epoch`. - Clients: Mac-Client (`followTokenRotation`, Profil wird aktualisiert) und iOS (`TokenRotationSupport.swift`, Profil über Benachrichtigung aktualisiert). - Wire-Protokoll und Handbuch. **Geprüft** - Linux: `tests/test_token_rotation_local.py` (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar). - Builds: Xcode-Schema Iris, iOS-Simulator. **Nicht geprüft** - Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an). - Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden. **Vorfall:** Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts `alf@iris-server` zweimal gewechselt, bevor es `rotate: false` gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen `rotate: false`, der Rotationstest läuft nur lokal.
Author
Owner

PR #143 gemergt: docs(wire): Token-Rotation (iris/Iris#284)
http://docker:3000/alf/2ndbrain/pulls/143

Commits:


Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)

Ablauf: Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (pending, nach X-Device-ID), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). GET /health meldet token_epoch; ein Client mit abweichender Epoche holt mit dem alten Token das neue über GET /auth/token (nur für pending-Geräte, sonst null). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. POST /auth/rotate wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). {"rotate": false} bei block/remove lässt die Rotation aus.

Geändert

  • Mac-Server: TokenRotation.swift, isAuthorized mit Übergangsregel, /auth/token, /auth/rotate, token_epoch in /health; Companion „Regenerate token“ nutzt die Rotation.
  • Linux-Server: token_rotation.py, device_middleware.py (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), /auth/token, /auth/rotate, token_epoch.
  • Clients: Mac-Client (followTokenRotation, Profil wird aktualisiert) und iOS (TokenRotationSupport.swift, Profil über Benachrichtigung aktualisiert).
  • Wire-Protokoll und Handbuch.

Geprüft

  • Linux: tests/test_token_rotation_local.py (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar).
  • Builds: Xcode-Schema Iris, iOS-Simulator.

Nicht geprüft

  • Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an).
  • Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden.

Vorfall: Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts alf@iris-server zweimal gewechselt, bevor es rotate: false gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen rotate: false, der Rotationstest läuft nur lokal.

PR #143 gemergt: docs(wire): Token-Rotation (iris/Iris#284) http://docker:3000/alf/2ndbrain/pulls/143 Commits: - docs(wire): Token-Rotation (iris/Iris#284) --- **Stand: Token-Rotation bei Sperren/Entfernen (Entscheidung Alf: Übergangszeit 14 Tage, Knopf „Token neu erzeugen“ ja)** **Ablauf:** Sperren oder Entfernen eines Geräts erzeugt ein neues Bearer-Token. Das alte gilt 14 Tage weiter, aber nur für die Geräte, die bleiben dürfen (`pending`, nach `X-Device-ID`), und für Prozesse auf dem Server selbst (Mac: Loopback; Linux: Loopback und Docker-Netz 172.16/12). `GET /health` meldet `token_epoch`; ein Client mit abweichender Epoche holt mit dem alten Token das neue über `GET /auth/token` (nur für `pending`-Geräte, sonst `null`). Mit der ersten Anfrage mit dem neuen Token gilt das Gerät als umgestellt, sind alle umgestellt, wird das alte vergessen. Das gesperrte Gerät steht nicht auf der Liste und bleibt draußen. `POST /auth/rotate` wechselt ohne Sperre (Knopf „Token neu erzeugen“ im Geräte-Sheet des Mac-Clients, in der iOS-Geräteliste und im Companion Panel). `{"rotate": false}` bei `block`/`remove` lässt die Rotation aus. **Geändert** - Mac-Server: `TokenRotation.swift`, `isAuthorized` mit Übergangsregel, `/auth/token`, `/auth/rotate`, `token_epoch` in `/health`; Companion „Regenerate token“ nutzt die Rotation. - Linux-Server: `token_rotation.py`, `device_middleware.py` (tauscht ein akzeptiertes altes Token gegen das aktuelle, damit die vielen Routen mit eigenem Vergleich nichts wissen müssen), `/auth/token`, `/auth/rotate`, `token_epoch`. - Clients: Mac-Client (`followTokenRotation`, Profil wird aktualisiert) und iOS (`TokenRotationSupport.swift`, Profil über Benachrichtigung aktualisiert). - Wire-Protokoll und Handbuch. **Geprüft** - Linux: `tests/test_token_rotation_local.py` (4 Tests in einer Wegwerf-App: Sperren rotiert, der gesperrte und ein erfundener Gerät-ID bleiben draußen, Telefon und Mac stellen um, das alte Token wird danach abgewiesen, interne Prozesse laufen weiter, Ablauf nach 14 Tagen, eigenes Gerät nicht sperrbar). - Builds: Xcode-Schema Iris, iOS-Simulator. **Nicht geprüft** - Der Ablauf mit den echten Clients (Mac-Client, iPhone) und auf dem Mac-Server; die Mac-Seite hat keinen Test (die Rotation schreibt in die Keychain, das fasse ich nicht automatisiert an). - Clients ohne diese Version (Linux-Client, iris-web) folgen der Rotation nicht und müssen nach 14 Tagen neu gekoppelt werden. **Vorfall:** Meine Live-Tests (Sperren/Entfernen eines Wegwerf-Geräts) haben das Token des Dev-Hosts `alf@iris-server` zweimal gewechselt, bevor es `rotate: false` gab; Mac-Client und iPhone mussten neu gekoppelt werden. Behoben: Live-Tests nutzen `rotate: false`, der Rotationstest läuft nur lokal.
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#284
No description provided.