Commit Graph

56 Commits

Author SHA1 Message Date
Dr Jones
08683ab328 build: production Windows release pipeline (PyInstaller, SBOM, CI, signing hook)
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
2026-05-22 20:05:00 -07:00
Dr Jones
b852fd264f fix: audit round 3 - fail-closed leak, shared asyncio loop, GOST bundling, close-X UX, persona key lookup, +29 tests
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
2026-05-22 18:23:52 -07:00
Dr Jones
ad56f75e8a fix: audit round 2 - DPAPI secrets, pinned hop probe, gost exe hash, admin guard, PID-scoped browser tracking, emergency disengage button, build sidecar
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
2026-05-22 18:07:07 -07:00
Dr Jones
04d486a335 fix: audit pass — WebRTC audit, HTTPS gate, leak compare, kill-switch guard, doc backlog
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
2026-05-22 18:00:45 -07:00
Dr Jones
255fdf3e8c fix: C-01 WebRTC policy value, C-02 scoped taskkill, C-04 preflight race, E-11 socket timeout, E-27 ban test dedup, full audit doc
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
2026-05-22 00:43:57 -07:00
Dr Jones
311abb933a chore: tie loose ends — wiring, imports, gitignore, dep audit
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
2026-05-21 23:58:48 -07:00
Dr Jones
792b320257 fix: address P0/P1/P2 audit findings — security, reliability, CI, docs
Some checks failed
CI / Test Python 3.10 (push) Has been cancelled
CI / Test Python 3.11 (push) Has been cancelled
CI / Test Python 3.12 (push) Has been cancelled
P0 - Critical:
- config.py: add _mask() credential-redaction helper, SETTINGS_SCHEMA_VERSION,
  plaintext-storage warning; corrupt settings.json backed up before defaults
- gost_util.py: pin SHA256 for gost_3.2.6_windows_amd64.zip; verify before
  extraction; _add_defender_exclusion now logs warning on failure
- firewall.py: add emergency_disengage() for atexit/signal use
- service.py: register fw_emergency_disengage via atexit + SIGTERM/SIGINT;
  stop() calls emergency_disengage if thread hangs past 15s timeout
- app.py: wrap main() in top-level except with CTk error dialog + log
- LICENSE: add MIT license file

P1 - Important:
- app.py: switch to RotatingFileHandler (5 MB / 3 backups)
- config.py: settings_version + migrate(); save_settings() writes .bak before
  overwrite; _is_safe_https_url() strips RFC-1918 sources/ip_check_url
- service.py: threading.Lock on _settings; _signal_handler; graceful stop
- requirements.txt: pin exact versions; add cryptography==48.0.0
- .gitignore: add settings.json, credential JSON files, screenshot noise
- tray.py, dns_leak.py, gost_util.py: replace bare except:pass with logging
- CHANGELOG.md: document all session changes

P2 - Nice to have:
- .github/workflows/test.yml: CI on Python 3.10/3.11/3.12 windows-latest
- run.py: --version / -V flag
- docs/OPERATOR_RUNBOOK.md: emergency disengage, proxy leak, GOST, settings

Tests: 47/47 passed (python -m unittest discover -s tests -v)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 23:49:02 -07:00
Dr Jones
2ba43c3ff9 docs: add Live dashboard screenshot to README
Embed Screenshot 2026-05-21 173255.png at the top of README.md so the
repo landing page shows the Proxy God v2 UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 17:48:32 -07:00
Dr Jones
28f00c0887 fix: production-ready build pipeline + audit_device() crash
- fingerprint.py: audit_device() crashed with "cannot unpack non-iterable
  bool" because of a stray `webrtc_ok, _ = ... and True or False` line.
  Replaced with a proper Chrome+Edge registry probe using _WEBRTC_*
  module constants.

- ProxyChainManager.spec: removed the hardcoded absolute run.py path,
  resolve everything relative to SPECPATH so the spec is portable on any
  machine / CI runner. Bundled signup_extension/ and world_map.png as
  data files (these were missing — the runtime would fall back to drawn
  landmasses and the signup browser extension would 404 in the frozen
  build). Added PIL._tkinter_finder hidden import for safety.

- scripts/setup_and_build.ps1: build now uses the spec file instead of
  re-deriving CLI flags. The old `--onefile --windowed --collect-all
  customtkinter` invocation IGNORED the spec and silently dropped the
  bundled data files. Also added explicit $LASTEXITCODE check.

Verified end-to-end: clean PyInstaller build produces a 32MB exe with
signup_extension (8 TOC entries), world_map.png (4), customtkinter
(365) all present.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 17:24:55 -07:00
Dr Jones
01c19349ee feat: exhaustive feature expansion — cookie modes, DNS/WebRTC testers, map, Firefox fix
Cookie system:
- Expand from 5 to 12 fully-specified CookiePolicy modes in browser_identity.py
- Add CookiePolicy dataclass: behavior, lifetime, TCP partitioning, clearOnShutdown.*
- browser_profile.py emits full cookie pref set from policy object
- UI dropdown widened to 680px with live description label per mode

Firefox launch fix:
- Detect Firefox via Windows registry, AppData, and shutil.which
- Use DETACHED_PROCESS|CREATE_NO_WINDOW|CREATE_NEW_PROCESS_GROUP flags
- Wait up to 3s for firefox.exe in tasklist instead of polling parent pid
- taskkill on stop() to terminate all firefox.exe processes

DNS leak tester:
- dns_leak.py: FullDnsLeakReport dataclass, run_dns_leak_test comparing
  proxy DoH resolution vs direct system DNS

WebRTC tester:
- webrtc_check.py: STUN UDP probe, registry policy check, user.js pref check

Ban tester:
- Added SITES_SHOPPING, SITES_CRYPTO, SITES_DNS categories
- Parallel execution via ThreadPoolExecutor
- Expanded banned-text hint keywords

Fingerprint audit:
- OS identity checks: hostname, MAC, GUID, OS version, timezone, screen res
- Browser consistency analysis of user.js

Neon world map:
- world_map.png bundled; chain_map.py renders hop arcs over it with glow effect

Signup prep:
- Auto-save account on Open & Autofill; Copy Email / Copy Pass buttons
- Auto-fill custom URL when preset site selected
- PyInstaller-safe path resolution for signup_extension

Spec:
- Bundle signup_extension dir and world_map.png as PyInstaller data files

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 16:47:22 -07:00
ac6bde8a08 Fix gitattributes comment syntax 2026-05-20 20:29:43 -07:00
a27dd4c44d Add stewardship readiness asset: docs/PROJECT_HANDOFF.md 2026-05-20 17:19:46 -07:00
a77c9060b9 Add stewardship readiness asset: docs/SECURITY_REVIEW.md 2026-05-20 17:19:44 -07:00
6b826da2f3 Add stewardship readiness asset: docs/PROVENANCE_CHECKLIST.md 2026-05-20 17:19:41 -07:00
380fe5431a Add stewardship readiness asset: docs/RELEASE_PROCESS.md 2026-05-20 17:19:39 -07:00
e76ed317c1 Add stewardship readiness asset: docs/MAINTENANCE.md 2026-05-20 17:19:36 -07:00
9be21956e8 Add stewardship readiness asset: docs/ROADMAP.md 2026-05-20 17:19:34 -07:00
b7b005d188 Add stewardship readiness asset: .gitattributes 2026-05-20 17:19:32 -07:00
e97addfe2b Add stewardship readiness asset: .editorconfig 2026-05-20 17:19:30 -07:00
4c9295bf56 docs: add .gitea/ISSUE_TEMPLATE/release_checklist.md 2026-05-20 16:07:50 -07:00
313c66aa9a docs: add .gitea/ISSUE_TEMPLATE/docs_task.md 2026-05-20 16:07:48 -07:00
fae37cae3c docs: add .gitea/ISSUE_TEMPLATE/bug_report.md 2026-05-20 16:07:46 -07:00
89b19bf4ab docs: add .gitea/PULL_REQUEST_TEMPLATE.md 2026-05-20 16:07:45 -07:00
740456dad6 docs: add LICENSE_STATUS.md 2026-05-20 16:07:44 -07:00
43fcd8cfce docs: add CODEOWNERS 2026-05-20 16:07:42 -07:00
631c33b4e5 docs: add CONTRIBUTING.md 2026-05-20 16:07:41 -07:00
cb315a03ea docs: add CHANGELOG.md 2026-05-20 16:07:40 -07:00
c1448312d8 docs: add SECURITY.md 2026-05-20 16:07:39 -07:00
Indiana Holmes
23e4b0b019 Add Live tab world chain map with hop geo arcs.
Plots YOU through each hop to EXIT on an equirectangular map with great-circle connectors, extends exit intel with lat/lon, and auto-refreshes on chain rotation.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 15:43:18 -07:00
Indiana Holmes
26863fc2a5 Add ban tester, signup prep, exit IP intel, and sticky-exit hold.
New GUI tabs probe popular sites for exit-IP bans and prep signup autofill through the chain; Live tab shows geo/ASN/datacenter flags, and sticky-exit keeps the same egress IP during signup flows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 15:37:28 -07:00
Indiana Holmes
8258ca0997 Spice up README with mission-control tone.
Refresh messaging, structure, and section flow while preserving exact build/run commands and operational details.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-17 22:53:36 -07:00
Indiana Holmes
f9c548872b Save-as-final-hop button, browser proxy policy + QUIC kill, HTTPS tunnel probe
Fixes 'exit proxy never used in chain' and 'browsers break when chain is green'. Chain Builder gets a Save-as-final-hop button that appends the typed exit proxy to the manual chain. On engage, Chromium browsers get pinned to our proxy via HKLM policy (ProxyMode=fixed_servers, ProxyServer, ProxyBypassList) and QuicAllowed=0 so HTTP/3 doesn't bypass HTTP proxies and stall under the kill-switch. Chain start now runs check_https_tunnel and warns clearly when proxies forward HTTP but refuse CONNECT — the real cause of green-chain-yet-blank-browser.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 23:30:29 -07:00
Indiana Holmes
094e0577fb Spoof-when-possible browser personas, Tier-2 telemetry kill + artifact wipe, UI polish
Browser: identity persona dropdown (blend Windows-Chrome / Firefox / mac-Safari / hardened / custom) + cookie policy dropdown. Blend personas relax RFP/FPI/strict-TP so the machine looks normal while still hiding behind the chain. Persona TZ applied via env var; UA / language / locale / screen via user.js. WebRTC still forced off (it leaks real IP). Privacy: Telemetry kill toggle (DiagTrack, Activity History, ad ID, Cortana, scheduled tasks) with full snapshot/restore. One-button forensic artifact wipe (TEMP, Recent, Jump Lists, Prefetch, MRU, clipboard). UI: neon palette, glow card borders, gradient header banner.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 23:07:18 -07:00
Indiana Holmes
6561bdc37f Add LAN-broadcast lockdown, per-rotation MAC, leak audit panel
Tier-1 paranoid hardening: privacy_lan.py disables LLMNR/NetBIOS/mDNS with reversible snapshot; service rotates MAC on every chain rotation when enabled; leak_audit.py probes every leak surface (IP, DNS, IPv6, WPAD, GPO, ProxySettingsPerUser, LAN broadcast, VPN, WebRTC) and renders pass/fail in Privacy tab.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 18:40:53 -07:00
Indiana Holmes
7657a37855 Fix Windows Server proxy: HKLM mirror, ProxySettingsPerUser fix, policy detect
On Server / GPO baselines, ProxySettingsPerUser=0 makes WinINet ignore HKCU entirely. When elevated, force the flag to 1 and mirror proxy values to HKLM root + Connections blob. Detect Group Policy proxy locks and surface them so the user knows browsers will keep the policy value. Add diagnose_system_proxy() logged on every chain engage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 18:08:32 -07:00
Indiana Holmes
8f012402a6 Harden Windows Server compatibility and system-wide proxy.
Fix exit-IP checks for HTTP-only proxies, apply proxy via WinINet Connections blob and WinHTTP, improve VPN detection on legacy Server, add SOCKS5 host:port:user:pass exit parsing, and add win_compat probe for PowerShell 2.0 hosts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 18:03:30 -07:00
Indiana Holmes
8bd8d4267f Fix Firefox managed proxy profile to allow website loading.
Uses a clean manual HTTP/SSL proxy configuration, clears conflicting SOCKS fields, and stops writing prefs.js so Firefox can manage runtime prefs correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 13:50:27 -07:00
Indiana Holmes
d4296763ee 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>
2026-05-16 13:50:05 -07:00
Dr Jones
9439037cac Early-exit validation: stop once enough valid proxies found
- validate_proxies: target= param — once N valid found, remaining
  tasks skip the HTTP call and drain immediately (no wasted time)
- _build_pool: target = max(min_pool_size, chain_length * 3)
- Settings: min_pool_size (default 20), max_candidates default 400->200
- UI: Stop after N valid / Max candidates fields in Settings tab
- README: updated settings table
- 1 new test for early-exit with unreachable target

Made-with: Cursor
2026-04-16 02:31:40 -07:00
Dr Jones
8ffde94d48 VPN-aware leak detection, GOST stderr logging
- _is_same_network: /16 subnet comparison catches NordVPN IP rotation
  (exit_ip != real_ip exact-match missed same-VPN exits on rotated IPs)
- Leak now blacklists the entire dead chain, not just rotate
- GOST stderr/stdout -> gost.log (file, never deadlocks vs pipe)
  with 512KB rotation; last 8 lines shown in UI when GOST dies
- read_gost_log_tail helper for live debugging
- Health check uses same subnet check for consistency
- 5 new subnet tests

Made-with: Cursor
2026-04-16 01:23:00 -07:00
Dr Jones
0509d4104d Fix validation: 0 valid proxies (httpx shared client bug)
httpx.AsyncClient.get() does not accept proxy= per-request.
Shared client caused every check_one call to raise TypeError,
silently caught as False, so 0/N proxies ever passed.

Reverted to per-proxy AsyncClient(proxy=url) in _check_one.
Semaphore concurrency + wall-clock cap preserved.
Also re-adds _check_one helper that was accidentally removed.

Made-with: Cursor
2026-04-16 01:12:56 -07:00
Dr Jones
c9c45fdfec Fix empty proxy sources (empty pool), first-run bat, elite hint
- load_settings/sanitize_settings: treat sources=[] as invalid; restore defaults (all([]) was true)
- _build_pool: defensive default sources + clearer empty-fetch log; elite-only empty fetch message
- FirstRun_Build_And_Install.bat: Python check + setup_and_build.ps1
- README + test for empty sources sanitize

Made-with: Cursor
2026-04-16 00:44:42 -07:00
Dr Jones
214d2d2ff7 Proxy auth UI, verbose Live logs, build script, docs
- Fixed exit and manual chain: optional user/pass fields with URL merge and redaction in UI/logs
- config: split_proxy_for_edit, merge_proxy_credentials, redact_proxy_url, IPv6-style host bracketing
- Live tab: UILogHandler to stream proxy_chain_manager logs; Verbose toggle; Clear log; httpx quiet
- service/validator/fetcher: structured INFO/DEBUG for pool, GOST, validation, fetches
- setup_and_build.ps1: pip upgrade, deps, PyInstaller, desktop copy + shortcut; build_exe.bat delegates
- README: clone/pull to one-script desktop build flow

Made-with: Cursor
2026-04-16 00:27:39 -07:00
Dr Jones
0316b1befc chore: remove build/ and dist/ from version control (use build_exe.bat locally)
Made-with: Cursor
2026-04-15 19:53:48 -07:00
Dr Jones
b32e241670 chore: desktop Proxy God shortcut + script, README one-click section
Made-with: Cursor
2026-04-15 19:52:18 -07:00
Dr Jones
086a2499c0 fix: anti-stall — IP check budgets, capped timers, fetch wait_for, obfuscation auto-fallback, empty validate short-circuit, unittest suite
Made-with: Cursor
2026-04-15 14:40:46 -07:00
Dr Jones
dc1a1c3efd docs: README overhaul — sharper voice, same facts
Made-with: Cursor
2026-04-15 14:35:18 -07:00
Dr Jones
096c5094fb fix: sanitize settings JSON, asyncio get_running_loop, Defender exclusion, _btn cleanup, ASCII Save label
Made-with: Cursor
2026-04-15 13:39:27 -07:00
Dr Jones
1366a2f48e remove login dashboard; keep Proxy God only
Made-with: Cursor
2026-04-15 13:34:32 -07:00
Dr Jones
ae2d2bb982 add login dashboard: console at logon with listeners, IIS, Docker, stats
Made-with: Cursor
2026-04-15 13:20:27 -07:00