chore(release): v0.7.17
Corrige la cause racine des invites d'authentification persistantes : le service wgsecure-helper ne démarrait jamais réellement. Lancé par le SCM (sans commande sur la ligne d'appel), HandleCommandLine() se contentait d'afficher son aide et de sortir, sans entrer dans le dispatcher — SvcDoRun n'était donc jamais exécuté, aucun journal n'était créé, le pipe n'existait jamais, et l'app retombait toujours sur l'élévation UAC. Bascule sur PrepareToHostSingle() + StartServiceCtrlDispatcher() quand argv est vide. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,14 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [0.7.17] — 2026-09-05
|
||||||
|
|
||||||
|
### Corrigé
|
||||||
|
- **Le service `wgsecure-helper` ne démarrait jamais réellement** — cause racine des invites d'authentification qui persistaient malgré les v0.7.12 à v0.7.16. Lancé par le gestionnaire de services, l'exécutable ne reçoit aucune commande sur sa ligne d'appel : `win32serviceutil.HandleCommandLine()` se contentait alors d'afficher son aide et de sortir, sans jamais entrer dans le dispatcher de service. `SvcDoRun()` n'était donc jamais exécuté (d'où l'absence totale de fichier journal), le pipe n'existait jamais, et l'application retombait systématiquement sur l'élévation UAC. Le point d'entrée bascule désormais sur `servicemanager.PrepareToHostSingle()` + `StartServiceCtrlDispatcher()` quand le service est démarré par le SCM, et ne conserve `HandleCommandLine()` que pour les invocations manuelles (`install`, `start`, `debug`…).
|
||||||
|
- Un échec de création du journal fichier est désormais signalé dans le journal d'événements Windows (source « WGSecureHelper ») au lieu de rester totalement silencieux.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.7.16] — 2026-09-04
|
## [0.7.16] — 2026-09-04
|
||||||
|
|
||||||
### Corrigé
|
### Corrigé
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
## ──────────────────────────────────────────────
|
## ──────────────────────────────────────────────
|
||||||
|
|
||||||
APP := wgsecure
|
APP := wgsecure
|
||||||
VERSION := 0.7.16
|
VERSION := 0.7.17
|
||||||
VENV := .venv
|
VENV := .venv
|
||||||
PYTHON := $(VENV)/bin/python3
|
PYTHON := $(VENV)/bin/python3
|
||||||
PIP := $(VENV)/bin/pip
|
PIP := $(VENV)/bin/pip
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 🛡️ WGSecure (WGS)
|
# 🛡️ WGSecure (WGS)
|
||||||
|
|
||||||
🚀 v0.7.16 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
|
🚀 v0.7.17 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
|
||||||
|
|
||||||
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP).
|
**WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP).
|
||||||
|
|
||||||
@@ -210,4 +210,4 @@ WGSecure/
|
|||||||
## 👤 Auteur
|
## 👤 Auteur
|
||||||
|
|
||||||
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)
|
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools)
|
||||||
Version :  — Septembre 2026
|
Version :  — Septembre 2026
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
__version__ = "0.7.16"
|
__version__ = "0.7.17"
|
||||||
APP_NAME = "WGSecure"
|
APP_NAME = "WGSecure"
|
||||||
APP_SHORT = "WGS"
|
APP_SHORT = "WGS"
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
|
|
||||||
import pywintypes
|
import pywintypes
|
||||||
@@ -271,7 +272,18 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework):
|
|||||||
servicemanager.PYS_SERVICE_STARTED,
|
servicemanager.PYS_SERVICE_STARTED,
|
||||||
(self._svc_name_, ""),
|
(self._svc_name_, ""),
|
||||||
)
|
)
|
||||||
logger = _get_logger()
|
# La création du journal fichier est elle-même faillible (dossier
|
||||||
|
# non inscriptible…) : sans ce garde-fou, un échec ici laisserait
|
||||||
|
# zéro trace nulle part. Le journal d'événements Windows sert donc
|
||||||
|
# de canal de dernier recours (Observateur d'événements →
|
||||||
|
# Applications, source « WGSecureHelper »).
|
||||||
|
try:
|
||||||
|
logger = _get_logger()
|
||||||
|
except Exception as e:
|
||||||
|
servicemanager.LogErrorMsg(
|
||||||
|
f"WGSecureHelper : journal fichier impossible ({e})")
|
||||||
|
raise
|
||||||
|
|
||||||
logger.info("Service démarré")
|
logger.info("Service démarré")
|
||||||
try:
|
try:
|
||||||
self._serve_forever(logger)
|
self._serve_forever(logger)
|
||||||
@@ -281,6 +293,8 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework):
|
|||||||
# exploitable ici plutôt qu'un service qui disparaît en
|
# exploitable ici plutôt qu'un service qui disparaît en
|
||||||
# silence sans rien dans le log.
|
# silence sans rien dans le log.
|
||||||
logger.exception("Arrêt inattendu de la boucle principale")
|
logger.exception("Arrêt inattendu de la boucle principale")
|
||||||
|
servicemanager.LogErrorMsg(
|
||||||
|
"WGSecureHelper : arrêt inattendu, cf. helper.log")
|
||||||
finally:
|
finally:
|
||||||
logger.info("Service arrêté")
|
logger.info("Service arrêté")
|
||||||
|
|
||||||
@@ -327,4 +341,17 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
win32serviceutil.HandleCommandLine(WGSecureHelperService)
|
if len(sys.argv) == 1:
|
||||||
|
# Lancé par le gestionnaire de services (SCM), qui n'ajoute aucune
|
||||||
|
# commande à la ligne d'appel : il faut entrer explicitement dans le
|
||||||
|
# dispatcher. `HandleCommandLine()` seul, dans ce cas, se contente
|
||||||
|
# d'afficher son aide et de sortir — le service démarrait donc puis
|
||||||
|
# s'arrêtait aussitôt, sans jamais exécuter SvcDoRun (d'où l'absence
|
||||||
|
# totale de fichier journal et un pipe qui n'existait jamais, l'app
|
||||||
|
# retombant alors systématiquement sur l'élévation UAC).
|
||||||
|
servicemanager.Initialize()
|
||||||
|
servicemanager.PrepareToHostSingle(WGSecureHelperService)
|
||||||
|
servicemanager.StartServiceCtrlDispatcher()
|
||||||
|
else:
|
||||||
|
# Invocation manuelle : install / remove / start / stop / debug…
|
||||||
|
win32serviceutil.HandleCommandLine(WGSecureHelperService)
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
; ──────────────────────────────────────────────
|
; ──────────────────────────────────────────────
|
||||||
|
|
||||||
#define MyAppName "WGSecure"
|
#define MyAppName "WGSecure"
|
||||||
#define MyAppVersion "0.7.16"
|
#define MyAppVersion "0.7.17"
|
||||||
#define MyAppPublisher "WGSecure"
|
#define MyAppPublisher "WGSecure"
|
||||||
#define MyAppExeName "wgsecure.exe"
|
#define MyAppExeName "wgsecure.exe"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user