refactor(xray-proxy): срезана accidental-сложность CLI, тестов и спеки
- Зачем:
- CLI и спека были переусложнены относительно принятой модели угроз
(один пользователь, доверенная машина): лишняя ось версий Xray и
защита от входов, которые не возникают при ручном редактировании.
- Что:
- убрана поддержка Xray 25.12.8 — поддерживается только 26.3.27;
allowInsecure валидируется, но никогда не эмитится в JSON.
- удалена проверка владения сокетом через /proc/net/tcp; идентичность
процесса и сверка адрес/порт со state сохранены.
- валидация INI/профиля/адреса/query сведена к отказам на реальные
опечатки; scoped IPv6 отклоняется одинаково на Python 3.8 и 3.9+.
- удалены fsync/O_EXCL-церемония, SIGALRM-таймер, zombie-инспекция,
мёртвый отпечаток профиля и двойной разбор extra/alpn.
- shell.bash принимает вывод env без ре-валидации, сохранив атомарность;
спека и issue 01–05 приведены к новому объёму (тикет 06, леджер).
- Проверка:
- python3 -m unittest discover -s tests — 34 теста OK.
- bash tests/test_proxy_launchers.sh — 8 проверок PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
71e16a795a
commit
98bfd6338a
12 files changed
+384
-508
No files matched your search
@@ -6,24 +6,14 @@ _proxy_cli() {
|
||||
}
|
||||
|
||||
_proxy_apply_env_file() {
|
||||
local output_file="$1" line key value nul_prefix
|
||||
local output_file="$1" line key value
|
||||
local -A proxy_values=()
|
||||
local -A proxy_seen=()
|
||||
local -a allowed_keys=(
|
||||
HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
|
||||
http_proxy https_proxy all_proxy no_proxy
|
||||
)
|
||||
|
||||
if IFS= read -r -d '' nul_prefix < "$output_file"; then
|
||||
echo "Ошибка: xray-proxy env вернул запрещённый NUL" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
if [[ "$line" == *$'\r'* ]]; then
|
||||
echo "Ошибка: xray-proxy env вернул запрещённый CR" >&2
|
||||
return 1
|
||||
fi
|
||||
if [[ "$line" != *=* ]]; then
|
||||
echo "Ошибка: xray-proxy env вернул строку без '='" >&2
|
||||
return 1
|
||||
@@ -37,30 +27,15 @@ _proxy_apply_env_file() {
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
if [[ -n "${proxy_seen[$key]+set}" ]]; then
|
||||
echo "Ошибка: xray-proxy env повторил ключ: $key" >&2
|
||||
return 1
|
||||
fi
|
||||
proxy_seen["$key"]=1
|
||||
proxy_values["$key"]="$value"
|
||||
done < "$output_file"
|
||||
|
||||
for key in "${allowed_keys[@]}"; do
|
||||
if [[ -z "${proxy_seen[$key]+set}" ]]; then
|
||||
echo "Ошибка: xray-proxy env не вернул обязательный ключ: $key" >&2
|
||||
return 1
|
||||
if [[ -n "${proxy_values[$key]+set}" ]]; then
|
||||
printf -v "$key" '%s' "${proxy_values[$key]}"
|
||||
export "$key"
|
||||
fi
|
||||
done
|
||||
if [ "${#proxy_seen[@]}" -ne 8 ]; then
|
||||
echo "Ошибка: xray-proxy env должен вернуть ровно восемь ключей" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
for key in "${allowed_keys[@]}"; do
|
||||
printf -v "$key" '%s' "${proxy_values[$key]}"
|
||||
done
|
||||
export HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
|
||||
export http_proxy https_proxy all_proxy no_proxy
|
||||
}
|
||||
|
||||
proxy_on() {
|
||||
|
||||
Reference in new issue
Block a user