Add WARP Manager v1.0

This commit is contained in:
anten-ka
2026-03-08 12:49:23 +03:00
commit 677c67910c

652
warp.sh Normal file
View File

@@ -0,0 +1,652 @@
#!/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