From 3a84aea64d82ccef183b3cd67c4e3d801989f394 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 2 Jul 2026 19:36:53 +0200 Subject: [PATCH] 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 --- inwx_common.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/inwx_common.py b/inwx_common.py index 2e866b2..027898a 100644 --- a/inwx_common.py +++ b/inwx_common.py @@ -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):