фикс: исправлен захват UI в переменные и ошибки cut в меню (v1.1.3)

This commit is contained in:
Petro1990 2026-03-13 16:21:30 +03:00
parent 3b752dbc8a
commit 887e894046
1 changed files with 20 additions and 10 deletions

30
rproxy
View File

@ -3,7 +3,7 @@
# Публикация локальных сервисов через SSH-туннели + nginx на VPS # Публикация локальных сервисов через SSH-туннели + nginx на VPS
# http://5.104.75.50:3000/Petro1990/rProxy # http://5.104.75.50:3000/Petro1990/rProxy
VERSION="1.1.2" VERSION="1.1.3"
CONF_DIR="/opt/etc/rproxy" CONF_DIR="/opt/etc/rproxy"
CONF_FILE="$CONF_DIR/rproxy.conf" CONF_FILE="$CONF_DIR/rproxy.conf"
SERVICES_DIR="$CONF_DIR/services" SERVICES_DIR="$CONF_DIR/services"
@ -318,6 +318,7 @@ show_status() {
find_vps_by_domain() { find_vps_by_domain() {
local dom="$1" local dom="$1"
FOUND_VPS_ID=""
# Пытаемся получить IP через ping (BusyBox стиль) # Пытаемся получить IP через ping (BusyBox стиль)
local ip=$(ping -c 1 "$dom" 2>/dev/null | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | head -n 1) local ip=$(ping -c 1 "$dom" 2>/dev/null | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | head -n 1)
# Если не вышло, пробуем nslookup (парсим более надежно через grep -o) # Если не вышло, пробуем nslookup (парсим более надежно через grep -o)
@ -330,7 +331,7 @@ find_vps_by_domain() {
# Используем grep для извлечения IP из конфига (быстрее и надежнее источника) # Используем grep для извлечения IP из конфига (быстрее и надежнее источника)
local v_host=$(grep "VPS_HOST=" "$f" | cut -d'"' -f2) local v_host=$(grep "VPS_HOST=" "$f" | cut -d'"' -f2)
if [ "$v_host" = "$ip" ]; then if [ "$v_host" = "$ip" ]; then
basename "$f" .conf FOUND_VPS_ID=$(basename "$f" .conf)
return 0 return 0
fi fi
done done
@ -338,6 +339,7 @@ find_vps_by_domain() {
} }
select_vps_interactive() { select_vps_interactive() {
SELECTED_VPS_ID=""
draw_box "Выберите VPS для сервиса" draw_box "Выберите VPS для сервиса"
printf "\n" printf "\n"
local vps_list="" local vps_list=""
@ -359,12 +361,15 @@ select_vps_interactive() {
if [ "$REPLY" = "$next_idx" ]; then if [ "$REPLY" = "$next_idx" ]; then
do_add_vps do_add_vps
# Возвращаем последний созданный (упрощение) # Возвращаем последний созданный (упрощение)
ls -t "$VPS_DIR"/*.conf | head -n 1 | xargs basename | sed 's/\.conf//' SELECTED_VPS_ID=$(ls -t "$VPS_DIR"/*.conf | head -n 1 | xargs basename | sed 's/\.conf//')
return 0 return 0
fi fi
local sel=$(echo "$vps_list" | cut -d' ' -f"$REPLY") # Валидация ввода для cut
echo "$sel" if echo "$REPLY" | grep -qE '^[0-9]+$'; then
SELECTED_VPS_ID=$(echo "$vps_list" | cut -d' ' -f"$REPLY")
fi
return 0
} }
# ══════════════════════════════════════════════════════════════════════ # ══════════════════════════════════════════════════════════════════════
@ -411,8 +416,8 @@ do_add_interactive() {
# Автоопределение VPS по домену # Автоопределение VPS по домену
msg "Проверяю куда направлен домен $domain..." msg "Проверяю куда направлен домен $domain..."
vps_id=$(find_vps_by_domain "$domain") if find_vps_by_domain "$domain"; then
if [ -n "$vps_id" ]; then vps_id="$FOUND_VPS_ID"
msg "Домен $domain указывает на ваш VPS '$vps_id'. Выбираю его." msg "Домен $domain указывает на ваш VPS '$vps_id'. Выбираю его."
else else
warn "Не удалось автоматически определить VPS для $domain" warn "Не удалось автоматически определить VPS для $domain"
@ -425,7 +430,8 @@ do_add_interactive() {
# Если VPS не определен автоматически — выбираем вручную # Если VPS не определен автоматически — выбираем вручную
if [ -z "$vps_id" ]; then if [ -z "$vps_id" ]; then
vps_id=$(select_vps_interactive) select_vps_interactive
vps_id="$SELECTED_VPS_ID"
[ -z "$vps_id" ] && { warn "VPS не выбран"; pause; return; } [ -z "$vps_id" ] && { warn "VPS не выбран"; pause; return; }
fi fi
@ -729,8 +735,12 @@ select_service() {
return 0 return 0
fi fi
# Извлечение имени сервиса по индексу (1-based) # Извлечение имени сервиса по индексу (1-based) с валидацией
SELECTED_SERVICE=$(echo "$services" | cut -d' ' -f"$REPLY") if echo "$REPLY" | grep -qE '^[0-9]+$'; then
SELECTED_SERVICE=$(echo "$services" | cut -d' ' -f"$REPLY")
else
SELECTED_SERVICE=""
fi
[ -z "$SELECTED_SERVICE" ] && { warn "Неверный выбор"; return 1; } [ -z "$SELECTED_SERVICE" ] && { warn "Неверный выбор"; return 1; }
return 0 return 0
} }