Build comprehensive privacy suite and hardened browser controls.

Adds VPN-aware leak handling, chain testing UX improvements, hardened Firefox launch/profile management, privacy/device hardening modules, and tray/status upgrades so the app is production-ready as the new baseline.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Indiana Holmes
2026-05-16 13:50:05 -07:00
parent 9439037cac
commit d4296763ee
17 changed files with 2158 additions and 238 deletions

View File

@@ -13,24 +13,18 @@ When disengaged:
from __future__ import annotations
import ctypes
import glob
import logging
import subprocess
import sys
from pathlib import Path
from .paths import gost_exe_path
from .vpn_detect import expand_vpn_executables
log = logging.getLogger(__name__)
RULE_PREFIX = "PCM_"
NORD_GLOBS = [
r"C:\Program Files\NordVPN\*.exe",
r"C:\Program Files\NordUpdater\*.exe",
r"C:\Program Files\NordVPN\NordSec ThreatProtection\*.exe",
]
def is_admin() -> bool:
try:
@@ -99,13 +93,6 @@ def _resolve_self_exe() -> Path:
return Path(sys.executable).resolve()
def _expand_nord_exes() -> list[str]:
out: list[str] = []
for pattern in NORD_GLOBS:
out.extend(glob.glob(pattern))
return out
def engage(gost_path: Path | None = None) -> tuple[bool, str]:
"""Activate kill-switch firewall. Returns (success, message)."""
if not is_admin():
@@ -113,7 +100,7 @@ def engage(gost_path: Path | None = None) -> tuple[bool, str]:
gost = gost_path or gost_exe_path()
self_exe = _resolve_self_exe()
nord_exes = _expand_nord_exes()
vpn_exes = expand_vpn_executables()
_delete_rules()
@@ -137,10 +124,10 @@ def engage(gost_path: Path | None = None) -> tuple[bool, str]:
_add_rule(f"Python_{sibling}", dir="out", action="allow",
program=f'"{p}"', protocol="any")
# Allow all NordVPN executables
for i, npath in enumerate(nord_exes):
_add_rule(f"Nord_{i}", dir="out", action="allow",
program=f'"{npath}"', protocol="any")
# Allow VPN client executables (Nord, WireGuard, OpenVPN, etc.)
for i, vpath in enumerate(vpn_exes):
_add_rule(f"VPN_{i}", dir="out", action="allow",
program=f'"{vpath}"', protocol="any")
# Allow DHCP (or you lose your adapter)
_add_rule("DHCP", dir="out", action="allow",
@@ -155,8 +142,8 @@ def engage(gost_path: Path | None = None) -> tuple[bool, str]:
# Set default outbound to BLOCK
_set_outbound_policy("blockinbound,blockoutbound")
log.info("Firewall kill-switch engaged. %d Nord exes whitelisted.", len(nord_exes))
return True, f"Kill-switch ON. {len(nord_exes)} Nord processes whitelisted."
log.info("Firewall kill-switch engaged. %d VPN exes whitelisted.", len(vpn_exes))
return True, f"Kill-switch ON. {len(vpn_exes)} VPN client(s) whitelisted."
def disengage() -> tuple[bool, str]: