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:
+19
-5
@@ -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.
|
||||||
|
|
||||||
|
2200–2299 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 2200–2299), 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):
|
||||||
|
|||||||
Reference in New Issue
Block a user