Zugaenge: die Dienste-Token aus App und Panel bedienbar (2026.9.3.8)
Die Token liegen seit jeher in entry.options, geschrieben vom Options-Flow unter Einstellungen -> Geraete & Dienste -> Konfigurieren. Der Weg bleibt und ist der Rueckfall, wenn die App den Server nicht erreicht - genau der Fall, in dem ein abgelaufener Token auffaellt. Erreichbar ist er aber nur ueber HAs eigene Weboberflaeche; die iOS-App zeigt keine Konfigurationsdialoge. Die neue Kachel ist die Bedienflaeche dafuer, kein zweiter Speicherort. Der Wert kommt nie zurueck: veroeffentlicht werden nur "gesetzt/nicht gesetzt" und die letzten vier Zeichen (unter zwoelf Zeichen Laenge gar nichts). Auch das Protokoll bekommt ihn nicht, und das Panel leert das Eingabefeld sofort nach dem Absenden. Bewusst NICHT im Fahrzeugprofil: sicherung.py sichert fahrzeugprofil.json, und "Backup exportieren" laedt es als Datei auf das Geraet - ein Token dort wanderte in jede Sicherung und jede weitergegebene Datei. Ein Dienst statt zwei: zugang_setzen(dienst, token), leerer Text loescht. In der App nicht ueber die Warteschlange - ein Stunden spaeter nachgereichter Token ueberschriebe womoeglich einen inzwischen eingetragenen neuen. CONF_FLESPI_TOKEN ist neu und noch ohne Leser; der Flespi-Weg zum Auslesen der Geraetekonfiguration ist damit vorbereitet, aber nicht gebaut. Verifiziert: py_compile auf sechs Backend-Dateien, Panel als Modul geparst, companion-app tsc sauber und 179/179, audi_ha_test auf 2026.9.3.8 sauber gestartet. Live am laufenden Panel der ganze Kreis, Container hinterher wie vorgefunden: Wegwerf-Token gesetzt -> "gesetzt . ...0000", der Wert selbst taucht in den veroeffentlichten Attributen nirgends auf (darauf geprueft), ueber die Sicherheitsabfrage geloescht -> wieder "nicht gesetzt", der Gitea-Token unberuehrt. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -28,7 +28,7 @@ from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResu
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.helpers import selector
|
||||
|
||||
from .const import CONF_GITEA_TOKEN, DOMAIN
|
||||
from .const import CONF_FLESPI_TOKEN, CONF_GITEA_TOKEN, DOMAIN
|
||||
|
||||
|
||||
class AudiDashboardConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
@@ -54,10 +54,17 @@ class AudiDashboardConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
class AudiDashboardOptionsFlow(OptionsFlow):
|
||||
"""Einstellungen -> Geräte & Dienste -> Audi Dashboard -> Konfigurieren.
|
||||
|
||||
Ein Feld: der Gitea-Token fürs Selbst-Update. Leer lassen deaktiviert
|
||||
die Update-Prüfung wieder (aktualisierung.py verlangt einen nicht-leeren
|
||||
Zwei Felder, beide freiwillig: der Gitea-Token fürs Selbst-Update und der
|
||||
flespi-Token fürs Auslesen der Geräte-Konfiguration. Leer lassen schaltet
|
||||
die jeweilige Funktion ab (aktualisierung.py verlangt einen nicht-leeren
|
||||
Token, sonst gibt es eine verständliche Fehlermeldung statt eines
|
||||
unbehandelten Fehlers)."""
|
||||
unbehandelten Fehlers).
|
||||
|
||||
Dieser Weg bleibt der Rückfall neben der Kachel „Zugänge" in App und Panel
|
||||
(siehe zugaenge.py): er ist der einzige, der auch dann trägt, wenn die App
|
||||
den Server gerade nicht erreicht - genau der Fall, in dem ein abgelaufener
|
||||
Token auffällt. Beide schreiben in dieselben entry.options, es gibt keinen
|
||||
zweiten Wahrheitsort."""
|
||||
|
||||
async def async_step_init(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
@@ -72,6 +79,9 @@ class AudiDashboardOptionsFlow(OptionsFlow):
|
||||
vol.Optional(CONF_GITEA_TOKEN, default=""): selector.TextSelector(
|
||||
selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD)
|
||||
),
|
||||
vol.Optional(CONF_FLESPI_TOKEN, default=""): selector.TextSelector(
|
||||
selector.TextSelectorConfig(type=selector.TextSelectorType.PASSWORD)
|
||||
),
|
||||
}),
|
||||
self.config_entry.options,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user