From f9cc10433a2fae149ee83799e600c61f8525516d Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 19 Sep 2026 17:16:06 +0200 Subject: [PATCH] feat(satellite): Credential-Store + snmp.ports/info + FritzBox-Reader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Baut SNMP zur generellen Geraete-Auskunft aus und macht Zugangsdaten pro Geraet hinterlegbar, damit der Satellit tiefer lesen kann. Satellit: - Verschluesselter Credential-Store (Fernet) pro IP im Bind-Volume ./data: SNMP (community/v2c oder v3 user/auth/priv), HTTP-Basic, FritzBox-Login. Neue Messages sat_creds_set/list/delete + *_result; Secrets werden NIE zurueckgeliefert (list gibt nur Typen). snmp.*/http/fritzbox nutzen die Creds automatisch (params haben Vorrang). - snmp.ports: ifTable -> aktive/freie Ports, Linkspeed ('sind noch Ports frei'). - snmp.info: sysName/Descr + Entity-MIB Modell/Serial/Firmware (installierte Version; Update-Check ist Hersteller-Sache, kein SNMP). - fritzbox.info/hosts: TR-064 (SOAP+Digest) โ€” Verbindung/Datenrate/externe IP bzw. verbundene Geraete. Bewusst als Reader, weil TR-064 fuer on-the-fly http.post zu fummelig ist. - CONTROL_ALLOWLIST-Default + .env.example erweitert; data/ ge-gitignore-t. RVS: sat_creds_* in ALLOWED_TYPES (sonst verworfen). Diagnostic: pro entdecktem Geraet ein Schluessel-Button -> Modal (SNMP v2c/v3, HTTP-Basic, FritzBox); Speichern/Loeschen via RVS an den Satelliten; gesetzte Typen werden pro Geraet angezeigt (๐Ÿ”‘ โœ“). Server relayed die Cred-Messages. Brain: satellite_command-Tool um snmp.ports/info + fritzbox.* erweitert; ARIA muss keine Passwoerter mitgeben (Satellit nutzt den Store). Co-Authored-By: Claude Opus 4.8 --- aria-brain/agent.py | 12 +- diagnostic/index.html | 145 ++++++++++++- diagnostic/server.js | 17 ++ rvs/server.js | 4 + satellite/.env.example | 13 +- satellite/.gitignore | 3 + satellite/docker-compose.yml | 3 + satellite/requirements.txt | 1 + satellite/satellite.py | 401 +++++++++++++++++++++++++++++++++-- 9 files changed, 582 insertions(+), 17 deletions(-) create mode 100644 satellite/.gitignore diff --git a/aria-brain/agent.py b/aria-brain/agent.py index a83f006..4cc1804 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -1225,9 +1225,17 @@ META_TOOLS = [ "Aktionen: 'wol' (params={'mac':'...'}) zum Aufwecken, " "'snmp.printer' (params={'ip':''}) โ€” BEVORZUGT fuer Drucker-" "Tinte/Toner: liest die Fuellstaende zuverlaessig als Prozent aus der " - "Printer-MIB (kein HTML-Scrapen). 'snmp.get'/'snmp.walk' " + "Printer-MIB (kein HTML-Scrapen). 'snmp.ports' (params={'ip':'...'}) โ€” " + "Switch/Router-Interfaces: aktive/freie Ports + Linkspeed (beantwortet " + "'sind noch Ports frei'). 'snmp.info' (params={'ip':'...'}) โ€” Modell, " + "Seriennummer, INSTALLIERTE Firmware/Software-Version (ob ein Update " + "existiert, weiss SNMP NICHT). 'snmp.get'/'snmp.walk' " "(params={'ip':'...','oid':'...','community':'public'}) fuer beliebige " - "SNMP-Werte. " + "SNMP-Werte. 'fritzbox.info' / 'fritzbox.hosts' (params={'ip':''}) " + "โ€” Internetverbindung/Datenrate/externe IP bzw. verbundene Geraete (braucht " + "hinterlegten FritzBox-Login). Fuer Geraete mit hinterlegten Zugangsdaten " + "(community/v3/Login) nutzt der Satellit diese automatisch โ€” Du musst keine " + "Passwoerter mitgeben. " "'http.get'/'http.post' (params={'url':'...'}) fuer lokale Webhooks UND " "um Geraete-Statusseiten zu lesen (Fallback fuer Tinte, NAS ...). Bei grossen " "Seiten NICHT blind paginieren: setze params['contains'] (String oder " diff --git a/diagnostic/index.html b/diagnostic/index.html index 78b0126..3cc3db6 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -196,6 +196,66 @@ + + +