chore(release): v0.7.19
Sécurité : la clé privée ne subsiste plus en clair dans %APPDATA%. Le .conf généré est écrasé puis supprimé dès que wireguard.exe l'a consommé (il en garde sa propre copie chiffrée DPAPI), et l'import propose d'effacer le fichier source. Windows uniquement : sous Linux /etc/wireguard/<iface>.conf reste requis par wg-quick down. Corrige aussi ImpersonateNamedPipeClient, qui appartient à win32security et non à win32pipe (vérifié par introspection). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+24
-8
@@ -16,6 +16,7 @@ from app.utils.platform_utils import (
|
||||
run_command,
|
||||
run_privileged,
|
||||
run_privileged_readonly,
|
||||
secure_delete,
|
||||
wg_available,
|
||||
wg_exe,
|
||||
wg_quick_available,
|
||||
@@ -367,14 +368,29 @@ def connect(cfg: Config) -> tuple[bool, str]:
|
||||
if dns_util.interface_exists(name):
|
||||
force_cleanup(cfg)
|
||||
cmd = [wireguard_exe(), "/installtunnelservice", result]
|
||||
code, _, err = _run_wireguard_service_cmd(cmd, timeout=90)
|
||||
# /installtunnelservice enregistre le service et rend la main : le
|
||||
# démarrage effectif du tunnel est asynchrone. Tester l'état
|
||||
# immédiatement conclurait « échec » sur un tunnel qui monte.
|
||||
if code == 0 and _wait_connected(cfg, timeout=15):
|
||||
return True, _post_connect_message(cfg)
|
||||
force_cleanup(cfg)
|
||||
return False, err or f"Échec de l'installation du tunnel (code {code})"
|
||||
try:
|
||||
code, _, err = _run_wireguard_service_cmd(cmd, timeout=90)
|
||||
# /installtunnelservice enregistre le service et rend la main : le
|
||||
# démarrage effectif du tunnel est asynchrone. Tester l'état
|
||||
# immédiatement conclurait « échec » sur un tunnel qui monte.
|
||||
if code == 0 and _wait_connected(cfg, timeout=15):
|
||||
return True, _post_connect_message(cfg)
|
||||
force_cleanup(cfg)
|
||||
return False, err or f"Échec de l'installation du tunnel (code {code})"
|
||||
finally:
|
||||
# Ce .conf porte la clé privée en clair, dans un dossier lisible
|
||||
# par l'utilisateur (%APPDATA%\WGSecure) : il ne doit pas y
|
||||
# subsister une fois consommé. wireguard.exe en a déjà pris sa
|
||||
# propre copie, chiffrée par DPAPI, dans son magasin
|
||||
# (ProgramData\WireGuard\Configurations) — et
|
||||
# /uninstalltunnelservice ne prend que le nom de l'interface,
|
||||
# jamais un chemin : plus rien ne le relit ensuite. Il est
|
||||
# réécrit à chaque connexion.
|
||||
#
|
||||
# Sous Linux au contraire, /etc/wireguard/<iface>.conf est
|
||||
# indispensable à `wg-quick down` : on n'y touche pas (branche
|
||||
# Windows uniquement).
|
||||
secure_delete(result)
|
||||
|
||||
# Déjà monté et fonctionnel : rien à faire.
|
||||
if is_connected(cfg):
|
||||
|
||||
Reference in New Issue
Block a user