sync: UI animations select styling TLS verify flag via proxy second line brand spacing
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from typing import Dict, Optional
|
||||
from typing import Dict, Optional, Union
|
||||
from pathlib import Path
|
||||
from urllib.parse import quote
|
||||
import os
|
||||
|
||||
|
||||
def _parse_proxy_line(line: str) -> Optional[str]:
|
||||
@@ -39,6 +40,9 @@ def _read_proxy_from_file() -> Optional[str]:
|
||||
line = raw.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
# поддержим дополнительные ключи вида key=value в этом же файле (разберём ниже)
|
||||
if "=" in line:
|
||||
continue
|
||||
url = _parse_proxy_line(line)
|
||||
if url:
|
||||
return url
|
||||
@@ -59,3 +63,138 @@ def build_httpx_proxies() -> Optional[Dict[str, str]]:
|
||||
}
|
||||
|
||||
|
||||
def _read_kv_from_proxy_file() -> Dict[str, str]:
|
||||
"""
|
||||
Поддержка дополнительных опций в proxy.txt:
|
||||
ca=/полный/путь/к/burp-ca.pem
|
||||
verify=false # отключить проверку сертификатов (для отладки)
|
||||
"""
|
||||
out: Dict[str, str] = {}
|
||||
p = Path("proxy.txt")
|
||||
if not p.exists():
|
||||
return out
|
||||
try:
|
||||
for raw in p.read_text(encoding="utf-8").splitlines():
|
||||
line = raw.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
if "=" not in line:
|
||||
continue
|
||||
k, v = line.split("=", 1)
|
||||
out[k.strip().lower()] = v.strip()
|
||||
except Exception:
|
||||
return out
|
||||
return out
|
||||
|
||||
def get_tls_verify() -> Union[bool, str]:
|
||||
"""
|
||||
Возвращает значение для параметра httpx.AsyncClient(verify=...):
|
||||
- путь к PEM-бандлу (строка), если нашли ca=... или файл proxy-ca.pem в корне
|
||||
- False, если verify=false/insecure=1/AGENTUI_VERIFY=false
|
||||
- True по умолчанию
|
||||
- Новое: можно задать флаг второй «голой» строкой в proxy.txt (после URL прокси):
|
||||
пример:
|
||||
http:127.0.0.1:8888
|
||||
false
|
||||
или
|
||||
http:127.0.0.1:8888
|
||||
true
|
||||
"""
|
||||
# 1) Переменные окружения имеют приоритет
|
||||
env_verify = os.getenv("AGENTUI_VERIFY")
|
||||
if env_verify is not None and env_verify.strip().lower() in ("0", "false", "no", "off"):
|
||||
return False
|
||||
env_ca = os.getenv("AGENTUI_CA")
|
||||
if env_ca:
|
||||
path = Path(env_ca).expanduser()
|
||||
if path.exists():
|
||||
return str(path)
|
||||
|
||||
# 2) proxy.txt ключи
|
||||
kv = _read_kv_from_proxy_file()
|
||||
if kv.get("verify", "").lower() in ("0", "false", "no", "off"):
|
||||
return False
|
||||
if "ca" in kv:
|
||||
path = Path(kv["ca"]).expanduser()
|
||||
if path.exists():
|
||||
return str(path)
|
||||
# 2.1) Дополнительно: поддержка второй строки без ключа — true/false
|
||||
try:
|
||||
p = Path("proxy.txt")
|
||||
if p.exists():
|
||||
lines = [ln.strip() for ln in p.read_text(encoding="utf-8").splitlines()]
|
||||
# найдём первую «URL» строку (без '=' и не пустую/коммент)
|
||||
idx_url = -1
|
||||
for i, ln in enumerate(lines):
|
||||
if not ln or ln.startswith("#") or "=" in ln:
|
||||
continue
|
||||
idx_url = i
|
||||
break
|
||||
if idx_url >= 0:
|
||||
# ищем следующую «голую» строку
|
||||
for j in range(idx_url + 1, len(lines)):
|
||||
ln = lines[j].strip()
|
||||
if not ln or ln.startswith("#") or "=" in ln:
|
||||
continue
|
||||
low = ln.lower()
|
||||
if low in ("1", "true", "yes", "on"):
|
||||
return True
|
||||
if low in ("0", "false", "no", "off"):
|
||||
return False
|
||||
# если это не похожее на флаг, игнорируем и продолжаем
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 3) Файл по умолчанию в корне проекта
|
||||
default_ca = Path("proxy-ca.pem")
|
||||
if default_ca.exists():
|
||||
return str(default_ca)
|
||||
|
||||
# 4) По умолчанию строгая проверка
|
||||
return True
|
||||
|
||||
|
||||
def is_verify_explicit() -> bool:
|
||||
"""
|
||||
Возвращает True, если пользователь ЯВНО задал политику проверки TLS,
|
||||
чтобы клиент не переопределял её значением по умолчанию.
|
||||
Учитываются:
|
||||
- переменные окружения: AGENTUI_VERIFY, AGENTUI_CA
|
||||
- ключи в proxy.txt: verify=..., ca=...
|
||||
- файл proxy-ca.pem в корне проекта
|
||||
- Новое: «вторая голая строка» после URL в proxy.txt со значением true/false
|
||||
"""
|
||||
if os.getenv("AGENTUI_VERIFY") is not None:
|
||||
return True
|
||||
if os.getenv("AGENTUI_CA"):
|
||||
return True
|
||||
|
||||
kv = _read_kv_from_proxy_file()
|
||||
if "verify" in kv or "ca" in kv:
|
||||
return True
|
||||
# Вторая «голая» строка как явный флаг
|
||||
try:
|
||||
p = Path("proxy.txt")
|
||||
if p.exists():
|
||||
lines = [ln.strip() for ln in p.read_text(encoding="utf-8").splitlines()]
|
||||
idx_url = -1
|
||||
for i, ln in enumerate(lines):
|
||||
if not ln or ln.startswith("#") or "=" in ln:
|
||||
continue
|
||||
idx_url = i
|
||||
break
|
||||
if idx_url >= 0:
|
||||
for j in range(idx_url + 1, len(lines)):
|
||||
ln = lines[j].strip()
|
||||
if not ln or ln.startswith("#") or "=" in ln:
|
||||
continue
|
||||
if ln.lower() in ("1", "0", "true", "false", "yes", "no", "on", "off"):
|
||||
return True
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if Path("proxy-ca.pem").exists():
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user