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
|
||||
|
||||
|
||||
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):
|
||||
"""Wie ApiClient.call_api, meldet sich aber bei abgelaufener Session neu an.
|
||||
|
||||
Liefert INWX einen Autorisierungsfehler (Code 2200–2299), wird die
|
||||
zwischengespeicherte Session verworfen, via KeePass neu eingeloggt und
|
||||
der Aufruf einmal wiederholt.
|
||||
Deutet der Rückgabecode auf eine fehlende/abgelaufene Session hin (siehe
|
||||
_is_auth_error), wird die zwischengespeicherte Session verworfen, via
|
||||
KeePass neu eingeloggt und der Aufruf einmal wiederholt.
|
||||
"""
|
||||
params = params or {}
|
||||
res = api.call_api(method, params)
|
||||
code = res.get('code')
|
||||
if code is not None and 2200 <= code < 2300:
|
||||
if _is_auth_error(res.get('code')):
|
||||
print("ℹ️ Session abgelaufen, melde neu an...")
|
||||
_clear_cached_session()
|
||||
if not _do_login(api):
|
||||
|
||||
Reference in New Issue
Block a user