diff --git a/install.sh b/install.sh index b346f57..e71a10f 100755 --- a/install.sh +++ b/install.sh @@ -23,45 +23,109 @@ source "$LIB_DIR/backup.sh" # ── Главное меню ───────────────────────────────────────────────────────────── show_main_menu() { - local proxy_status bot_status + local proxy_status bot_status nginx_st mode domain secret port ip link ssl_expiry proxy_status=$(telemt_status) bot_status=$(bot_service_status) + nginx_st=$(nginx_status 2>/dev/null || echo "stopped") + mode=$(config_get mode 2>/dev/null || echo "—") + domain=$(config_get domain 2>/dev/null || echo "") + secret=$(get_config_value secret 2>/dev/null || echo "") + port=$(get_config_value port 2>/dev/null || echo "443") + ip=$(get_server_ip 2>/dev/null || echo "N/A") - local proxy_badge bot_badge + # Proxy badge + local proxy_badge case "$proxy_status" in running) proxy_badge="${GREEN}● Работает${NC}" ;; stopped) proxy_badge="${YELLOW}○ Остановлен${NC}" ;; *) proxy_badge="${RED}✗ Не установлен${NC}" ;; esac + + # nginx badge + local nginx_badge + case "$nginx_st" in + running) nginx_badge="${GREEN}● nginx${NC}" ;; + *) nginx_badge="${RED}✗ nginx${NC}" ;; + esac + + # Bot badge + local bot_badge case "$bot_status" in - running) bot_badge="${GREEN}● Бот работает${NC}" ;; - stopped) bot_badge="${YELLOW}○ Бот остановлен${NC}" ;; - *) bot_badge="${DIM}нет${NC}" ;; + running) bot_badge="${GREEN}● Бот${NC}" ;; + stopped) bot_badge="${YELLOW}○ Бот${NC}" ;; + *) bot_badge="" ;; esac echo "" - echo -e " ${BOLD}${WHITE}Главное меню${NC} │ Proxy: ${proxy_badge} │ ${bot_badge}" - echo -e " ${DIM}$(printf '─%.0s' {1..60})${NC}" - echo -e " ${DIM}── Прокси ──${NC}" - echo -e " ${CYAN} 1)${NC} 🔧 Установить / Обновить прокси" - echo -e " ${CYAN} 2)${NC} 📊 Статус" - echo -e " ${CYAN} 3)${NC} 🔗 Ссылка для подключения" - echo -e " ${CYAN} 4)${NC} 📤 Поделиться ключом" - echo -e " ${CYAN} 5)${NC} 🔄 Перезапуск" - echo -e " ${CYAN} 6)${NC} 📋 Логи" - echo -e " ${CYAN} 7)${NC} 🎭 Сменить режим / шаблон" - echo -e " ${DIM}── Управление ──${NC}" - echo -e " ${CYAN} 8)${NC} 💾 Бекап конфигурации" - echo -e " ${CYAN} 9)${NC} 📦 Восстановить из бекапа" - echo -e " ${CYAN}10)${NC} ⬆️ Обновить telemt" - echo -e " ${CYAN}11)${NC} 🌐 Управление сайтом (SSL)" - echo -e " ${DIM}── Бот и прочее ──${NC}" - echo -e " ${CYAN}12)${NC} 🤖 Telegram-бот" - echo -e " ${CYAN}13)${NC} 🗑 Удалить всё" - echo -e " ${CYAN}14)${NC} 🏷 Промо" - echo -e " ${CYAN} 0)${NC} 🚪 Выход" - echo -e " ${DIM}$(printf '─%.0s' {1..60})${NC}" - echo -ne " ${WHITE}Выбор:${NC} " + echo -e " ${BOLD}${WHITE}╔══════════════════════════════════════════════════════════╗${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${BOLD}GoTelegram v${GOTELEGRAM_VERSION}${NC} — Мониторинг ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}╠══════════════════════════════════════════════════════════╣${NC}" + + # Status line + echo -ne " ${BOLD}${WHITE}║${NC} Прокси: ${proxy_badge}" + echo -ne " │ ${nginx_badge}" + [ -n "$bot_badge" ] && echo -ne " │ ${bot_badge}" + echo -e " ${BOLD}${WHITE}║${NC}" + + # Mode & IP + echo -e " ${BOLD}${WHITE}║${NC} Режим: ${CYAN}${mode}${NC} │ IP: ${CYAN}${ip}${NC} │ Порт: ${CYAN}${port}${NC} ${BOLD}${WHITE}║${NC}" + + # Domain & SSL (stealth only) + if [ "$mode" = "stealth" ] && [ -n "$domain" ]; then + ssl_expiry=$(get_ssl_expiry "$domain" 2>/dev/null || echo "N/A") + local site_ok + if curl -sk --connect-timeout 3 "https://${domain}/" -o /dev/null 2>/dev/null; then + site_ok="${GREEN}● OK${NC}" + else + site_ok="${RED}✗ Down${NC}" + fi + echo -e " ${BOLD}${WHITE}║${NC} Домен: ${CYAN}${domain}${NC} │ SSL: ${ssl_expiry} ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} Сайт: ${site_ok} │ ${GREEN}https://${domain}${NC} ${BOLD}${WHITE}║${NC}" + fi + + echo -e " ${BOLD}${WHITE}╠══════════════════════════════════════════════════════════╣${NC}" + + # Proxy link + if [ -n "$secret" ] && [ "$proxy_status" = "running" ]; then + if [ "$mode" = "stealth" ] && [ -n "$domain" ]; then + local raw_secret faketls_secret domain_hex + raw_secret="$secret" + domain_hex=$(printf '%s' "$domain" | xxd -p | tr -d '\n') + faketls_secret="ee${raw_secret}${domain_hex}" + link="tg://proxy?server=${domain}&port=${port}&secret=${faketls_secret}" + else + link="tg://proxy?server=${ip}&port=${port}&secret=${secret}" + fi + echo -e " ${BOLD}${WHITE}║${NC} ${WHITE}Ссылка для Telegram:${NC} ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${GREEN}${link}${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${BOLD}${WHITE}║${NC}" + + # QR code + if command -v qrencode &>/dev/null; then + echo -e " ${BOLD}${WHITE}║${NC} ${DIM}QR-код:${NC} ${BOLD}${WHITE}║${NC}" + qrencode -t UTF8 -m 1 "$link" 2>/dev/null | while IFS= read -r qr_line; do + echo -e " ${BOLD}${WHITE}║${NC} ${qr_line}" + done + fi + else + echo -e " ${BOLD}${WHITE}║${NC} ${DIM}Прокси не настроен. Выберите п.1 для установки.${NC} ${BOLD}${WHITE}║${NC}" + fi + + echo -e " ${BOLD}${WHITE}╠══════════════════════════════════════════════════════════╣${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${DIM}── Прокси ──${NC} ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 1)${NC} 🔧 Установить / Обновить ${CYAN} 5)${NC} 🔄 Перезапуск ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 2)${NC} 📊 Статус подробно ${CYAN} 6)${NC} 📋 Логи ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 3)${NC} 🔗 Скопировать ссылку ${CYAN} 7)${NC} 🎭 Сменить режим ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 4)${NC} 📤 Поделиться ключом ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${DIM}── Управление ──${NC} ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 8)${NC} 💾 Бекап ${CYAN}10)${NC} ⬆️ Обновить telemt ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 9)${NC} 📦 Восстановить ${CYAN}11)${NC} 🌐 Сайт (SSL) ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${DIM}── Бот и прочее ──${NC} ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN}12)${NC} 🤖 Telegram-бот ${CYAN}14)${NC} 🏷 Промо ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}║${NC} ${CYAN}13)${NC} 🗑 Удалить всё ${CYAN} 0)${NC} 🚪 Выход ${BOLD}${WHITE}║${NC}" + echo -e " ${BOLD}${WHITE}╚══════════════════════════════════════════════════════════╝${NC}" + echo -e " ${DIM}Авто-обновление каждые 30 сек. Введите номер:${NC}" + echo -ne " ${WHITE}▸ ${NC}" } # ── Установка: выбор режима ────────────────────────────────────────────────── @@ -766,30 +830,34 @@ main() { check_disk_space 500 while true; do + clear show_main_menu - read -r choice - case "$choice" in - 1) menu_install ;; - 2) menu_status ;; - 3) menu_link ;; - 4) menu_share ;; - 5) menu_restart ;; - 6) menu_logs ;; - 7) menu_change_mode ;; - 8) interactive_backup ;; - 9) interactive_restore ;; - 10) update_telemt ;; - 11) menu_website ;; - 12) menu_bot ;; - 13) menu_remove ;; - 14) menu_promo ;; - 0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;; - *) log_error "Неверный выбор" ;; - esac + # Auto-refresh: 30 sec timeout + if read -t 30 -r choice; then + case "$choice" in + 1) menu_install ;; + 2) menu_status ;; + 3) menu_link ;; + 4) menu_share ;; + 5) menu_restart ;; + 6) menu_logs ;; + 7) menu_change_mode ;; + 8) interactive_backup ;; + 9) interactive_restore ;; + 10) update_telemt ;; + 11) menu_website ;; + 12) menu_bot ;; + 13) menu_remove ;; + 14) menu_promo ;; + 0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;; + *) log_error "Неверный выбор" ;; + esac - echo "" - echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}" - read -r + echo "" + echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}" + read -r + fi + # If read timed out, loop refreshes the dashboard done }