fix(ui): la saisie du code ne dépend plus du champ Identifiant VPN (v0.8.4)
Le bouton et l'entrée de systray étaient conditionnés à un champ vide par défaut depuis son introduction en v0.8.0 : un poste tenu en quarantaine par le serveur n'affichait donc aucun moyen d'en sortir. La saisie ne dépend plus que de l'état du tunnel ; la fenêtre demande l'identifiant quand il manque et ne l'enregistre qu'une fois le serveur l'ayant accepté. L'état « Non géré par le serveur » disparaît au passage : le client l'affirmait à partir de sa seule configuration locale, sans rien vérifier. « Non vérifié » est la vérité tant qu'aucun code n'a été validé. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -52,23 +52,28 @@ def api_base_url(cfg: Config) -> str:
|
||||
return f"http://{gateway}:8000"
|
||||
|
||||
|
||||
def authenticate(cfg: Config, code: str) -> tuple[bool, str]:
|
||||
def authenticate(cfg: Config, code: str, username: str = "") -> tuple[bool, str]:
|
||||
"""Valide un code TOTP auprès du serveur et ouvre l'accès réseau.
|
||||
|
||||
Retourne (succès, message). Un échec n'est jamais silencieux : sans
|
||||
cette validation le tunnel reste monté mais ne mène nulle part, et
|
||||
l'utilisateur doit comprendre pourquoi plutôt que de constater un
|
||||
réseau inexplicablement muet.
|
||||
|
||||
`username` permet de fournir l'identifiant à la volée, quand il n'est pas
|
||||
encore en configuration : la fenêtre de saisie le demande alors avec le
|
||||
code, plutôt que de renvoyer l'utilisateur vers le panneau Administrateur
|
||||
au moment précis où il cherche à ouvrir son accès. Il est enregistré
|
||||
une fois le serveur l'ayant accepté.
|
||||
"""
|
||||
base = api_base_url(cfg)
|
||||
if not base:
|
||||
return False, ("Adresse du serveur d'authentification inconnue. "
|
||||
"Renseignez-la dans le panneau Administrateur.")
|
||||
|
||||
username = (cfg.wg.get("vpn_username") or "").strip()
|
||||
username = (username or cfg.wg.get("vpn_username") or "").strip()
|
||||
if not username:
|
||||
return False, ("Aucun identifiant VPN configuré. Renseignez-le dans "
|
||||
"le panneau Administrateur.")
|
||||
return False, "Indiquez votre identifiant VPN."
|
||||
|
||||
payload = json.dumps({"username": username, "code": code}).encode("utf-8")
|
||||
request = urllib.request.Request(
|
||||
|
||||
Reference in New Issue
Block a user