|
|
@@ -53,6 +53,8 @@ os_version=""
|
|
|
os_version=$(grep "^VERSION_ID" /etc/os-release | cut -d '=' -f2 | tr -d '"' | tr -d '.')
|
|
|
|
|
|
# Declare Variables
|
|
|
+xui_folder="${XUI_MAIN_FOLDER:=/usr/local/x-ui}"
|
|
|
+xui_service="${XUI_SERVICE:=/etc/systemd/system}"
|
|
|
log_folder="${XUI_LOG_FOLDER:=/var/log/x-ui}"
|
|
|
mkdir -p "${log_folder}"
|
|
|
iplimit_log_path="${log_folder}/3xipl.log"
|
|
|
@@ -127,7 +129,7 @@ update_menu() {
|
|
|
fi
|
|
|
|
|
|
wget -O /usr/bin/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh
|
|
|
- chmod +x /usr/local/x-ui/x-ui.sh
|
|
|
+ chmod +x ${xui_folder}/x-ui.sh
|
|
|
chmod +x /usr/bin/x-ui
|
|
|
|
|
|
if [[ $? == 0 ]]; then
|
|
|
@@ -176,13 +178,13 @@ uninstall() {
|
|
|
else
|
|
|
systemctl stop x-ui
|
|
|
systemctl disable x-ui
|
|
|
- rm /etc/systemd/system/x-ui.service -f
|
|
|
+ rm ${xui_service}/x-ui.service -f
|
|
|
systemctl daemon-reload
|
|
|
systemctl reset-failed
|
|
|
fi
|
|
|
|
|
|
rm /etc/x-ui/ -rf
|
|
|
- rm /usr/local/x-ui/ -rf
|
|
|
+ rm ${xui_folder}/ -rf
|
|
|
|
|
|
echo ""
|
|
|
echo -e "Uninstalled Successfully.\n"
|
|
|
@@ -210,9 +212,9 @@ reset_user() {
|
|
|
|
|
|
read -rp "Do you want to disable currently configured two-factor authentication? (y/n): " twoFactorConfirm
|
|
|
if [[ $twoFactorConfirm != "y" && $twoFactorConfirm != "Y" ]]; then
|
|
|
- /usr/local/x-ui/x-ui setting -username ${config_account} -password ${config_password} -resetTwoFactor false >/dev/null 2>&1
|
|
|
+ ${xui_folder}/x-ui setting -username ${config_account} -password ${config_password} -resetTwoFactor false >/dev/null 2>&1
|
|
|
else
|
|
|
- /usr/local/x-ui/x-ui setting -username ${config_account} -password ${config_password} -resetTwoFactor true >/dev/null 2>&1
|
|
|
+ ${xui_folder}/x-ui setting -username ${config_account} -password ${config_password} -resetTwoFactor true >/dev/null 2>&1
|
|
|
echo -e "Two factor authentication has been disabled."
|
|
|
fi
|
|
|
|
|
|
@@ -274,7 +276,7 @@ EOF
|
|
|
fi
|
|
|
|
|
|
chmod 755 ${certDir}/* >/dev/null 2>&1
|
|
|
- /usr/local/x-ui/x-ui cert -webCert "${certDir}/fullchain.pem" -webCertKey "${certDir}/privkey.pem" >/dev/null 2>&1
|
|
|
+ ${xui_folder}/x-ui cert -webCert "${certDir}/fullchain.pem" -webCertKey "${certDir}/privkey.pem" >/dev/null 2>&1
|
|
|
LOGI "Self-signed certificate configured. Browsers will show a warning."
|
|
|
return 0
|
|
|
}
|
|
|
@@ -291,7 +293,7 @@ reset_webbasepath() {
|
|
|
config_webBasePath=$(gen_random_string 18)
|
|
|
|
|
|
# Apply the new web base path setting
|
|
|
- /usr/local/x-ui/x-ui setting -webBasePath "${config_webBasePath}" >/dev/null 2>&1
|
|
|
+ ${xui_folder}/x-ui setting -webBasePath "${config_webBasePath}" >/dev/null 2>&1
|
|
|
|
|
|
echo -e "Web base path has been reset to: ${green}${config_webBasePath}${plain}"
|
|
|
echo -e "${green}Please use the new web base path to access the panel.${plain}"
|
|
|
@@ -306,13 +308,13 @@ reset_config() {
|
|
|
fi
|
|
|
return 0
|
|
|
fi
|
|
|
- /usr/local/x-ui/x-ui setting -reset
|
|
|
+ ${xui_folder}/x-ui setting -reset
|
|
|
echo -e "All panel settings have been reset to default."
|
|
|
restart
|
|
|
}
|
|
|
|
|
|
check_config() {
|
|
|
- local info=$(/usr/local/x-ui/x-ui setting -show true)
|
|
|
+ local info=$(${xui_folder}/x-ui setting -show true)
|
|
|
if [[ $? != 0 ]]; then
|
|
|
LOGE "get current settings error, please check logs"
|
|
|
show_menu
|
|
|
@@ -322,7 +324,7 @@ check_config() {
|
|
|
|
|
|
local existing_webBasePath=$(echo "$info" | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
local existing_port=$(echo "$info" | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
- local existing_cert=$(/usr/local/x-ui/x-ui setting -getCert true | grep 'cert:' | awk -F': ' '{print $2}' | tr -d '[:space:]')
|
|
|
+ local existing_cert=$(${xui_folder}/x-ui setting -getCert true | grep 'cert:' | awk -F': ' '{print $2}' | tr -d '[:space:]')
|
|
|
local server_ip=$(curl -s --max-time 3 https://api.ipify.org)
|
|
|
if [ -z "$server_ip" ]; then
|
|
|
server_ip=$(curl -s --max-time 3 https://4.ident.me)
|
|
|
@@ -363,7 +365,7 @@ set_port() {
|
|
|
LOGD "Cancelled"
|
|
|
before_show_menu
|
|
|
else
|
|
|
- /usr/local/x-ui/x-ui setting -port ${port}
|
|
|
+ ${xui_folder}/x-ui setting -port ${port}
|
|
|
echo -e "The port is set, Please restart the panel now, and use the new port ${green}${port}${plain} to access web panel"
|
|
|
confirm_restart
|
|
|
fi
|
|
|
@@ -655,7 +657,7 @@ check_status() {
|
|
|
return 1
|
|
|
fi
|
|
|
else
|
|
|
- if [[ ! -f /etc/systemd/system/x-ui.service ]]; then
|
|
|
+ if [[ ! -f ${xui_service}/x-ui.service ]]; then
|
|
|
return 2
|
|
|
fi
|
|
|
temp=$(systemctl status x-ui | grep Active | awk '{print $3}' | cut -d "(" -f2 | cut -d ")" -f1)
|
|
|
@@ -977,7 +979,7 @@ update_geo() {
|
|
|
echo -e "${green}\t0.${plain} Back to Main Menu"
|
|
|
read -rp "Choose an option: " choice
|
|
|
|
|
|
- cd /usr/local/x-ui/bin
|
|
|
+ cd ${xui_folder}/bin
|
|
|
|
|
|
case "$choice" in
|
|
|
0)
|
|
|
@@ -1119,7 +1121,7 @@ ssl_cert_issue_main() {
|
|
|
local webKeyFile="/root/cert/${domain}/privkey.pem"
|
|
|
|
|
|
if [[ -f "${webCertFile}" && -f "${webKeyFile}" ]]; then
|
|
|
- /usr/local/x-ui/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
+ ${xui_folder}/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
echo "Panel paths set for domain: $domain"
|
|
|
echo " - Certificate File: $webCertFile"
|
|
|
echo " - Private Key File: $webKeyFile"
|
|
|
@@ -1154,8 +1156,8 @@ ssl_cert_issue_main() {
|
|
|
ssl_cert_issue_for_ip() {
|
|
|
LOGI "Starting automatic SSL certificate generation for server IP..."
|
|
|
|
|
|
- local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
- local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
+ local existing_webBasePath=$(${xui_folder}/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
+ local existing_port=$(${xui_folder}/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
|
|
|
# Get server IP
|
|
|
local server_ip=$(curl -s --max-time 3 https://api.ipify.org)
|
|
|
@@ -1265,7 +1267,7 @@ ssl_cert_issue_for_ip() {
|
|
|
local webKeyFile="/root/cert/${server_ip}/privkey.pem"
|
|
|
|
|
|
if [[ -f "$webCertFile" && -f "$webKeyFile" ]]; then
|
|
|
- /usr/local/x-ui/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
+ ${xui_folder}/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
LOGI "Certificate configured for panel"
|
|
|
LOGI " - Certificate File: $webCertFile"
|
|
|
LOGI " - Private Key File: $webKeyFile"
|
|
|
@@ -1280,8 +1282,8 @@ ssl_cert_issue_for_ip() {
|
|
|
}
|
|
|
|
|
|
ssl_cert_issue() {
|
|
|
- local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
- local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
+ local existing_webBasePath=$(${xui_folder}/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
+ local existing_port=$(${xui_folder}/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
# check for acme.sh first
|
|
|
if ! command -v ~/.acme.sh/acme.sh &>/dev/null; then
|
|
|
echo "acme.sh could not be found. we will install it"
|
|
|
@@ -1446,7 +1448,7 @@ ssl_cert_issue() {
|
|
|
local webKeyFile="/root/cert/${domain}/privkey.pem"
|
|
|
|
|
|
if [[ -f "$webCertFile" && -f "$webKeyFile" ]]; then
|
|
|
- /usr/local/x-ui/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
+ ${xui_folder}/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
LOGI "Panel paths set for domain: $domain"
|
|
|
LOGI " - Certificate File: $webCertFile"
|
|
|
LOGI " - Private Key File: $webKeyFile"
|
|
|
@@ -1461,8 +1463,8 @@ ssl_cert_issue() {
|
|
|
}
|
|
|
|
|
|
ssl_cert_issue_CF() {
|
|
|
- local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
- local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
+ local existing_webBasePath=$(${xui_folder}/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
+ local existing_port=$(${xui_folder}/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
LOGI "****** Instructions for Use ******"
|
|
|
LOGI "Follow the steps below to complete the process:"
|
|
|
LOGI "1. Cloudflare Registered E-mail."
|
|
|
@@ -1586,7 +1588,7 @@ ssl_cert_issue_CF() {
|
|
|
local webKeyFile="${certPath}/privkey.pem"
|
|
|
|
|
|
if [[ -f "$webCertFile" && -f "$webKeyFile" ]]; then
|
|
|
- /usr/local/x-ui/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
+ ${xui_folder}/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile"
|
|
|
LOGI "Panel paths set for domain: $CF_Domain"
|
|
|
LOGI " - Certificate File: $webCertFile"
|
|
|
LOGI " - Private Key File: $webKeyFile"
|
|
|
@@ -2050,11 +2052,11 @@ SSH_port_forwarding() {
|
|
|
break
|
|
|
fi
|
|
|
done
|
|
|
- local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
- local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
- local existing_listenIP=$(/usr/local/x-ui/x-ui setting -getListen true | grep -Eo 'listenIP: .+' | awk '{print $2}')
|
|
|
- local existing_cert=$(/usr/local/x-ui/x-ui setting -getCert true | grep -Eo 'cert: .+' | awk '{print $2}')
|
|
|
- local existing_key=$(/usr/local/x-ui/x-ui setting -getCert true | grep -Eo 'key: .+' | awk '{print $2}')
|
|
|
+ local existing_webBasePath=$(${xui_folder}/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}')
|
|
|
+ local existing_port=$(${xui_folder}/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
|
|
|
+ local existing_listenIP=$(${xui_folder}/x-ui setting -getListen true | grep -Eo 'listenIP: .+' | awk '{print $2}')
|
|
|
+ local existing_cert=$(${xui_folder}/x-ui setting -getCert true | grep -Eo 'cert: .+' | awk '{print $2}')
|
|
|
+ local existing_key=$(${xui_folder}/x-ui setting -getCert true | grep -Eo 'key: .+' | awk '{print $2}')
|
|
|
|
|
|
local config_listenIP=""
|
|
|
local listen_choice=""
|
|
|
@@ -2095,7 +2097,7 @@ SSH_port_forwarding() {
|
|
|
config_listenIP="127.0.0.1"
|
|
|
[[ "$listen_choice" == "2" ]] && read -rp "Enter custom IP to listen on: " config_listenIP
|
|
|
|
|
|
- /usr/local/x-ui/x-ui setting -listenIP "${config_listenIP}" >/dev/null 2>&1
|
|
|
+ ${xui_folder}/x-ui setting -listenIP "${config_listenIP}" >/dev/null 2>&1
|
|
|
echo -e "${green}listen IP has been set to ${config_listenIP}.${plain}"
|
|
|
echo -e "\n${green}SSH Port Forwarding Configuration:${plain}"
|
|
|
echo -e "Standard SSH command:"
|
|
|
@@ -2111,7 +2113,7 @@ SSH_port_forwarding() {
|
|
|
fi
|
|
|
;;
|
|
|
2)
|
|
|
- /usr/local/x-ui/x-ui setting -listenIP 0.0.0.0 >/dev/null 2>&1
|
|
|
+ ${xui_folder}/x-ui setting -listenIP 0.0.0.0 >/dev/null 2>&1
|
|
|
echo -e "${green}Listen IP has been cleared.${plain}"
|
|
|
restart
|
|
|
;;
|