v1.2.17: меню маскировки первым (меню автора не перебивает) + исправление ask_yes
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
KIT_VERSION="1.2.16" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
KIT_VERSION="1.2.17" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
||||
NS="3x-ui-kit-release"
|
||||
SIG_ID="releases@3x-ui-kit"
|
||||
|
||||
+20
-5
@@ -30,7 +30,7 @@ wait_apt_idle() {
|
||||
XUI_VERSION="v3.9.0"
|
||||
# SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30).
|
||||
XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6"
|
||||
KIT_VERSION="1.2.16"
|
||||
KIT_VERSION="1.2.17"
|
||||
# kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main.
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION"
|
||||
# Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash,
|
||||
@@ -576,7 +576,7 @@ kl_sni_menu() {
|
||||
[[ -z $ans ]] && return 0
|
||||
[[ $ans =~ ^[0-9]+$ ]] || { printf ' введите номер из списка\n' >&2; continue; }
|
||||
i=$((10#$ans))
|
||||
if ((n)) && ((i >= 1 && i <= n)); then printf '%s' "${found[i - 1]}"; return 0; fi
|
||||
if ((n)) && ((i >= 1 && i <= n)); then printf 'sni:%s' "${found[i - 1]}"; return 0; fi
|
||||
((i == auto_idx)) && return 0
|
||||
if ((i == known_idx)); then
|
||||
printf '\nОбщедоступные сайты:\n' >&2
|
||||
@@ -586,7 +586,7 @@ kl_sni_menu() {
|
||||
read -r -t 300 ans <"$src" 2>/dev/null || true
|
||||
ans=${ans//[[:space:]]/}
|
||||
if [[ $ans =~ ^[0-9]+$ ]] && ((10#$ans >= 1 && 10#$ans <= ${#known[@]})); then
|
||||
printf '%s' "${known[10#$ans - 1]}"; return 0
|
||||
printf 'sni:%s' "${known[10#$ans - 1]}"; return 0
|
||||
fi
|
||||
printf ' ничего не выбрано — оставляю автовыбор\n' >&2
|
||||
return 0
|
||||
@@ -596,7 +596,7 @@ kl_sni_menu() {
|
||||
ans=""
|
||||
read -r -t 300 ans <"$src" 2>/dev/null || true
|
||||
ans=${ans//[[:space:]]/}
|
||||
[[ $ans =~ ^[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]] && { printf '%s' "$ans"; return 0; }
|
||||
[[ $ans =~ ^[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]] && { printf 'own:%s' "$ans"; return 0; }
|
||||
printf ' не похоже на адрес сайта — оставляю автовыбор\n' >&2
|
||||
return 0
|
||||
fi
|
||||
@@ -609,7 +609,9 @@ kl_sni_menu() {
|
||||
if [[ -n $DOMAIN ]]; then
|
||||
[[ $PANEL_SSL == ip ]] || die "Свой домен работает с сертификатом панели Let's Encrypt на IP: освободите порт 80 и не указывайте --cert, --key и --panel-ssl none (сертификат для домена установщик получит сам)."
|
||||
domain_points_here "$DOMAIN" || die "Исправьте A-запись домена и запустите скрипт снова (DNS обновляется от нескольких минут до нескольких часов)."
|
||||
elif [[ -z $SNI && $yes == no && $PANEL_SSL == ip && $multi == no && ! -f $XUI_ENV && -t 1 ]] && { : </dev/tty; } 2>/dev/null; then
|
||||
# Наш шов: когда выбор сайта делает наше меню (KL_PICK_SNI=1), меню автора не показываем — иначе
|
||||
# человек отвечает на «Свой домен / Сосед / Свой сайт», и до скана подсети дело не доходит.
|
||||
elif [[ -z $SNI && $yes == no && $PANEL_SSL == ip && $multi == no && ! -f $XUI_ENV && -t 1 && ${KL_PICK_SNI:-0} != 1 ]] && { : </dev/tty; } 2>/dev/null; then
|
||||
choose_masking
|
||||
fi
|
||||
if [[ -n $DOMAIN ]]; then
|
||||
@@ -625,6 +627,17 @@ kl_sni_menu() {
|
||||
if [[ ${KL_PICK_SNI:-} == 1 && $yes == no ]] && { : </dev/tty; } 2>/dev/null; then
|
||||
local pick pick2
|
||||
pick=$(kl_sni_menu "REALITY (TCP 443) — под какой сайт маскировать" ${nb[@]+"${nb[@]}"})
|
||||
case $pick in
|
||||
own:*)
|
||||
DOMAIN=${pick#own:}
|
||||
if domain_points_here "$DOMAIN" 2>/dev/null; then
|
||||
SNI=$DOMAIN; ok "маскировка под свой домен: ${B}$DOMAIN${N} (сертификат Let's Encrypt выпустит установщик)"
|
||||
else
|
||||
SNI=$DOMAIN; later "домен $DOMAIN не указывает на этот сервер — маскируюсь под него как под чужой сайт"
|
||||
fi
|
||||
;;
|
||||
sni:*) SNI=${pick#sni:} ;;
|
||||
esac
|
||||
if ((${#nb[@]})); then
|
||||
[[ -n $pick ]] && SNI=$pick || SNI=${nb[0]}
|
||||
elif [[ -n $pick ]]; then
|
||||
@@ -639,6 +652,8 @@ kl_sni_menu() {
|
||||
fi
|
||||
if [[ " ${PROTOS[*]} " == *" xhttp "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then
|
||||
pick2=$(kl_sni_menu "XHTTP и MTProto (различаются по имени сайта) — какой сайт взять" ${nb[@]+"${nb[@]}"})
|
||||
[[ $pick2 == sni:* ]] && pick2=${pick2#sni:}
|
||||
[[ $pick2 == own:* ]] && pick2=${pick2#own:}
|
||||
[[ -n $pick2 ]] && SNI2=$pick2
|
||||
[[ -n $SNI2 ]] && ok "маскировка XHTTP/MTProto: ${B}$SNI2${N}"
|
||||
fi
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
||||
# останавливается и не заменяет команду hy2.
|
||||
|
||||
KIT_VERSION="1.2.16"
|
||||
KIT_VERSION="1.2.17"
|
||||
|
||||
cat >&2 <<'MSG'
|
||||
Отдельный установщик Hysteria2 больше не поддерживается.
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
set -Eeuo pipefail
|
||||
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
||||
|
||||
KIT_VERSION="1.2.16"
|
||||
KIT_VERSION="1.2.17"
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main"
|
||||
# Файлы новой версии берём из её тега, а не из меняющейся ветки main.
|
||||
kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; }
|
||||
|
||||
Reference in New Issue
Block a user