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:
2026-09-06 19:32:27 +02:00
co-authored by Claude Opus 5
parent 1e015b5a1f
commit 9083525634
8 changed files with 103 additions and 34 deletions
+28 -1
View File
@@ -41,6 +41,7 @@ class AccessCodeDialog(QDialog):
self._cfg = cfg
self._worker: TaskWorker | None = None
self._message = ""
self._username = ""
self.setWindowTitle("WGSecure — Code d'accès")
self.setFixedWidth(360)
self.setModal(True)
@@ -83,6 +84,19 @@ class AccessCodeDialog(QDialog):
sep.setStyleSheet(f"color: {theme.BORDER_SOFT};")
layout.addWidget(sep)
# L'identifiant n'est demandé que s'il manque encore. Le renvoyer au
# panneau Administrateur à cet instant précis — tunnel monté, accès
# fermé, code en main — était un cul-de-sac : il est saisi ici, puis
# enregistré dès que le serveur l'a reconnu.
self._user_input: QLineEdit | None = None
if not (self._cfg.wg.get("vpn_username") or "").strip():
self._user_input = QLineEdit()
self._user_input.setPlaceholderText("Identifiant VPN (ex. TestB)")
self._user_input.setAlignment(Qt.AlignmentFlag.AlignCenter)
self._user_input.setStyleSheet(self._input_css(theme.BORDER_SOFT))
self._user_input.returnPressed.connect(self._submit)
layout.addWidget(self._user_input)
self._code_input = QLineEdit()
self._code_input.setPlaceholderText("000 000")
self._code_input.setMaxLength(7)
@@ -170,10 +184,18 @@ class AccessCodeDialog(QDialog):
self._fail("Entrez exactement 6 chiffres.")
return
self._username = ""
if self._user_input is not None:
self._username = self._user_input.text().strip()
if not self._username:
self._error_label.setText("Indiquez votre identifiant VPN.")
self._user_input.setStyleSheet(self._input_css(theme.FAIL_TEXT))
return
self._error_label.setText("")
self._set_busy(True)
self._worker = TaskWorker(vpn_session.authenticate, self._cfg, raw,
tag="auth", parent=self)
self._username, tag="auth", parent=self)
self._worker.done.connect(self._on_reply)
self._worker.finished.connect(self._worker.deleteLater)
self._worker.start()
@@ -182,6 +204,11 @@ class AccessCodeDialog(QDialog):
self._worker = None
self._message = message
if ok:
# Enregistré seulement maintenant : un identifiant que le serveur
# a refusé n'a rien à faire dans la configuration.
if self._username:
self._cfg.set("wg", "vpn_username", self._username)
self._cfg.save()
self.accept()
return
self._set_busy(False)