evo-cli 0.34.1__tar.gz → 0.34.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {evo_cli-0.34.1 → evo_cli-0.34.3}/PKG-INFO +1 -1
- evo_cli-0.34.3/evo_cli/VERSION +1 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/openvpn.py +22 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli.egg-info/PKG-INFO +1 -1
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_openvpn.py +31 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_route.py +1 -1
- evo_cli-0.34.1/evo_cli/VERSION +0 -1
- {evo_cli-0.34.1 → evo_cli-0.34.3}/Containerfile +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/HISTORY.md +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/LICENSE +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/MANIFEST.in +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/README.md +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/__main__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/base.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/cli.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/agent_toy.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/claude_code.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/cloudflare.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/cred.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/download.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/fix_claude.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/gdrive.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/gh.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_dag.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_git.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_hub.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_mirror.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_model.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_mutate.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_paths.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_render.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/_server.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/check.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/clone.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/edit.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/pull.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/serve.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/show.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/views.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/index-Cs7hXRPJ.css +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/index-CuNOlaH7.js +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/harness/web/index.html +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/hwid.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/hwid_reset.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/image.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/localproxy.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/mcp.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/miniconda.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/netcheck.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/ngrok.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/opencode.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/openvpn.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/plantuml.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/_dns.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/_dpi.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/_hosts.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/_page.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/_probe.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/_spoofdpi.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/check.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/fix.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/probe.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/route/status.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/serp.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/site2s.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/ssh.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/storage.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/sysmon.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/tts.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/update.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/commands/wifi.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/console.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/doctor.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/google_oauth.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/migrate.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/oauth_flow.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/registry.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/store.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/credentials/sync.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/align.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/core.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/creds.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/errors.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/gemini.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/imaging/ncnn.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/mcp_registry.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/serp/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/serp/client.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/serp/creds.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/serp/errors.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/serp/install.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/serp/render.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/chunking.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/core.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/creds.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/errors.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/gemini.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/http.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/openai.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/player.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli/tts/vbee.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli.egg-info/SOURCES.txt +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli.egg-info/dependency_links.txt +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli.egg-info/entry_points.txt +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli.egg-info/requires.txt +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/evo_cli.egg-info/top_level.txt +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/pyproject.toml +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/setup.cfg +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/__init__.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/fake_evo_agents.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/fixtures/hub/contract-0.2.0.json +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/fixtures/hub/mirror-demo.yaml +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_agent_toy.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_claude_code.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_cli.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_console.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_cred.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_download.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_fix_claude.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_gdrive.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_gh.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_harness.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_harness_clone.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_harness_dag.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_harness_hub.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_harness_show.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_image.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_mcp.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_ngrok.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_opencode.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_plantuml.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_serp.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_storage.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_sysmon.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_tts.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_update.py +0 -0
- {evo_cli-0.34.1 → evo_cli-0.34.3}/tests/test_wifi.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.34.3
|
|
@@ -23,6 +23,8 @@ from urllib.parse import parse_qs, urlparse
|
|
|
23
23
|
from evo_cli.credentials.store import CredentialError, compile_flat, read_flat, set_value
|
|
24
24
|
|
|
25
25
|
APP = Path("/Applications/OpenVPN Connect/OpenVPN Connect.app/Contents/MacOS/OpenVPN Connect")
|
|
26
|
+
# OpenVPN 2.6's default --data-ciphers.
|
|
27
|
+
DATA_CIPHERS = ("AES-256-GCM", "AES-128-GCM", "CHACHA20-POLY1305")
|
|
26
28
|
INLINE = {"ca", "cert", "key", "tls-auth", "tls-crypt", "tls-crypt-v2", "extra-certs"}
|
|
27
29
|
# Only self-contained client profiles: never execute scripts/plugins or follow includes as root.
|
|
28
30
|
OPTIONS = {
|
|
@@ -184,6 +186,24 @@ def uses_credentials(text):
|
|
|
184
186
|
return any(words[0].removeprefix("--") == "auth-user-pass" for _, words in _directives(text))
|
|
185
187
|
|
|
186
188
|
|
|
189
|
+
def data_ciphers(text):
|
|
190
|
+
"""The --data-ciphers to pass for a profile that names only --cipher, else None.
|
|
191
|
+
|
|
192
|
+
OpenVPN 2.5 and Connect offer that cipher too; 2.6 no longer does, so a server that accepts nothing else
|
|
193
|
+
(Access Server profiles carry "cipher AES-256-CBC") ends with "no shared cipher". The defaults stay first.
|
|
194
|
+
"""
|
|
195
|
+
cipher = None
|
|
196
|
+
for _, words in _directives(text):
|
|
197
|
+
option = words[0].removeprefix("--")
|
|
198
|
+
if option == "data-ciphers":
|
|
199
|
+
return None
|
|
200
|
+
if option == "cipher" and len(words) == 2:
|
|
201
|
+
cipher = words[1]
|
|
202
|
+
if not cipher or cipher.upper() in DATA_CIPHERS:
|
|
203
|
+
return None
|
|
204
|
+
return ":".join([*DATA_CIPHERS, cipher])
|
|
205
|
+
|
|
206
|
+
|
|
187
207
|
def takes_default_route(text):
|
|
188
208
|
"""Whether a profile may take the default route. Only split-tunnel profiles can run beside another VPN.
|
|
189
209
|
|
|
@@ -635,6 +655,8 @@ def worker(name, timeout):
|
|
|
635
655
|
# With no password to ask for, a server can add a sign-in step only through the browser (Access
|
|
636
656
|
# Server SAML); announce it, or such a server refuses the client.
|
|
637
657
|
command += ["--setenv", "IV_SSO", "openurl,webauth"]
|
|
658
|
+
if ciphers := data_ciphers(profile["config"]):
|
|
659
|
+
command += ["--data-ciphers", ciphers]
|
|
638
660
|
pinned = [] if takes_default_route(profile["config"]) else remotes
|
|
639
661
|
if profile.get("otp_url"):
|
|
640
662
|
pinned = [*pinned, urlparse(profile["otp_url"]).hostname]
|
|
@@ -367,6 +367,37 @@ def test_worker_pins_the_otp_host_even_for_a_full_tunnel(store, monkeypatch):
|
|
|
367
367
|
assert pinned == [["otp.example"]]
|
|
368
368
|
|
|
369
369
|
|
|
370
|
+
@pytest.mark.parametrize(
|
|
371
|
+
"extra,expected",
|
|
372
|
+
[
|
|
373
|
+
("", None),
|
|
374
|
+
("cipher AES-256-CBC\n", "AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC"),
|
|
375
|
+
("cipher AES-256-GCM\n", None),
|
|
376
|
+
("cipher AES-256-CBC\ndata-ciphers AES-256-GCM\n", None),
|
|
377
|
+
],
|
|
378
|
+
)
|
|
379
|
+
def test_a_profile_cipher_is_offered_after_the_defaults(extra, expected):
|
|
380
|
+
assert vpn.data_ciphers(CONFIG + extra) == expected
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
def test_worker_passes_the_profile_cipher(store, monkeypatch):
|
|
384
|
+
vpn.save_profile("m1", {"config": CERT_ONLY + "cipher AES-256-CBC\n"})
|
|
385
|
+
monkeypatch.setattr(sys, "stdin", io.StringIO("\n"))
|
|
386
|
+
monkeypatch.setattr(vpn.os, "geteuid", lambda: 0)
|
|
387
|
+
monkeypatch.setattr(vpn.shutil, "which", lambda _: "/fake/openvpn")
|
|
388
|
+
monkeypatch.setattr(vpn, "pin_remotes", lambda command, hosts: command)
|
|
389
|
+
started = []
|
|
390
|
+
|
|
391
|
+
def popen(command, **_):
|
|
392
|
+
started.append(command)
|
|
393
|
+
raise OSError("stop before running anything")
|
|
394
|
+
|
|
395
|
+
monkeypatch.setattr(vpn.subprocess, "Popen", popen)
|
|
396
|
+
vpn.worker("m1", 10)
|
|
397
|
+
command = started[0]
|
|
398
|
+
assert command[command.index("--data-ciphers") + 1].endswith(":AES-256-CBC")
|
|
399
|
+
|
|
400
|
+
|
|
370
401
|
@pytest.mark.parametrize(
|
|
371
402
|
"message,expected",
|
|
372
403
|
[
|
|
@@ -429,7 +429,7 @@ def _fake_macos_bypass(monkeypatch, tmp_path, proxy_fails=()):
|
|
|
429
429
|
monkeypatch.setattr(_dpi, "is_admin", lambda: False)
|
|
430
430
|
monkeypatch.setattr(_probe, "diagnose", lambda host, timeout: {"host": host, "verdict": _probe.SNI_BLOCKED})
|
|
431
431
|
monkeypatch.setattr(_spoofdpi, "ensure", ensure)
|
|
432
|
-
monkeypatch.setattr(_spoofdpi, "browser_overrides",
|
|
432
|
+
monkeypatch.setattr(_spoofdpi, "browser_overrides", list)
|
|
433
433
|
monkeypatch.setattr(
|
|
434
434
|
_probe, "proxy_probe", lambda host, proxy, timeout=6.0: _probe_row(host, tls=host not in proxy_fails)
|
|
435
435
|
)
|
evo_cli-0.34.1/evo_cli/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.34.1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|