
#!/bin/bash
#====================================================
# ATP Hosting 24 - cPanel Licensing System
# Domain: atphosting24.com
#====================================================

# Color definitions
RED=\'\033[0;31m\'
GREEN=\'\033[0;32m\'
YELLOW=\'\033[1;33m\'
BLUE=\'\033[0;34m\'
CYAN=\'\033[0;36m\'
NC=\'\033[0m\' # No Color

SCRIPT_DOMAIN="atphosting24.com"
SCRIPT_URL="https://script.atphosting24.com"
INSTALL_DIR="/usr/local/src/atphosting24"
CPANEL_LICENSE_DIR="/usr/local/cpanel/cpanel_lsel"
UPDATE_SCRIPT="/usr/bin/update_cpanelv2"

# Print banner
print_banner() {
    echo -e "${CYAN}"
    echo "╔══════════════════════════════════════════════════════════╗"
    echo "║                                                          ║"
    echo "║          ATP Hosting 24 - cPanel Licensing System        ║"
    echo "║                  script.atphosting24.com                 ║"
    echo "║                                                          ║"
    echo "╚══════════════════════════════════════════════════════════╝"
    echo -e "${NC}"
}

# Log function
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

log_step() {
    echo -e "${BLUE}[STEP]${NC} $1"
}

# Check if running as root
check_root() {
    if [[ $EUID -ne 0 ]]; then
        log_error "This script must be run as root"
        exit 1
    fi
}

# Check OS
check_os() {
    if [[ -f /etc/redhat-release ]]; then
        OS="centos"
        log_info "Detected OS: CentOS/AlmaLinux/Rocky Linux"
    elif [[ -f /etc/lsb-release ]]; then
        OS="ubuntu"
        log_info "Detected OS: Ubuntu/Debian"
    else
        OS="unknown"
        log_warn "Unknown OS detected"
    fi
}

# Check if cPanel is installed
check_cpanel() {
    if [[ -d /usr/local/cpanel ]]; then
        log_info "cPanel installation detected"
        return 0
    else
        log_error "cPanel is not installed. Please install cPanel first."
        exit 1
    fi
}

# Remove other licensing systems
remove_other_licensing() {
    log_step "Removing other licensing systems..."

    # Remove known competing license systems
    local license_dirs=(
        "/usr/local/cpanel/cpanel_lsel"
        "/usr/local/src/licensedl"
        "/usr/local/src/cpanel_license"
        "/root/cpanel_license"
    )

    for dir in "${license_dirs[@]}"; do
        if [[ -d "$dir" ]]; then
            log_info "Removing existing license directory: $dir"
            rm -rf "$dir"
        fi
    done

    # Remove old update scripts from other providers
    local old_scripts=(
        "/usr/bin/update_cpanel_license"
        "/usr/bin/cpanel_license_update"
    )

    for script in "${old_scripts[@]}"; do
        if [[ -f "$script" ]]; then
            log_info "Removing old script: $script"
            rm -f "$script"
        fi
    done
}

# Install licensing system
install_license() {
    log_step "Installing ATP Hosting 24 cPanel Licensing System..."

    # Create install directory
    mkdir -p "$INSTALL_DIR"

    # Remove other licensing systems first
    remove_other_licensing

    # Create cPanel license directory
    mkdir -p "$CPANEL_LICENSE_DIR"

    # Download and set up license files
    log_info "Downloading license files..."

    # Create the main license file
    cat > "$CPANEL_LICENSE_DIR/license" << \'LICENSEEOF\'
# ATP Hosting 24 - cPanel License
# Licensed via script.atphosting24.com
LICENSE_TYPE=internal
LICENSE_STATUS=active
LICENSE_KEY=ATPHOSTING24-CPANEL-INTERNAL
LICENSE_ISSUED=$(date +%Y-%m-%d)
LICENSE_EXPIRES=2099-12-31
LICENSE_SERVER=script.atphosting24.com
LICENSEEOF

    # Create license config
    cat > "$CPANEL_LICENSE_DIR/config" << \'CONFIGEOF\'
# ATP Hosting 24 License Configuration
LICENSE_PROVIDER=atphosting24
LICENSE_UPDATE_URL=https://script.atphosting24.com
LICENSE_CHECK_INTERVAL=86400
AUTO_UPDATE=true
CONFIGEOF

    # Set permissions
    chmod 600 "$CPANEL_LICENSE_DIR/license"
    chmod 600 "$CPANEL_LICENSE_DIR/config"
    chown root:root "$CPANEL_LICENSE_DIR/license"
    chown root:root "$CPANEL_LICENSE_DIR/config"

    log_info "License files installed successfully"

    # Patch cPanel license check
    patch_cpanel_license
}

# Patch cPanel license verification
patch_cpanel_license() {
    log_step "Patching cPanel license verification..."

    local cpanel_bin="/usr/local/cpanel/cpanel"
    local lsel_file="/usr/local/cpanel/cpanel_lsel/lsel"

    # Create lsel binary replacement
    mkdir -p /usr/local/cpanel/cpanel_lsel/

    cat > /usr/local/cpanel/cpanel_lsel/lsel << \'LSELEOF\'
#!/usr/bin/bash
# ATP Hosting 24 - License Check Bypass
# This script returns active license status

echo "Active"
echo "License Type: Internal"
echo "Provider: ATP Hosting 24"
echo "Server: script.atphosting24.com"
exit 0
LSELEOF

    chmod 755 /usr/local/cpanel/cpanel_lsel/lsel
    chown root:root /usr/local/cpanel/cpanel_lsel/lsel

    # Create lsof wrapper if needed
    if [[ -f /usr/local/cpanel/cpanel_lsel/lsof ]]; then
        mv /usr/local/cpanel/cpanel_lsel/lsof /usr/local/cpanel/cpanel_lsel/lsof.bak 2>/dev/null
    fi

    cat > /usr/local/cpanel/cpanel_lsel/lsof << \'LSOFEOF\'
#!/usr/bin/bash
# ATP Hosting 24 - lsof wrapper
/usr/sbin/lsof "$@"
LSOFEOF

    chmod 755 /usr/local/cpanel/cpanel_lsel/lsof

    # Modify cPanel license check files
    modify_license_checks

    log_info "License verification patched successfully"
}

# Modify cPanel license check files
modify_license_checks() {
    log_step "Modifying cPanel license check files..."

    # Backup original files
    local files_to_patch=(
        "/usr/local/cpanel/cpanel"
        "/usr/local/cpanel/bin/check_cpanel_lp"
        "/usr/local/cpanel/whostmgr/bin/licensecheck"
    )

    for file in "${files_to_patch[@]}"; do
        if [[ -f "$file" && ! -f "${file}.orig_atphosting24" ]]; then
            cp "$file" "${file}.orig_atphosting24"
            log_info "Backed up: $file"
        fi
    done

    # Patch the license check binary
    if [[ -f /usr/local/cpanel/cpanel ]]; then
        # Replace license check strings in binary
        if command -v perl &> /dev/null; then
            perl -pi -e \'s/cpanel\.net/atphosting24\.com/g\' /usr/local/cpanel/cpanel 2>/dev/null || true
            perl -pi -e \'s/verify\.cpanel\.net/script\.atphosting24\.com/g\' /usr/local/cpanel/cpanel 2>/dev/null || true
        fi
    fi

    # Create license check wrapper
    cat > /usr/local/cpanel/bin/check_cpanel_lp << \'CHECKEOF\'
#!/usr/bin/bash
# ATP Hosting 24 - License Check
echo "1"
echo "Active"
echo "License: ATP Hosting 24 Internal"
exit 0
CHECKEOF

    chmod 755 /usr/local/cpanel/bin/check_cpanel_lp

    # Create whostmgr license check
    if [[ -d /usr/local/cpanel/whostmgr/bin/ ]]; then
        cat > /usr/local/cpanel/whostmgr/bin/licensecheck << \'WHECKEOF\'
#!/usr/bin/bash
# ATP Hosting 24 - WHM License Check
echo "1"
echo "Active"  
echo "License: ATP Hosting 24 Internal"
exit 0
WHECKEOF

        chmod 755 /usr/local/cpanel/whostmgr/bin/licensecheck
    fi

    # Update cpanel config
    if [[ -f /wwwacct.conf ]]; then
        log_info "Updating cPanel configuration..."
    fi
}

# Set up auto-update cron
setup_cron() {
    log_step "Setting up auto-update cron job..."

    # Remove old cron entries
    crontab -l 2>/dev/null | grep -v "update_cpanelv2" | crontab -

    # Add new cron entry - run every 12 hours
    (crontab -l 2>/dev/null; echo "0 */12 * * * /usr/bin/update_cpanelv2 >> /var/log/atphosting24_license.log 2>&1") | crontab -

    log_info "Auto-update cron job configured (every 12 hours)"
}

# Download and install the update script
install_update_script() {
    log_step "Installing update script..."

    cat > "$UPDATE_SCRIPT" << \'UPDATEEOF\'
#!/bin/bash
# ATP Hosting 24 - cPanel License Update Script
# /usr/bin/update_cpanelv2

SCRIPT_URL="https://script.atphosting24.com"
CPANEL_LICENSE_DIR="/usr/local/cpanel/cpanel_lsel"
LOG_FILE="/var/log/atphosting24_license.log"

# Handle command line arguments
case "$1" in
    --Uninstall)
        echo "Uninstalling ATP Hosting 24 cPanel Licensing System..."

        # Remove license directory
        rm -rf "$CPANEL_LICENSE_DIR"

        # Remove update script
        rm -f /usr/bin/update_cpanelv2

        # Remove cron job
        crontab -l 2>/dev/null | grep -v "update_cpanelv2" | crontab -

        # Remove install directory
        rm -rf /usr/local/src/atphosting24

        # Restore original files if backed up
        for file in /usr/local/cpanel/cpanel /usr/local/cpanel/bin/check_cpanel_lp /usr/local/cpanel/whostmgr/bin/licensecheck; do
            if [[ -f "${file}.orig_atphosting24" ]]; then
                mv "${file}.orig_atphosting24" "$file"
                echo "Restored: $file"
            fi
        done

        # Restart cPanel
        if [[ -f /usr/local/cpanel/cpanel ]]; then
            /usr/local/cpanel/cpanel -restart 2>/dev/null || systemctl restart cpanel 2>/dev/null || true
        fi

        echo "ATP Hosting 24 Licensing System has been uninstalled."
        exit 0
        ;;
    --ssl-services)
        echo "Installing SSL for hostname..."

        # Get hostname
        HOSTNAME=$(hostname -f 2>/dev/null || hostname)

        # Install SSL using cPanel\'s AutoSSL or Let\'s Encrypt
        if [[ -f /usr/local/cpanel/bin/autossl_check ]]; then
            /usr/local/cpanel/bin/autossl_check --all 2>/dev/null
        fi

        # Generate self-signed SSL if AutoSSL not available
        if [[ ! -f /var/cpanel/ssl/cpanel/cpanel.pem ]]; then
            /usr/local/cpanel/bin/cpkeyclt 2>/dev/null || true
        fi

        # Restart cPanel services
        /usr/local/cpanel/cpanel -restart 2>/dev/null || systemctl restart cpanel 2>/dev/null || true

        echo "SSL installation completed for hostname: $HOSTNAME"
        exit 0
        ;;
    --status)
        echo "ATP Hosting 24 cPanel Licensing System Status:"
        echo "-------------------------------------------"
        if [[ -d "$CPANEL_LICENSE_DIR" ]]; then
            echo "License Directory: Installed"
            if [[ -f "$CPANEL_LICENSE_DIR/license" ]]; then
                echo "License File: Present"
                cat "$CPANEL_LICENSE_DIR/license"
            fi
        else
            echo "License Directory: Not Found"
        fi
        echo "Update Script: $(ls -la /usr/bin/update_cpanelv2 2>/dev/null || echo 'Not Found')"
        echo "Cron Job: $(crontab -l 2>/dev/null | grep update_cpanelv2 || echo 'Not Found')"
        exit 0
        ;;
    --help|-h)
        echo "ATP Hosting 24 - cPanel License Update Script"
        echo ""
        echo "Usage: update_cpanelv2 [OPTION]"
        echo ""
        echo "Options:"
        echo "  (no option)      Update the licensing system"
        echo "  --Uninstall      Uninstall the licensing system"
        echo "  --ssl-services   Install SSL for hostname"
        echo "  --status         Show licensing system status"
        echo "  --help, -h       Show this help message"
        echo ""
        echo "Examples:"
        echo "  update_cpanelv2              # Update license"
        echo "  update_cpanelv2 --Uninstall  # Uninstall"
        echo "  update_cpanelv2 --ssl-services  # Install SSL"
        exit 0
        ;;
esac

# Default: Update licensing system
echo "$(date): Starting ATP Hosting 24 license update..." >> "$LOG_FILE"

# Re-apply license patches
if [[ -d /usr/local/cpanel ]]; then
    # Re-create license directory if missing
    mkdir -p "$CPANEL_LICENSE_DIR"

    # Re-create license file
    if [[ ! -f "$CPANEL_LICENSE_DIR/license" ]]; then
        cat > "$CPANEL_LICENSE_DIR/license" << LICEOF
# ATP Hosting 24 - cPanel License
LICENSE_TYPE=internal
LICENSE_STATUS=active
LICENSE_KEY=ATPHOSTING24-CPANEL-INTERNAL
LICENSE_ISSUED=$(date +%Y-%m-%d)
LICENSE_EXPIRES=2099-12-31
LICENSE_SERVER=script.atphosting24.com
LICEOF
        chmod 600 "$CPANEL_LICENSE_DIR/license"
    fi

    # Re-create lsel
    if [[ ! -f /usr/local/cpanel/cpanel_lsel/lsel ]]; then
        echo \'#!/usr/bin/bash\' > /usr/local/cpanel/cpanel_lsel/lsel
        echo \'echo "Active"\' >> /usr/local/cpanel/cpanel_lsel/lsel
        echo \'exit 0\' >> /usr/local/cpanel/cpanel_lsel/lsel
        chmod 755 /usr/local/cpanel/cpanel_lsel/lsel
    fi

    # Re-patch license checks
    if [[ -f /usr/local/cpanel/bin/check_cpanel_lp ]]; then
        echo \'#!/usr/bin/bash\' > /usr/local/cpanel/bin/check_cpanel_lp
        echo \'echo "1"\' >> /usr/local/cpanel/bin/check_cpanel_lp
        echo \'echo "Active"\' >> /usr/local/cpanel/bin/check_cpanel_lp
        echo \'exit 0\' >> /usr/local/cpanel/bin/check_cpanel_lp
        chmod 755 /usr/local/cpanel/bin/check_cpanel_lp
    fi

    # Restart cPanel to apply changes
    /usr/local/cpanel/cpanel -restart 2>/dev/null || systemctl restart cpanel 2>/dev/null || true

    echo "$(date): License update completed successfully" >> "$LOG_FILE"
    echo "ATP Hosting 24 License System updated successfully."
else
    echo "$(date): cPanel not found, skipping update" >> "$LOG_FILE"
    echo "cPanel is not installed. Cannot update license."
    exit 1
fi
UPDATEEOF

    chmod 755 "$UPDATE_SCRIPT"
    chown root:root "$UPDATE_SCRIPT"

    log_info "Update script installed to $UPDATE_SCRIPT"
}

# Restart cPanel services
restart_cpanel() {
    log_step "Restarting cPanel services..."

    # Restart cPanel
    /usr/local/cpanel/cpanel -restart 2>/dev/null || systemctl restart cpanel 2>/dev/null || true

    # Restart related services
    systemctl restart cpaneld 2>/dev/null || true
    systemctl restart cphulkd 2>/dev/null || true
    systemctl restart tailwatchd 2>/dev/null || true

    log_info "cPanel services restarted"
}

# Main installation
main() {
    print_banner
    check_root
    check_os

    # Parse arguments
    PRODUCT=""
    if [[ $# -gt 0 ]]; then
        PRODUCT="$1"
    fi

    if [[ "$PRODUCT" == "cPanel" ]]; then
        check_cpanel
        install_license
        install_update_script
        setup_cron
        restart_cpanel

        echo ""
        log_info "=========================================="
        log_info "  ATP Hosting 24 cPanel License Installed!"
        log_info "=========================================="
        echo ""
        log_info "Usage:"
        log_info "  Update Licensing System:    /usr/bin/update_cpanelv2"
        log_info "  Uninstall Licensing System: /usr/bin/update_cpanelv2 --Uninstall"
        log_info "  Install SSL for hostname:   update_cpanelv2 --ssl-services"
        log_info "  Remove other licensing:     curl https://script.atphosting24.com/scripts/remove_reseller.sh | bash"
        echo ""
        log_info "Your cPanel is now licensed via script.atphosting24.com"
    else
        echo ""
        log_warn "No product specified."
        echo ""
        echo "Usage: bash <(curl -4 https://script.atphosting24.com/pre.sh) <product>"
        echo ""
        echo "Available products:"
        echo "  cPanel    - Install cPanel licensing system"
        echo ""
        echo "Example:"
        echo "  bash <(curl -4 https://script.atphosting24.com/pre.sh) cPanel"
    fi
}

main "$@"
