M26+M27: Seriennummer bei Bekannte Router, Schlüsselbund-Trennung, terse-Fallback verallgemeinert

M26: SavedRouter bekommt ein optionales serialNumber-Feld. Zwei
physisch verschiedene Router mit identischem Host+Benutzername
(Werks-Adresse) blieben bisher ein gemeinsamer "Bekannte Router"-
Eintrag; recordSuccessfulConnection matcht jetzt zusätzlich nach
Seriennummer, mit sauberer Migration bestehender Einträge ohne
Seriennummer. Drei neue Tests.

M27, beim Live-Test von M26 gefunden:
- Passwort-Anzeige-Button (Augen-Symbol) im Verbinden-Tab
- Bug 35: KeychainService speicherte Passwörter nur nach
  "username@host" — beide Router teilten sich denselben
  Schlüsselbund-Eintrag trotz getrennter SavedRouter-Einträge. Fix:
  optionaler serialNumber-Parameter qualifiziert den Account-Key,
  mit Fallback auf den alten Key für bereits gespeicherte Passwörter.
- Bug 36: neuer Router zeigte keine Routerboard-Infos/Seriennummer —
  derselbe Root Cause wie der zuvor gemeldete "Jetzt prüfen"-Fehler:
  /system routerboard und /system package update scheitern auf diesem
  Router mit "expected end of command" statt dem bisher einzig
  abgefangenen "bad parameter terse". SSHTransport.fetchMenuItems
  erkennt jetzt beide Formulierungen.

Alles live bestätigt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kay
2026-09-16 14:02:27 +02:00
co-authored by Claude Sonnet 5
parent 8a5df3338a
commit 9de9311bee
11 changed files with 294 additions and 45 deletions
+27 -17
View File
@@ -49,7 +49,9 @@ bleiben unübersetzt.
## 1. Verbinden
- Router-Adresse, Benutzername und Passwort eingeben, verbinden.
- Router-Adresse, Benutzername und Passwort eingeben, verbinden. Ein
Augen-Symbol neben dem Passwortfeld deckt die Eingabe zur Kontrolle
auf.
- Beim ersten Verbinden wird ein unbekanntes Zertifikat (REST-API,
meist der Fall) oder ein unbekannter SSH-Host-Schlüssel (SSH-
Fallback) angezeigt und muss einmalig bestätigt werden
@@ -65,14 +67,17 @@ bleiben unübersetzt.
- Schnell-Backup-Button direkt im Verbinden-Tab.
- "Trennen"-Button beendet die Verbindung sauber.
- **Bekannte Router**: nach jeder erfolgreichen Verbindung merkt sich die
App Host und Benutzername (Passwort bleibt wie gewohnt im macOS-
Schlüsselbund). Anzeigename wird beim ersten Mal automatisch auf die
Hardware-Bezeichnung gesetzt (z.B. "hEX"), lässt sich aber jederzeit
über "Bearbeiten" ändern — dort auch ein freies Standort-Feld (z.B.
"Keller, Serverschrank" oder "1. OG") zur besseren Unterscheidung
mehrerer Router. Klick auf einen Eintrag füllt Host/Benutzername/
Passwort ins Formular, ohne sofort zu verbinden. Ab ca. 4 Einträgen
scrollt die Liste in sich selbst.
App Host, Benutzername und (falls vom Router gemeldet) Seriennummer.
Zwei unterschiedliche Router mit identischem Host+Benutzername (z.B.
beide auf MikroTiks Werks-Adresse 192.168.88.1/admin) bleiben dadurch
getrennte Einträge, erkennbar an der "SN: ..."-Zeile; auch das
gemerkte Passwort wird pro Gerät getrennt gespeichert. Anzeigename
wird beim ersten Mal automatisch auf die Hardware-Bezeichnung gesetzt
(z.B. "hEX"), lässt sich aber jederzeit über "Bearbeiten" ändern —
dort auch ein freies Standort-Feld (z.B. "Keller, Serverschrank" oder
"1. OG") zur besseren Unterscheidung mehrerer Router. Klick auf einen
Eintrag füllt Host/Benutzername/Passwort ins Formular, ohne sofort zu
verbinden. Ab ca. 4 Einträgen scrollt die Liste in sich selbst.
- **Live-Traffic-Anzeige**: der Punkt vor jedem Interface in der
Geräte-Übersicht ist grau (kein Link), grün (Link, aber kein
Datenverkehr) oder pulsierend grün (überträgt gerade tatsächlich
@@ -232,7 +237,8 @@ router (error messages, CLI command lines, live log) stay untranslated.
## 1. Connect
- Enter the router's address, username and password, then connect.
- Enter the router's address, username and password, then connect. An
eye icon next to the password field reveals it for a quick check.
- On the first connection, an unknown certificate (REST API, the usual
case) or an unknown SSH host key (SSH fallback) is shown and must be
confirmed once (trust-on-first-use) — protects against a swapped/
@@ -247,13 +253,17 @@ router (error messages, CLI command lines, live log) stay untranslated.
- Quick-backup button right in the Connect tab.
- "Disconnect" button cleanly ends the session.
- **Known Routers**: after every successful connection, the app remembers
the host and username (the password stays in macOS Keychain as usual).
The display name defaults to the hardware designation (e.g. "hEX") the
first time, but can be changed anytime via "Edit" — which also has a
free-text location field (e.g. "Basement, server rack" or "1st Floor")
to tell multiple routers apart. Clicking an entry fills in host/
username/password without connecting yet. The list scrolls in place
past about 4 entries.
the host, username, and (when the router reports one) serial number.
Two different routers sharing the same host+username (e.g. both left
at MikroTik's factory default 192.168.88.1/admin) stay separate
entries because of this, shown by an "SN: ..." line; the remembered
password is also kept separate per device. The display name defaults
to the hardware designation (e.g. "hEX") the first time, but can be
changed anytime via "Edit" — which also has a free-text location
field (e.g. "Basement, server rack" or "1st Floor") to tell multiple
routers apart. Clicking an entry fills in host/username/password
without connecting yet. The list scrolls in place past about 4
entries.
- **Live traffic indicator**: the dot in front of each interface in the
device overview is grey (no link), green (link but no traffic), or
pulsing green (actually carrying data right now).