chore(release): v0.7.12

Ajoute wgsecure-helper, un service Windows privilégié (LocalSystem)
qui installe/désinstalle le tunnel et pose/retire les règles NRPT
sans invite d'authentification répétée. L'ACL du service WireGuard
(v0.7.6) ne délègue que démarrer/arrêter un tunnel déjà installé,
jamais le créer/supprimer, ce que WGSecure fait pourtant à chaque
connexion/déconnexion — d'où les prompts qui persistaient malgré
v0.7.6-v0.7.11. Corrige aussi le handshake, qui échouait pour la même
raison (wg show sans élévation complète).

Purement additif : l'app retombe sur son chemin élevé existant si le
service est absent (composant optionnel dans l'installeur).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 18:15:08 +02:00
co-authored by Claude Sonnet 5
parent 9dca066239
commit 7beb6deb7a
11 changed files with 546 additions and 16 deletions
+33 -2
View File
@@ -4,7 +4,7 @@
## ──────────────────────────────────────────────
APP := wgsecure
VERSION := 0.7.11
VERSION := 0.7.12
VENV := .venv
PYTHON := $(VENV)/bin/python3
PIP := $(VENV)/bin/pip
@@ -27,7 +27,7 @@ PI_OPTS := \
--hidden-import cryptography.hazmat.primitives.asymmetric.x25519 \
--collect-submodules PyQt6
.PHONY: all linux windows installer-deps release publish version changelog install install-gnome uninstall-gnome run run-admin icon reset-password setup-sudoers check-privileges clean clean-all help venv
.PHONY: all linux windows helper installer-deps release publish version changelog install install-gnome uninstall-gnome run run-admin icon reset-password setup-sudoers check-privileges clean clean-all help venv
# ── Cible par défaut ────────────────────────────────────────────────────────
all: linux
@@ -108,6 +108,36 @@ windows: icon
@echo " ✅ Binaire Windows → $(DIST)/$(APP).exe"
@echo ""
# ── Service Windows privilégié (wgsecure-helper.exe) ─────────────────────────
# Exécutable séparé de wgsecure.exe : installe/désinstalle le tunnel et pose/
# retire les règles NRPT (split-DNS) en LocalSystem, pour éviter une invite
# d'authentification à chaque connexion/déconnexion (cf. app/service/). Utilise
# pywin32, installé uniquement dans ce venv Wine — jamais dans .venv (Linux) ni
# dans les dépendances de wgsecure.exe. Cible explicite : ni `windows` ni
# `release` ne la déclenchent implicitement, ce composant restant optionnel.
# --hidden-import win32timezone : dépendance dynamique de pywin32 que
# l'analyse statique de PyInstaller ne détecte pas seule (service qui
# démarre mais plante à l'exécution sans ce forçage — cas connu).
helper:
@echo ""
@echo " 🛡️ Compilation du service (Wine + PyInstaller)…"
@echo ""
@which wine > /dev/null 2>&1 \
|| (echo " ❌ Wine non installé → sudo apt install wine"; exit 1)
@test -f "$(WINE_PYTHON)" \
|| (echo " ❌ Python Windows introuvable dans Wine → make setup-wine"; exit 1)
@wine $(WINE_PYTHON) -m pip install -r requirements-helper.txt --quiet
@wine $(WINE_PYTHON) -m PyInstaller \
--noconfirm \
--clean \
--name wgsecure-helper \
--onefile \
--hidden-import win32timezone \
app/service/helper_service.py
@echo ""
@echo " ✅ Service → $(DIST)/wgsecure-helper.exe"
@echo ""
# ── Prérequis de l'installeur Windows (wgsecure.iss) ─────────────────────────
# WireGuard n'est pas empaqueté avec WGSecure (c'est wg.exe et le pilote
# tunnel qui manquent, pas une simple DLL) : wgsecure.iss l'installe donc en
@@ -314,6 +344,7 @@ help:
@echo " make install Installe les dépendances "
@echo " make linux Binaire Linux (onefile) "
@echo " make windows Binaire Windows (Wine) "
@echo " make helper Service Windows (Wine) "
@echo " make installer-deps Prérequis wgsecure.iss "
@echo " make release Linux + nommage release "
@echo " make publish Tague + publie sur Gitea "