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):