Browse Source

Update x-ui.sh

MHSanaei 2 years ago
parent
commit
bb21e3c14b
1 changed files with 181 additions and 51 deletions
  1. 181 51
      x-ui.sh

+ 181 - 51
x-ui.sh

@@ -408,21 +408,143 @@ show_xray_status() {
     fi
 }
 
+#this will be an entrance for ssl cert issue
+#here we can provide two different methods to issue cert
+#first.standalone mode second.DNS API mode
 ssl_cert_issue() {
+    local method=""
     echo -E ""
-    LOGD "******Instructions for use******"
-    LOGI "This Acme script requires the following data:"
-    LOGI "1.Cloudflare Registered e-mail"
-    LOGI "2.Cloudflare Global API Key"
-    LOGI "3.The domain name that has been resolved dns to the current server by Cloudflare"
-    LOGI "4.The script applies for a certificate. The default installation path is /root/cert "
-    confirm "Confirmed?[y/n]" "y"
+    LOGD "********Usage********"
+    LOGI "this shell script will use acme to help issue certs."
+    LOGI "here we provide two methods for issuing certs:"
+    LOGI "method 1:acme standalone mode,need to keep port:80 open"
+    LOGI "method 2:acme DNS API mode,need provide Cloudflare Global API Key"
+    LOGI "recommend method 2 first,if it fails,you can try method 1."
+    LOGI "certs will be installed in /root/cert directory"
+    read -p "please choose which method do you want,type 1 or 2": method
+    LOGI "you choosed method:${method}"
+
+    if [ "${method}" == "1" ]; then
+        ssl_cert_issue_standalone
+    elif [ "${method}" == "2" ]; then
+        ssl_cert_issue_by_cloudflare
+    else
+        LOGE "invalid input,please check it..."
+        exit 1
+    fi
+}
+
+install_acme() {
+    cd ~
+    LOGI "install acme..."
+    curl https://get.acme.sh | sh
+    if [ $? -ne 0 ]; then
+        LOGE "install acme failed"
+        return 1
+    else
+        LOGI "install acme succeed"
+    fi
+    return 0
+}
+
+#method for standalone mode
+ssl_cert_issue_standalone() {
+    #install acme first
+    install_acme
+    if [ $? -ne 0 ]; then
+        LOGE "install acme failed,please check logs"
+        exit 1
+    fi
+    #install socat second
+    if [[ x"${release}" == x"centos" ]]; then
+        yum install socat -y
+    else
+        apt install socat -y
+    fi
+    if [ $? -ne 0 ]; then
+        LOGE "install socat failed,please check logs"
+        exit 1
+    else
+        LOGI "install socat succeed..."
+    fi
+    #creat a directory for install cert
+    certPath=/root/cert
+    if [ ! -d "$certPath" ]; then
+        mkdir $certPath
+    else
+        rm -rf $certPath
+        mkdir $certPath
+    fi
+    #get the domain here,and we need verify it
+    local domain=""
+    read -p "please input your domain:" domain
+    LOGD "your domain is:${domain},check it..."
+    #here we need to judge whether there exists cert already
+    local currentCert=$(~/.acme.sh/acme.sh --list | tail -1 | awk '{print $1}')
+    if [ ${currentCert} == ${domain} ]; then
+        local certInfo=$(~/.acme.sh/acme.sh --list)
+        LOGE "system already have certs here,can not issue again,current certs details:"
+        LOGI "$certInfo"
+        exit 1
+    else
+        LOGI "your domain is ready for issuing cert now..."
+    fi
+    #get needed port here
+    local WebPort=80
+    read -p "please choose which port do you use,default will be 80 port:" WebPort
+    if [[ ${WebPort} -gt 65535 || ${WebPort} -lt 1 ]]; then
+        LOGE "your input ${WebPort} is invalid,will use default port"
+    fi
+    LOGI "will use port:${WebPort} to issue certs,please make sure this port is open..."
+    #NOTE:This should be handled by user
+    #open the port and kill the occupied progress
+    ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
+    ~/.acme.sh/acme.sh --issue -d ${domain} --standalone --httpport ${WebPort}
+    if [ $? -ne 0 ]; then
+        LOGE "issue certs failed,please check logs"
+        rm -rf ~/.acme.sh/${domain}
+        exit 1
+    else
+        LOGE "issue certs succeed,installing certs..."
+    fi
+    #install cert
+    ~/.acme.sh/acme.sh --installcert -d ${domain} --ca-file /root/cert/ca.cer \
+        --cert-file /root/cert/${domain}.cer --key-file /root/cert/${domain}.key \
+        --fullchain-file /root/cert/fullchain.cer
+
+    if [ $? -ne 0 ]; then
+        LOGE "install certs failed,exit"
+        rm -rf ~/.acme.sh/${domain}
+        exit 1
+    else
+        LOGI "install certs succeed,enable auto renew..."
+    fi
+    ~/.acme.sh/acme.sh --upgrade --auto-upgrade
+    if [ $? -ne 0 ]; then
+        LOGE "auto renew failed,certs details:"
+        ls -lah cert
+        chmod 755 $certPath
+        exit 1
+    else
+        LOGI "auto renew succeed,certs details:"
+        ls -lah cert
+        chmod 755 $certPath
+    fi
+
+}
+
+#method for DNS API mode
+ssl_cert_issue_by_cloudflare() {
+    echo -E ""
+    LOGD "******Preconditions******"
+    LOGI "1.need Cloudflare account associated email"
+    LOGI "2.need Cloudflare Global API Key"
+    LOGI "3.your domain use Cloudflare as resolver"
+    confirm "I have confirmed all these info above[y/n]" "y"
     if [ $? -eq 0 ]; then
-        cd ~
-        LOGI "Install Acme-Script"
-        curl https://get.acme.sh | sh
+        install_acme
         if [ $? -ne 0 ]; then
-            LOGE "Failed to install acme script"
+            LOGE "install acme failed,please check logs"
             exit 1
         fi
         CF_Domain=""
@@ -435,34 +557,46 @@ ssl_cert_issue() {
             rm -rf $certPath
             mkdir $certPath
         fi
-        LOGD "Please set a domain name:"
+        LOGD "please input your domain:"
         read -p "Input your domain here:" CF_Domain
-        LOGD "Your domain name is set to:${CF_Domain}"
-        LOGD "Please set the API key:"
+        LOGD "your domain is:${CF_Domain},check it..."
+        #here we need to judge whether there exists cert already
+        local currentCert=$(~/.acme.sh/acme.sh --list | tail -1 | awk '{print $1}')
+        if [ ${currentCert} == ${CF_Domain} ]; then
+            local certInfo=$(~/.acme.sh/acme.sh --list)
+            LOGE "system already have certs here,can not issue again,current certs details:"
+            LOGI "$certInfo"
+            exit 1
+        else
+            LOGI "your domain is ready for issuing cert now..."
+        fi
+        LOGD "please inout your cloudflare global API key:"
         read -p "Input your key here:" CF_GlobalKey
-        LOGD "Your API key is:${CF_GlobalKey}"
-        LOGD "Please set up registered email:"
+        LOGD "your cloudflare global API key is:${CF_GlobalKey}"
+        LOGD "please input your cloudflare account email:"
         read -p "Input your email here:" CF_AccountEmail
-        LOGD "Your registered email address is:${CF_AccountEmail}"
+        LOGD "your cloudflare account email:${CF_AccountEmail}"
         ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
         if [ $? -ne 0 ]; then
-            LOGE "Default CA, Lets'Encrypt fail, script exiting..."
+            LOGE "change the default CA to Lets'Encrypt failed,exit"
             exit 1
         fi
         export CF_Key="${CF_GlobalKey}"
         export CF_Email=${CF_AccountEmail}
         ~/.acme.sh/acme.sh --issue --dns dns_cf -d ${CF_Domain} -d *.${CF_Domain} --log
         if [ $? -ne 0 ]; then
-            LOGE "Certificate issuance failed, script exiting..."
+            LOGE "issue cert failed,exit"
+            rm -rf ~/.acme.sh/${CF_Domain}
             exit 1
         else
             LOGI "Certificate issued Successfully, Installing..."
         fi
         ~/.acme.sh/acme.sh --installcert -d ${CF_Domain} -d *.${CF_Domain} --ca-file /root/cert/ca.cer \
-        --cert-file /root/cert/${CF_Domain}.cer --key-file /root/cert/${CF_Domain}.key \
-        --fullchain-file /root/cert/fullchain.cer
+            --cert-file /root/cert/${CF_Domain}.cer --key-file /root/cert/${CF_Domain}.key \
+            --fullchain-file /root/cert/fullchain.cer
         if [ $? -ne 0 ]; then
-            LOGE "Certificate installation failed, script exiting..."
+            LOGE "install cert failed,exit"
+            rm -rf ~/.acme.sh/${CF_Domain}
             exit 1
         else
             LOGI "Certificate installed Successfully,Turning on automatic updates..."
@@ -486,46 +620,45 @@ ssl_cert_issue() {
 show_usage() {
     echo "x-ui control menu usages: "
     echo "------------------------------------------"
-    echo "x-ui              - Enter     Admin menu"
-    echo "x-ui start        - Start     x-ui"
-    echo "x-ui stop         - Stop      x-ui"
-    echo "x-ui restart      - Restart   x-ui"
-    echo "x-ui status       - Show      x-ui status"
-    echo "x-ui enable       - Enable    x-ui on system startup"
-    echo "x-ui disable      - Disable   x-ui on system startup"
-    echo "x-ui log          - Check     x-ui logs"
-    echo "x-ui v2-ui        - Migrate   v2-ui Account data to x-ui"
-    echo "x-ui update       - Update    x-ui"
-    echo "x-ui install      - Install   x-ui"
-    echo "x-ui uninstall    - Uninstall x-ui"
+    echo -e "x-ui              - Enter control menu"
+    echo -e "x-ui start        - Start x-ui "
+    echo -e "x-ui stop         - Stop  x-ui "
+    echo -e "x-ui restart      - Restart x-ui "
+    echo -e "x-ui status       - Show x-ui status"
+    echo -e "x-ui enable       - Enable x-ui on system startup"
+    echo -e "x-ui disable      - Disable x-ui on system startup"
+    echo -e "x-ui log          - Check x-ui logs"
+    echo -e "x-ui update       - Update x-ui "
+    echo -e "x-ui install      - Install x-ui "
+    echo -e "x-ui uninstall    - Uninstall x-ui "
     echo "------------------------------------------"
 }
 
 show_menu() {
     echo -e "
-  ${green}x-ui Panel Management Script${plain}
-  ${green}0.${plain} exit script
+  ${green}3x-ui Panel Management Script${plain}
+  ${green}0.${plain} Exit Script
 ————————————————
   ${green}1.${plain} Install x-ui
   ${green}2.${plain} Update x-ui
   ${green}3.${plain} Uninstall x-ui
 ————————————————
-  ${green}4.${plain} Reset username and password
-  ${green}5.${plain} Reset panel settings
-  ${green}6.${plain} Set panel port
-  ${green}7.${plain} View current panel settings
+  ${green}4.${plain} Reset Username And Password
+  ${green}5.${plain} Reset Panel Settings
+  ${green}6.${plain} Change Panel Port
+  ${green}7.${plain} View Current Panel Settings
 ————————————————
   ${green}8.${plain} Start x-ui
-  ${green}9.${plain} stop x-ui
-  ${green}10.${plain} Reboot x-ui
-  ${green}11.${plain} Check x-ui state
-  ${green}12.${plain} Check x-ui logs
+  ${green}9.${plain} Stop x-ui
+  ${green}10.${plain} Restart x-ui
+  ${green}11.${plain} Check x-ui Status
+  ${green}12.${plain} Check x-ui Logs
 ————————————————
-  ${green}13.${plain} set x-ui Autostart
-  ${green}14.${plain} Cancel x-ui Autostart
+  ${green}13.${plain} Enable x-ui On Sysyem Startup
+  ${green}14.${plain} Disabel x-ui On Sysyem Startup
 ————————————————
-  ${green}15.${plain} 一A key installation bbr (latest kernel)
-  ${green}16.${plain} 一Apply for an SSL certificate with one click(acme script)
+  ${green}15.${plain} Enable BBR 
+  ${green}16.${plain} Issuse Certs
  "
     show_status
     echo && read -p "Please enter your selection [0-16]: " num
@@ -611,9 +744,6 @@ if [[ $# > 0 ]]; then
     "log")
         check_install 0 && show_log 0
         ;;
-    "v2-ui")
-        check_install 0 && migrate_v2_ui 0
-        ;;
     "update")
         check_install 0 && update 0
         ;;