From dbff54652333fc84f555117e4b0ffaa2f829a877 Mon Sep 17 00:00:00 2001 From: Whispering Wind <151555003+ReturnFI@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:34:33 +0330 Subject: [PATCH] feat(auth): Implement Go HTTP auth server for max performance --- core/scripts/hysteria2/install.sh | 30 ++++++++++++++++++++++-- core/scripts/scheduler.sh | 12 +++++----- install.sh | 2 +- upgrade.sh | 38 ++++++++++++++++++++++++++++++- 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/core/scripts/hysteria2/install.sh b/core/scripts/hysteria2/install.sh index e43d19e..bde3651 100644 --- a/core/scripts/hysteria2/install.sh +++ b/core/scripts/hysteria2/install.sh @@ -5,6 +5,30 @@ source /etc/hysteria/core/scripts/utils.sh source /etc/hysteria/core/scripts/scheduler.sh define_colors +compile_auth_binary() { + echo "Compiling authentication binary..." + local auth_dir="/etc/hysteria/core/scripts/auth" + + if [ -f "$auth_dir/user_auth.go" ]; then + ( + cd "$auth_dir" || exit 1 + go mod init hysteria-auth >/dev/null 2>&1 + go mod tidy >/dev/null 2>&1 + if go build -o user_auth .; then + chown hysteria:hysteria user_auth + chmod +x user_auth + echo "Authentication binary compiled successfully." + else + echo -e "${red}Error:${NC} Failed to compile the authentication binary." + exit 1 + fi + ) + else + echo -e "${red}Error:${NC} Go source file not found at $auth_dir/user_auth.go" + exit 1 + fi +} + install_hysteria() { local port=$1 @@ -12,7 +36,9 @@ install_hysteria() { bash <(curl -fsSL https://get.hy2.sh/) >/dev/null 2>&1 mkdir -p /etc/hysteria && cd /etc/hysteria/ - + + compile_auth_binary + echo "Generating CA key and certificate..." openssl ecparam -genkey -name prime256v1 -out ca.key >/dev/null 2>&1 openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/CN=$sni" >/dev/null 2>&1 @@ -114,4 +140,4 @@ else else echo -e "${red}Error:${NC} Hysteria2 service is not active. Please check the logs for more details." fi -fi +fi \ No newline at end of file diff --git a/core/scripts/scheduler.sh b/core/scripts/scheduler.sh index 38b2746..fb4d48d 100644 --- a/core/scripts/scheduler.sh +++ b/core/scripts/scheduler.sh @@ -39,20 +39,20 @@ check_scheduler_service() { } setup_hysteria_auth_server() { - chmod +x /etc/hysteria/core/scripts/hysteria2/auth_server.py + chmod +x /etc/hysteria/core/scripts/auth/user_auth cat > /etc/systemd/system/hysteria-auth.service << 'EOF' [Unit] -Description=Hysteria aiohttp Auth Server +Description=Hysteria Auth Server After=network.target [Service] Type=simple -User=root -WorkingDirectory=/etc/hysteria -ExecStart=/etc/hysteria/hysteria2_venv/bin/python3 /etc/hysteria/core/scripts/hysteria2/auth_server.py +User=hysteria +Group=hysteria +ExecStart=/etc/hysteria/core/auth-server/auth_server Restart=always -RestartSec=10 +RestartSec=5 StandardOutput=journal StandardError=journal SyslogIdentifier=hysteria-Auth diff --git a/install.sh b/install.sh index bf6a652..d463b2f 100644 --- a/install.sh +++ b/install.sh @@ -76,7 +76,7 @@ check_os_version() { } install_packages() { - local REQUIRED_PACKAGES=("jq" "curl" "pwgen" "python3" "python3-pip" "python3-venv" "git" "bc" "zip" "cron" "lsof") + local REQUIRED_PACKAGES=("jq" "curl" "pwgen" "python3" "python3-pip" "python3-venv" "git" "bc" "zip" "cron" "lsof" "golang-go") local MISSING_PACKAGES=() log_info "Checking required packages..." diff --git a/upgrade.sh b/upgrade.sh index 383d906..b0be527 100644 --- a/upgrade.sh +++ b/upgrade.sh @@ -6,6 +6,7 @@ trap 'echo -e "\n❌ An error occurred. Aborting."; exit 1' ERR # ========== Variables ========== HYSTERIA_INSTALL_DIR="/etc/hysteria" HYSTERIA_VENV_DIR="$HYSTERIA_INSTALL_DIR/hysteria2_venv" +AUTH_BINARY_DIR="$HYSTERIA_INSTALL_DIR/core/scripts/auth" REPO_URL="https://github.com/ReturnFI/Blitz" REPO_BRANCH="auth" GEOSITE_URL="https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/release/geosite.dat" @@ -23,6 +24,38 @@ success() { echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] [OK] - ${RESET} $1"; warn() { echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] [WARN] - ${RESET} $1"; } error() { echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] - ${RESET} $1"; } +# ========== New Function to Install Go and Compile Auth Binary ========== +install_go_and_compile_auth() { + info "Checking for Go and compiling authentication binary..." + if ! command -v go &>/dev/null; then + warn "Go is not installed. Attempting to install..." + apt-get update -y >/dev/null + apt-get install -y golang-go >/dev/null + success "Go installed successfully." + else + success "Go is already installed." + fi + + if [[ -f "$AUTH_BINARY_DIR/user_auth.go" ]]; then + info "Found auth binary source. Compiling..." + ( + cd "$AUTH_BINARY_DIR" + go mod init hysteria_auth >/dev/null 2>&1 + go mod tidy >/dev/null 2>&1 + if go build -o user_auth .; then + chown hysteria:hysteria user_auth + chmod +x user_auth + success "Authentication binary compiled successfully." + else + error "Failed to compile the authentication binary." + exit 1 + fi + ) + else + warn "Authentication binary source not found. Skipping compilation." + fi +} + # ========== Backup Files ========== cd /root TEMP_DIR=$(mktemp -d) @@ -81,7 +114,7 @@ info "Updating Hysteria configuration for HTTP authentication..." auth_block='{"type": "http", "http": {"url": "http://127.0.0.1:28262/auth", "timeout": "5s"}}' if [[ -f "$HYSTERIA_INSTALL_DIR/config.json" ]]; then jq --argjson auth_block "$auth_block" '.auth = $auth_block' "$HYSTERIA_INSTALL_DIR/config.json" > "$HYSTERIA_INSTALL_DIR/config.json.tmp" && mv "$HYSTERIA_INSTALL_DIR/config.json.tmp" "$HYSTERIA_INSTALL_DIR/config.json" - success "config.json updated to use aiohttp auth server." + success "config.json updated to use auth server." else warn "config.json not found after restore. Skipping auth update." fi @@ -103,6 +136,9 @@ pip install --upgrade pip >/dev/null pip install -r requirements.txt >/dev/null success "Python environment ready." +# ========== Compile Go Binary ========== +install_go_and_compile_auth + # ========== Systemd Services ========== info "Ensuring systemd services are configured..." if source "$HYSTERIA_INSTALL_DIR/core/scripts/scheduler.sh"; then