Files
go_warp_pro/warp.sh
2026-03-08 12:49:23 +03:00

653 lines
31 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -o pipefail
# ══════════════════════════════════════════════════════════════
# WARP Manager v1.0 — Cloudflare WARP SOCKS5 Proxy for 3X-UI
# Channel: https://www.youtube.com/@antenkaru
# ══════════════════════════════════════════════════════════════
WARP_VERSION="1.0"
WARP_DIR="/etc/warp-manager"
WARP_CONF="$WARP_DIR/config"
WARP_LOG="/var/log/warp-manager.log"
DEFAULT_PORT=40000
RED='\033[0;31m'; GREEN='\033[0;32m'; CYAN='\033[0;36m'
YELLOW='\033[1;33m'; MAGENTA='\033[0;35m'; WHITE='\033[1;37m'
BLUE='\033[0;34m'; NC='\033[0m'
SOCKS_PORT=""
MY_IP=""
# ─── Config ───────────────────────────────────────────────────
init_config() {
mkdir -p "$WARP_DIR"
if [ ! -f "$WARP_CONF" ]; then
cat > "$WARP_CONF" <<'CONF'
SOCKS_PORT="40000"
CONF
fi
source "$WARP_CONF"
SOCKS_PORT="${SOCKS_PORT:-$DEFAULT_PORT}"
}
save_config_val() {
local key="$1" value="$2"
if grep -q "^${key}=" "$WARP_CONF" 2>/dev/null; then
sed -i "s|^${key}=.*|${key}=\"${value}\"|" "$WARP_CONF"
else
echo "${key}=\"${value}\"" >> "$WARP_CONF"
fi
source "$WARP_CONF"
}
# ─── Logging ──────────────────────────────────────────────────
log_action() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$WARP_LOG"
}
# ─── System ───────────────────────────────────────────────────
check_root() {
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}[ERROR] Запустите скрипт с правами root!${NC}"; exit 1
fi
}
get_my_ip() {
MY_IP=$(curl -s4 --max-time 5 ifconfig.me 2>/dev/null || echo "N/A")
}
get_warp_ip() {
local warp_ip
warp_ip=$(curl -s4 --max-time 5 --proxy socks5h://127.0.0.1:${SOCKS_PORT} ifconfig.me 2>/dev/null || echo "N/A")
echo "$warp_ip"
}
detect_os() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS_ID="$ID"
OS_VERSION="$VERSION_ID"
OS_CODENAME="$VERSION_CODENAME"
else
OS_ID="unknown"
fi
}
is_warp_installed() {
command -v warp-cli &>/dev/null
}
is_warp_running() {
local st
st=$(warp-cli status 2>/dev/null)
echo "$st" | grep -qi "status.*connected" && ! echo "$st" | grep -qi "disconnected"
}
get_warp_status_text() {
if ! is_warp_installed; then
echo "Не установлен"
return
fi
local status
status=$(warp-cli status 2>/dev/null | head -5)
if echo "$status" | grep -qi "disconnected"; then
echo "Отключён"
elif echo "$status" | grep -qi "connected"; then
echo "Подключён"
elif echo "$status" | grep -qi "registration missing"; then
echo "Нет регистрации"
else
echo "Неизвестно"
fi
}
# ─── Install ──────────────────────────────────────────────────
install_warp() {
clear
echo -e "\n${CYAN}━━━ Установка Cloudflare WARP ━━━${NC}\n"
if is_warp_installed; then
echo -e "${YELLOW}WARP уже установлен.${NC}"
echo -e "Используйте меню для управления.\n"
read -p "Нажмите Enter..."
return
fi
detect_os
if [[ "$OS_ID" != "ubuntu" && "$OS_ID" != "debian" ]]; then
echo -e "${RED}[ERROR] Поддерживаются только Ubuntu и Debian.${NC}"
echo -e "${WHITE}Ваша ОС: ${YELLOW}${OS_ID} ${OS_VERSION}${NC}"
read -p "Нажмите Enter..."
return
fi
echo -e "${YELLOW}[1/6]${NC} Добавление GPG-ключа Cloudflare..."
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg 2>/dev/null
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR] Не удалось добавить GPG-ключ.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "${GREEN} ✓ GPG-ключ добавлен${NC}"
echo -e "${YELLOW}[2/6]${NC} Добавление репозитория..."
local codename="$OS_CODENAME"
if [ -z "$codename" ]; then
codename=$(lsb_release -cs 2>/dev/null || echo "focal")
fi
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ ${codename} main" \
> /etc/apt/sources.list.d/cloudflare-client.list
echo -e "${GREEN} ✓ Репозиторий добавлен (${codename})${NC}"
echo -e "${YELLOW}[3/6]${NC} Установка пакета cloudflare-warp..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -y > /dev/null 2>&1
apt-get install -y cloudflare-warp > /dev/null 2>&1
if ! command -v warp-cli &>/dev/null; then
echo -e "${RED}[ERROR] Установка не удалась. Проверьте совместимость ОС.${NC}"
echo -e "${WHITE}Попробуйте: ${CYAN}apt-get install cloudflare-warp${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "${GREEN} ✓ cloudflare-warp установлен${NC}"
echo -e "${YELLOW}[4/6]${NC} Регистрация аккаунта WARP..."
warp-cli --accept-tos registration new > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR] Регистрация не удалась.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "${GREEN} ✓ Аккаунт зарегистрирован${NC}"
echo -e "${YELLOW}[5/6]${NC} Настройка режима SOCKS5-прокси..."
warp-cli mode proxy > /dev/null 2>&1
warp-cli proxy port "${SOCKS_PORT}" > /dev/null 2>&1
save_config_val "SOCKS_PORT" "${SOCKS_PORT}"
echo -e "${GREEN} ✓ Режим: SOCKS5 на 127.0.0.1:${SOCKS_PORT}${NC}"
echo -e "${YELLOW}[6/6]${NC} Подключение..."
warp-cli connect > /dev/null 2>&1
sleep 2
if is_warp_running; then
local wip
wip=$(get_warp_ip)
echo -e "${GREEN} ✓ WARP подключён!${NC}"
echo -e " ${WHITE}WARP IP: ${GREEN}${wip}${NC}"
log_action "INSTALL: WARP installed and connected, port=${SOCKS_PORT}, warp_ip=${wip}"
else
echo -e "${YELLOW} ⚠ WARP установлен, но подключение не подтверждено.${NC}"
echo -e " ${WHITE}Попробуйте: ${CYAN}warp-cli connect${NC}"
log_action "INSTALL: WARP installed, connection unconfirmed"
fi
echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${WHITE}Для интеграции с 3X-UI используйте пункт меню ${YELLOW}5${WHITE}.${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
read -p "Нажмите Enter..."
}
# ─── Start / Stop ─────────────────────────────────────────────
start_warp() {
if ! is_warp_installed; then
echo -e "\n${RED}WARP не установлен. Сначала выполните установку (п.1).${NC}"
read -p "Нажмите Enter..."; return
fi
if is_warp_running; then
echo -e "\n${YELLOW}WARP уже подключён.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "\n${YELLOW}Подключение WARP...${NC}"
warp-cli connect > /dev/null 2>&1
sleep 2
if is_warp_running; then
echo -e "${GREEN}[OK] WARP подключён.${NC}"
log_action "START: WARP connected"
else
echo -e "${RED}[ERROR] Не удалось подключить. Проверьте: warp-cli status${NC}"
fi
read -p "Нажмите Enter..."
}
stop_warp() {
if ! is_warp_installed; then
echo -e "\n${RED}WARP не установлен.${NC}"
read -p "Нажмите Enter..."; return
fi
if ! is_warp_running; then
echo -e "\n${YELLOW}WARP уже отключён.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "\n${YELLOW}Отключение WARP...${NC}"
warp-cli disconnect > /dev/null 2>&1
echo -e "${GREEN}[OK] WARP отключён.${NC}"
log_action "STOP: WARP disconnected"
read -p "Нажмите Enter..."
}
# ─── Status ───────────────────────────────────────────────────
show_status() {
clear
echo -e "\n${CYAN}━━━ Статус WARP ━━━${NC}\n"
if ! is_warp_installed; then
echo -e " ${WHITE}Статус: ${RED}Не установлен${NC}"
echo -e "\n ${WHITE}Установите WARP через пункт меню 1.${NC}"
echo ""
read -p "Нажмите Enter..."; return
fi
local status_text warp_ip
status_text=$(get_warp_status_text)
local status_color="$RED"
[[ "$status_text" == "Подключён" ]] && status_color="$GREEN"
[[ "$status_text" == "Отключён" ]] && status_color="$YELLOW"
echo -e " ${WHITE}Статус: ${status_color}${status_text}${NC}"
echo -e " ${WHITE}Порт SOCKS5: ${CYAN}127.0.0.1:${SOCKS_PORT}${NC}"
echo -e " ${WHITE}Реальный IP: ${GREEN}${MY_IP}${NC}"
if is_warp_running; then
warp_ip=$(get_warp_ip)
echo -e " ${WHITE}WARP IP: ${GREEN}${warp_ip}${NC}"
fi
echo ""
echo -e " ${CYAN}── warp-cli status ──${NC}"
warp-cli status 2>/dev/null | while IFS= read -r line; do
echo -e " ${WHITE}$line${NC}"
done
echo ""
echo -e " ${CYAN}── warp-cli settings ──${NC}"
warp-cli settings 2>/dev/null | head -10 | while IFS= read -r line; do
echo -e " ${WHITE}$line${NC}"
done
echo ""
read -p "Нажмите Enter..."
}
# ─── 3X-UI JSON ──────────────────────────────────────────────
show_xui_json() {
clear
echo -e "\n${CYAN}━━━ Конфигурация для 3X-UI ━━━${NC}\n"
echo -e "${WHITE}Добавьте в ${YELLOW}Xray Settings → Outbounds${WHITE} (JSON):${NC}\n"
echo -e "${GREEN}── 1. Outbound (добавить в массив outbounds) ──${NC}\n"
cat <<EOF
{
"tag": "warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": ${SOCKS_PORT}
}
]
}
}
EOF
echo -e "\n${GREEN}── 2. Routing Rule (примеры маршрутов через WARP) ──${NC}\n"
echo -e "${WHITE}Весь трафик через WARP:${NC}"
echo -e "${YELLOW} В 3X-UI → Настройки Xray → Routing → добавить правило:${NC}"
echo -e "${YELLOW} Outbound Tag: ${WHITE}warp${NC}"
echo -e "${YELLOW} Весь трафик (или конкретные домены)${NC}\n"
echo -e "${WHITE}Только определённые сайты через WARP (JSON routing rule):${NC}\n"
cat <<EOF
{
"outboundTag": "warp",
"domain": [
"geosite:openai",
"geosite:netflix",
"geosite:disney",
"geosite:spotify",
"domain:chat.openai.com",
"domain:claude.ai"
]
}
EOF
echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${WHITE}SOCKS5 прокси: ${GREEN}127.0.0.1:${SOCKS_PORT}${NC}"
if is_warp_running; then
local wip
wip=$(get_warp_ip)
echo -e "${WHITE}WARP IP: ${GREEN}${wip}${NC}"
fi
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
read -p "Нажмите Enter..."
}
# ─── Re-register ──────────────────────────────────────────────
rekey_warp() {
if ! is_warp_installed; then
echo -e "\n${RED}WARP не установлен.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "\n${CYAN}━━━ Перевыпуск ключа WARP ━━━${NC}\n"
echo -e "${WHITE}Текущая регистрация будет удалена и создана новая.${NC}"
echo -e "${YELLOW}WARP будет временно отключён.${NC}\n"
read -p "Продолжить? (y/n): " confirm
[[ "$confirm" != "y" ]] && return
echo -e "${YELLOW}[1/4] Отключение...${NC}"
warp-cli disconnect > /dev/null 2>&1
echo -e "${GREEN}${NC}"
echo -e "${YELLOW}[2/4] Удаление регистрации...${NC}"
warp-cli registration delete > /dev/null 2>&1
echo -e "${GREEN}${NC}"
echo -e "${YELLOW}[3/4] Новая регистрация...${NC}"
warp-cli --accept-tos registration new > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "${RED}[ERROR] Регистрация не удалась.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "${GREEN}${NC}"
echo -e "${YELLOW}[4/4] Подключение...${NC}"
warp-cli mode proxy > /dev/null 2>&1
warp-cli proxy port "${SOCKS_PORT}" > /dev/null 2>&1
warp-cli connect > /dev/null 2>&1
sleep 2
if is_warp_running; then
local wip
wip=$(get_warp_ip)
echo -e "${GREEN} ✓ Готово! Новый WARP IP: ${wip}${NC}"
log_action "REKEY: new registration, warp_ip=${wip}"
else
echo -e "${YELLOW} ⚠ Регистрация обновлена, подключение не подтверждено.${NC}"
log_action "REKEY: new registration, connection unconfirmed"
fi
read -p "Нажмите Enter..."
}
# ─── Change port ──────────────────────────────────────────────
change_port() {
if ! is_warp_installed; then
echo -e "\n${RED}WARP не установлен.${NC}"
read -p "Нажмите Enter..."; return
fi
echo -e "\n${CYAN}━━━ Изменение порта SOCKS5 ━━━${NC}\n"
echo -e "${WHITE}Текущий порт: ${GREEN}${SOCKS_PORT}${NC}\n"
local new_port
while true; do
echo -e "Введите новый порт (1024-65535):"
read -p "> " new_port
if [[ "$new_port" =~ ^[0-9]+$ ]] && (( new_port >= 1024 && new_port <= 65535 )); then
break
fi
echo -e "${RED}Ошибка: порт должен быть числом от 1024 до 65535.${NC}"
done
warp-cli proxy port "$new_port" > /dev/null 2>&1
save_config_val "SOCKS_PORT" "$new_port"
SOCKS_PORT="$new_port"
echo -e "\n${GREEN}[OK] Порт изменён на ${new_port}.${NC}"
echo -e "${WHITE}SOCKS5: ${CYAN}127.0.0.1:${new_port}${NC}"
echo -e "\n${YELLOW}Не забудьте обновить порт в настройках 3X-UI!${NC}"
log_action "PORT: changed to ${new_port}"
read -p "Нажмите Enter..."
}
# ─── Uninstall ────────────────────────────────────────────────
full_uninstall() {
clear
echo -e "\n${RED}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${RED}║ ⚠ ПОЛНОЕ УДАЛЕНИЕ WARP MANAGER ⚠ ║${NC}"
echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${WHITE}Будут удалены:${NC}"
echo -e " ${RED}${NC} Пакет cloudflare-warp"
echo -e " ${RED}${NC} Репозиторий и GPG-ключ Cloudflare"
echo -e " ${RED}${NC} Конфигурация ${WHITE}/etc/warp-manager/${NC}"
echo -e " ${RED}${NC} Команда ${WHITE}gowarp${NC}"
echo -e " ${RED}${NC} Логи ${WHITE}/var/log/warp-manager.log${NC}"
echo ""
echo -e "${GREEN}НЕ будет затронуто:${NC}"
echo -e " ${GREEN}${NC} 3X-UI и Xray (настройки outbound нужно убрать вручную)"
echo -e " ${GREEN}${NC} Kaskad PRO"
echo -e " ${GREEN}${NC} Системные пакеты"
echo ""
read -p "$(echo -e "${RED}Удалить WARP Manager полностью? (y/n): ${NC}")" confirm1
[[ "$confirm1" != "y" ]] && { echo -e "\n${CYAN}Отменено.${NC}"; read -p "Нажмите Enter..."; return; }
echo ""
echo -e "${YELLOW}Удаление WARP Manager...${NC}\n"
echo -e " ${YELLOW}[1/6]${NC} Отключение WARP..."
warp-cli disconnect > /dev/null 2>&1
echo -e " ${GREEN}${NC} WARP отключён"
echo -e " ${YELLOW}[2/6]${NC} Удаление регистрации..."
warp-cli registration delete > /dev/null 2>&1
echo -e " ${GREEN}${NC} Регистрация удалена"
echo -e " ${YELLOW}[3/6]${NC} Удаление пакета..."
apt-get remove -y cloudflare-warp > /dev/null 2>&1
apt-get autoremove -y > /dev/null 2>&1
echo -e " ${GREEN}${NC} Пакет удалён"
echo -e " ${YELLOW}[4/6]${NC} Удаление репозитория и ключа..."
rm -f /etc/apt/sources.list.d/cloudflare-client.list
rm -f /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo -e " ${GREEN}${NC} Репозиторий и ключ удалены"
echo -e " ${YELLOW}[5/6]${NC} Удаление конфигурации..."
rm -rf "$WARP_DIR"
rm -f "$WARP_LOG"
echo -e " ${GREEN}${NC} Конфигурация и логи удалены"
echo -e " ${YELLOW}[6/6]${NC} Удаление команды gowarp..."
rm -f /usr/local/bin/gowarp
echo -e " ${GREEN}${NC} Команда gowarp удалена"
echo ""
echo -e "${GREEN}══════════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN} WARP Manager полностью удалён.${NC}"
echo -e "${WHITE} Не забудьте убрать outbound \"warp\" из настроек 3X-UI!${NC}"
echo -e "${GREEN}══════════════════════════════════════════════════════════════${NC}"
echo ""
log_action "UNINSTALL: full removal completed"
read -p "Нажмите Enter..."
exit 0
}
# ═══════════════════════════════════════════════════════════════
# PROMO
# ═══════════════════════════════════════════════════════════════
show_promo() {
clear; echo ""
echo -e "${MAGENTA}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${MAGENTA}║ ХОСТИНГ СО СКИДКОЙ ДО -60% ║${NC}"
echo -e "${MAGENTA}╚══════════════════════════════════════════════════════════════╝${NC}"
echo -e "\n${CYAN}🌍 РФ И ЕВРОПА${NC}\n${WHITE} >>> https://vk.cc/ct29NQ${NC}"
printf " ${YELLOW}%-12s${NC} : ${WHITE}%s${NC}\n" "OFF60" "60% скидка" "antenka20" "+20% (3мес)" "antenka6" "+15% (6мес)" "antenka12" "+5% (12мес)"
echo -e "\n${CYAN}🇧🇾 БЕЛАРУСЬ${NC}\n${WHITE} >>> https://vk.cc/cUxAhj${NC}"
printf " ${YELLOW}%-12s${NC} : ${WHITE}%s${NC}\n" "OFF60" "60% скидка"
echo -e "\n${YELLOW}QR-код... (3с)${NC}"; for i in 3 2 1; do echo -ne "$i..."; sleep 1; done; echo ""
echo -e "\n${WHITE}"; command -v qrencode &>/dev/null && qrencode -t ANSIUTF8 "https://vk.cc/ct29NQ" || echo "Ссылки выше."; echo -e "${NC}"
read -p "Нажмите Enter..."
}
# ═══════════════════════════════════════════════════════════════
# INFO PAGE
# ═══════════════════════════════════════════════════════════════
show_info() {
clear; echo ""
echo -e "${MAGENTA}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${MAGENTA}║ 📚 WARP Manager v${WARP_VERSION} — Что это и как работает ║${NC}"
echo -e "${MAGENTA}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${CYAN}═══ ЧТО ТАКОЕ CLOUDFLARE WARP ═══${NC}"
echo ""
echo -e "${WHITE} Cloudflare WARP — бесплатный сервис от Cloudflare, который"
echo -e " направляет трафик через глобальную сеть Cloudflare."
echo -e ""
echo -e " Ваш VPS получает «чистый» IP-адрес Cloudflare, который"
echo -e " не заблокирован популярными сервисами.${NC}"
echo ""
echo -e "${CYAN}═══ ЗАЧЕМ НУЖЕН WARP + 3X-UI ═══${NC}"
echo ""
echo -e "${WHITE} Многие сайты блокируют IP дешёвых VPS:"
echo -e " ChatGPT, Netflix, Disney+, Spotify и другие."
echo -e ""
echo -e " WARP решает эту проблему: трафик из 3X-UI идёт через"
echo -e " Cloudflare и получает доверенный IP.${NC}"
echo ""
echo -e "${CYAN}═══ СХЕМА РАБОТЫ ═══${NC}"
echo ""
echo -e "${WHITE} Клиент → 3X-UI (Xray) → SOCKS5 (WARP) → Cloudflare → Интернет${NC}"
echo ""
echo -e "${GREEN} 1.${NC} Скрипт устанавливает ${YELLOW}cloudflare-warp${NC} на сервер"
echo -e "${GREEN} 2.${NC} WARP работает в режиме ${YELLOW}SOCKS5-прокси${NC} на 127.0.0.1:${SOCKS_PORT}"
echo -e "${GREEN} 3.${NC} В 3X-UI добавляется ${YELLOW}outbound${NC} типа SOCKS → warp"
echo -e "${GREEN} 4.${NC} В маршрутизации выбираете какие сайты идут через WARP"
echo ""
echo -e "${CYAN}═══ ЧТО ПОЛУЧАЕТЕ ═══${NC}"
echo ""
echo -e " ${GREEN}${NC} Разблокировка ChatGPT, Netflix, Disney+, Spotify"
echo -e " ${GREEN}${NC} Чистый IPv4/IPv6 от Cloudflare"
echo -e " ${GREEN}${NC} Стабильный маршрут через сеть Cloudflare"
echo -e " ${GREEN}${NC} Гибкая маршрутизация: часть сайтов через WARP, остальные напрямую"
echo -e " ${GREEN}${NC} Бесплатно (Cloudflare WARP — бесплатный сервис)"
echo ""
echo -e "${MAGENTA}──────────────────────────────────────────────────────────────${NC}"
read -p "Нажмите Enter для продолжения..."
}
# ═══════════════════════════════════════════════════════════════
# MAIN MENU
# ═══════════════════════════════════════════════════════════════
show_menu() {
while true; do
clear
local status_text status_color
status_text=$(get_warp_status_text)
status_color="$RED"
[[ "$status_text" == "Подключён" ]] && status_color="$GREEN"
[[ "$status_text" == "Отключён" ]] && status_color="$YELLOW"
echo -e "${MAGENTA}******************************************************"
echo " anten-ka · WARP Manager v${WARP_VERSION}"
echo " YouTube: https://www.youtube.com/@antenkaru"
echo -e "******************************************************${NC}"
echo -e "${WHITE}IP сервера: ${GREEN}${MY_IP}${NC} ${WHITE}WARP: ${status_color}${status_text}${NC}"
if is_warp_running; then
echo -e "${WHITE}SOCKS5: ${CYAN}127.0.0.1:${SOCKS_PORT}${NC}"
fi
echo -e "------------------------------------------------------"
echo -e " 1) ${GREEN}Установить WARP${NC}"
echo -e " 2) ${CYAN}Запустить WARP${NC}"
echo -e " 3) ${YELLOW}Остановить WARP${NC}"
echo -e " 4) 📊 ${WHITE}Статус и конфигурация${NC}"
echo -e " 5) 📋 ${CYAN}JSON для 3X-UI${NC}"
echo -e " 6) 🔑 ${YELLOW}Перевыпуск ключа${NC}"
echo -e " 7) 🔧 ${WHITE}Изменить порт SOCKS5${NC}"
echo -e " 8) ${YELLOW}PROMO${NC}"
echo -e " 9) ${MAGENTA}📚 Инструкция${NC}"
echo -e "10) ${RED}⚠ Полное удаление${NC}"
echo -e " 0) Выход"
echo -e "------------------------------------------------------"
read -p "Выбор: " ch
case $ch in
1) install_warp ;;
2) start_warp ;;
3) stop_warp ;;
4) show_status ;;
5) show_xui_json ;;
6) rekey_warp ;;
7) change_port ;;
8) show_promo ;;
9) show_info ;;
10) full_uninstall ;;
0) exit 0 ;;
esac
done
}
# ═══════════════════════════════════════════════════════════════
# STARTUP WITH PROGRESS
# ═══════════════════════════════════════════════════════════════
run_startup() {
local total=5 s=0
clear; echo ""
echo -e "${MAGENTA}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${MAGENTA}║ WARP Manager v${WARP_VERSION} — Загрузка ║${NC}"
echo -e "${MAGENTA}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Проверка прав root..." "$s" "$total"
check_root
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} Права root подтверждены \n" "$s" "$total"
((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Загрузка конфигурации..." "$s" "$total"
init_config
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} Конфигурация загружена \n" "$s" "$total"
((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Установка gowarp..." "$s" "$total"
if [ "$(readlink -f "$0" 2>/dev/null)" != "/usr/local/bin/gowarp" ]; then
cp -f "$0" "/usr/local/bin/gowarp"; chmod +x "/usr/local/bin/gowarp"
fi
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} Команда gowarp \n" "$s" "$total"
((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Определение IP..." "$s" "$total"
get_my_ip
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} IP: %-25s \n" "$s" "$total" "$MY_IP"
((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Проверка WARP..." "$s" "$total"
local ws
ws=$(get_warp_status_text)
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} WARP: %-25s \n" "$s" "$total" "$ws"
echo ""
local w=40 bar=""
for ((i=0; i<w; i++)); do bar+="█"; done
echo -e " ${CYAN}[${GREEN}${bar}${CYAN}]${NC} ${GREEN}100%${NC}"
echo ""
echo -e " ${GREEN}✅ WARP Manager v${WARP_VERSION} готов к работе!${NC}"
echo ""
sleep 2
show_promo
show_info
show_menu
}
# ═══════════════════════════════════════════════════════════════
# ENTRY POINT
# ═══════════════════════════════════════════════════════════════
run_startup