refactor(proxy-client): переименован интерфейс прокси
- Зачем: - прежнее имя выпячивало Xray, хотя клиент поддерживает также внешний прокси, а два каталога конфигурации были неочевидны. - Что: - пакет, CLI, конфигурация, состояние, тесты и документация переименованы в proxy-client. - машинный конфиг, профиль и два явных примера собраны в одном пользовательском каталоге. - свежая установка защищена от сворачивания каталога конфигурации внутрь репозитория. - Проверка: - bash tests/test_proxy_client_full.sh. - bash tests/test_install.sh. - ручные start, status и xray run -test; незавершённая сетевая приёмка записана в handoff.
This commit is contained in:
1 parent
e5323284a8
commit
6e431d875e
25 files changed
+310
-227
No files matched your search
@@ -0,0 +1,6 @@
|
||||
[proxy]
|
||||
type = external
|
||||
name = Hiddify
|
||||
address = hproxy.local
|
||||
port = 12334
|
||||
no_proxy_extra = .example.internal,git.example.internal
|
||||
@@ -0,0 +1,6 @@
|
||||
[proxy]
|
||||
type = xray
|
||||
name = Local Xray
|
||||
address = 127.0.0.1
|
||||
port = 12334
|
||||
no_proxy_extra = .example.internal,git.example.internal
|
||||
@@ -0,0 +1 @@
|
||||
vless://11111111-2222-4333-8444-555555555555@example.invalid:443?type=tcp&security=reality&encryption=none&flow=xtls-rprx-vision&sni=front.example.invalid&fp=chrome&pbk=SYNTHETIC_PUBLIC_KEY&sid=SYNTHETIC_SHORT_ID&headerType=none#Synthetic-example
|
||||
@@ -0,0 +1,91 @@
|
||||
# Переносимый Bash-интерфейс proxy-client. Файл можно подключать отдельно от
|
||||
# остальных dotfiles: source ~/.config/proxy-client/shell.bash
|
||||
|
||||
_proxy_cli() {
|
||||
"${PROXY_CLIENT_BIN:-proxy-client}" "$@"
|
||||
}
|
||||
|
||||
_proxy_apply_env_file() {
|
||||
local output_file="$1" line key value
|
||||
local -A proxy_values=()
|
||||
local -a allowed_keys=(
|
||||
HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
|
||||
http_proxy https_proxy all_proxy no_proxy
|
||||
)
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
if [[ "$line" != *=* ]]; then
|
||||
echo "Ошибка: proxy-client env вернул строку без '='" >&2
|
||||
return 1
|
||||
fi
|
||||
key="${line%%=*}"
|
||||
value="${line#*=}"
|
||||
case "$key" in
|
||||
HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY|http_proxy|https_proxy|all_proxy|no_proxy) ;;
|
||||
*)
|
||||
echo "Ошибка: proxy-client env вернул неизвестный ключ: $key" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
proxy_values["$key"]="$value"
|
||||
done < "$output_file"
|
||||
|
||||
for key in "${allowed_keys[@]}"; do
|
||||
if [[ -n "${proxy_values[$key]+set}" ]]; then
|
||||
printf -v "$key" '%s' "${proxy_values[$key]}"
|
||||
export "$key"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
proxy_on() {
|
||||
local output_file old_umask
|
||||
old_umask="$(umask)"
|
||||
umask 077
|
||||
if ! output_file="$(mktemp "${TMPDIR:-/tmp}/proxy-client-env.XXXXXX")"; then
|
||||
umask "$old_umask"
|
||||
echo "Ошибка: не удалось создать временный файл для proxy-env" >&2
|
||||
return 1
|
||||
fi
|
||||
umask "$old_umask"
|
||||
if ! _proxy_cli env > "$output_file"; then
|
||||
rm -f "$output_file"
|
||||
echo "Ошибка: прокси не включён" >&2
|
||||
return 1
|
||||
fi
|
||||
if ! _proxy_apply_env_file "$output_file"; then
|
||||
rm -f "$output_file"
|
||||
echo "Ошибка: прокси не включён" >&2
|
||||
return 1
|
||||
fi
|
||||
rm -f "$output_file"
|
||||
echo "Прокси включён"
|
||||
}
|
||||
|
||||
proxy_off() {
|
||||
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
|
||||
unset http_proxy https_proxy all_proxy no_proxy
|
||||
echo "Прокси выключен"
|
||||
}
|
||||
|
||||
_proxy_run() {
|
||||
local command_name="${1:-}"
|
||||
if [ -z "$command_name" ]; then
|
||||
echo "Ошибка: не указана команда" >&2
|
||||
return 2
|
||||
fi
|
||||
shift
|
||||
_proxy_cli run -- "$command_name" "$@"
|
||||
}
|
||||
|
||||
pclaude() { _proxy_run claude "$@"; }
|
||||
pcodex() { _proxy_run codex "$@"; }
|
||||
|
||||
myip() {
|
||||
local address
|
||||
if ! address="$(curl -fsS --max-time 3 https://ifconfig.me)"; then
|
||||
echo "Ошибка: не удалось определить внешний IP" >&2
|
||||
return 1
|
||||
fi
|
||||
printf 'IP: %s\n' "$address"
|
||||
}
|
||||
Reference in new issue
Block a user