Session-Caching: auch Code 2002 als abgelaufene Session behandeln

Abgelaufene INWX-Sessions liefern beim ersten Aufruf teils Code 2002
("Command use error") statt 2200. call_api() loest die automatische
Neuanmeldung nun auch fuer 2001/2002/2003 aus, sodass der Cache sich
selbst heilt und kein manueller Loeschvorgang mehr noetig ist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 19:36:53 +02:00
parent 68fe254a5e
commit 3a84aea64d
+19 -5
View File
@@ -140,17 +140,31 @@ def get_client():
return api return api
def _is_auth_error(code):
"""True, wenn der INWX-Code auf eine fehlende/abgelaufene Session hindeutet.
22002299 sind die eigentlichen Authentifizierungs-/Autorisierungsfehler.
Zusätzlich liefert INWX bei Aufrufen ohne gültige Session teils Codes aus
dem 2000er-Bereich (z.B. 2002 „Command use error"); auch diese behandeln
wir als abgelaufene Session und melden uns einmal neu an.
"""
if code is None:
return False
if 2200 <= code < 2300:
return True
return code in (2001, 2002, 2003)
def call_api(api, method, params=None): def call_api(api, method, params=None):
"""Wie ApiClient.call_api, meldet sich aber bei abgelaufener Session neu an. """Wie ApiClient.call_api, meldet sich aber bei abgelaufener Session neu an.
Liefert INWX einen Autorisierungsfehler (Code 22002299), wird die Deutet der Rückgabecode auf eine fehlende/abgelaufene Session hin (siehe
zwischengespeicherte Session verworfen, via KeePass neu eingeloggt und _is_auth_error), wird die zwischengespeicherte Session verworfen, via
der Aufruf einmal wiederholt. KeePass neu eingeloggt und der Aufruf einmal wiederholt.
""" """
params = params or {} params = params or {}
res = api.call_api(method, params) res = api.call_api(method, params)
code = res.get('code') if _is_auth_error(res.get('code')):
if code is not None and 2200 <= code < 2300:
print("️ Session abgelaufen, melde neu an...") print("️ Session abgelaufen, melde neu an...")
_clear_cached_session() _clear_cached_session()
if not _do_login(api): if not _do_login(api):