From 0fc935e996fb37fe2c95937e851990d24367372a Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Mon, 4 Nov 2024 10:33:07 +0100 Subject: [PATCH 01/25] fix update geo + log details fail2ban --- x-ui.sh | 101 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 76 insertions(+), 25 deletions(-) diff --git a/x-ui.sh b/x-ui.sh index 0daf0a3c..884cd06c 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -164,7 +164,7 @@ update() { bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/main/install.sh) if [[ $? == 0 ]]; then LOGI "Update is complete, Panel has automatically restarted " - exit 0 + before_show_menu fi } @@ -185,7 +185,7 @@ update_menu() { if [[ $? == 0 ]]; then echo -e "${green}Update successful. The panel has automatically restarted.${plain}" - exit 0 + before_show_menu else echo -e "${red}Failed to update the menu.${plain}" return 1 @@ -294,8 +294,8 @@ reset_config() { return 0 fi /usr/local/x-ui/x-ui setting -reset - echo -e "All panel settings have been reset to default, Please restart the panel now, and use the default ${green}2053${plain} Port to Access the web Panel" - confirm_restart + echo -e "All panel settings have been reset to default." + restart } check_config() { @@ -423,7 +423,7 @@ show_log() { case "$choice" in 0) - return + show_menu ;; 1) journalctl -u x-ui -e --no-pager -f -p debug @@ -438,21 +438,41 @@ show_log() { restart ;; *) - echo "Invalid choice" + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + show_log ;; esac } show_banlog() { - if test -f "${iplimit_banned_log_path}"; then + local system_log="/var/log/fail2ban.log" + + echo -e "${green}Checking ban logs...${plain}\n" + + if ! systemctl is-active --quiet fail2ban; then + echo -e "${red}Fail2ban service is not running!${plain}\n" + return 1 + fi + + if [[ -f "$system_log" ]]; then + echo -e "${green}Recent system ban activities from fail2ban.log:${plain}" + grep "3x-ipl" "$system_log" | grep -E "Ban|Unban" | tail -n 10 || echo -e "${yellow}No recent system ban activities found${plain}" + echo "" + fi + + if [[ -f "${iplimit_banned_log_path}" ]]; then + echo -e "${green}3X-IPL ban log entries:${plain}" if [[ -s "${iplimit_banned_log_path}" ]]; then - cat ${iplimit_banned_log_path} + grep -v "INIT" "${iplimit_banned_log_path}" | tail -n 10 || echo -e "${yellow}No ban entries found${plain}" else - echo -e "${red}Log file is empty.${plain}\n" + echo -e "${yellow}Ban log file is empty${plain}" fi else - echo -e "${red}Log file not found. Please Install Fail2ban and IP Limit first.${plain}\n" + echo -e "${red}Ban log file not found at: ${iplimit_banned_log_path}${plain}" fi + + echo -e "\n${green}Current jail status:${plain}" + fail2ban-client status 3x-ipl || echo -e "${yellow}Unable to get jail status${plain}" } bbr_menu() { @@ -466,11 +486,16 @@ bbr_menu() { ;; 1) enable_bbr + bbr_menu ;; 2) disable_bbr + bbr_menu + ;; + *) + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + bbr_menu ;; - *) echo "Invalid choice" ;; esac } @@ -478,7 +503,7 @@ disable_bbr() { if ! grep -q "net.core.default_qdisc=fq" /etc/sysctl.conf || ! grep -q "net.ipv4.tcp_congestion_control=bbr" /etc/sysctl.conf; then echo -e "${yellow}BBR is not currently enabled.${plain}" - exit 0 + before_show_menu fi # Replace BBR with CUBIC configurations @@ -499,7 +524,7 @@ disable_bbr() { enable_bbr() { if grep -q "net.core.default_qdisc=fq" /etc/sysctl.conf && grep -q "net.ipv4.tcp_congestion_control=bbr" /etc/sysctl.conf; then echo -e "${green}BBR is already enabled!${plain}" - exit 0 + before_show_menu fi # Check the OS and install necessary packages @@ -545,7 +570,8 @@ update_shell() { before_show_menu else chmod +x /usr/bin/x-ui - LOGI "Upgrade script succeeded, Please rerun the script" && exit 0 + LOGI "Upgrade script succeeded, Please rerun the script" + before_show_menu fi } @@ -657,17 +683,24 @@ firewall_menu() { ;; 1) open_ports + firewall_menu ;; 2) sudo ufw status + firewall_menu ;; 3) delete_ports + firewall_menu ;; 4) sudo ufw disable + firewall_menu + ;; + *) + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + firewall_menu ;; - *) echo "Invalid choice" ;; esac } @@ -786,21 +819,25 @@ update_geo() { wget -N https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat wget -N https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat echo -e "${green}Loyalsoldier datasets have been updated successfully!${plain}" + restart ;; 2) rm -f geoip_IR.dat geosite_IR.dat wget -O geoip_IR.dat -N https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat wget -O geosite_IR.dat -N https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geosite.dat echo -e "${green}chocolate4u datasets have been updated successfully!${plain}" + restart ;; 3) rm -f geoip_VN.dat geosite_VN.dat wget -O geoip_VN.dat -N https://github.com/vuong2023/vn-v2ray-rules/releases/latest/download/geoip.dat wget -O geosite_VN.dat -N https://github.com/vuong2023/vn-v2ray-rules/releases/latest/download/geosite.dat echo -e "${green}vuong2023 datasets have been updated successfully!${plain}" + restart ;; *) - echo "Invalid option selected! No updates made." + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + update_geo ;; esac @@ -844,6 +881,7 @@ ssl_cert_issue_main() { ;; 1) ssl_cert_issue + ssl_cert_issue_main ;; 2) local domains=$(find /root/cert/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) @@ -860,6 +898,7 @@ ssl_cert_issue_main() { echo "Invalid domain entered." fi fi + ssl_cert_issue_main ;; 3) local domains=$(find /root/cert/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) @@ -876,6 +915,7 @@ ssl_cert_issue_main() { echo "Invalid domain entered." fi fi + ssl_cert_issue_main ;; 4) local domains=$(find /root/cert/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) @@ -895,6 +935,7 @@ ssl_cert_issue_main() { fi done fi + ssl_cert_issue_main ;; 5) local domains=$(find /root/cert/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) @@ -922,10 +963,12 @@ ssl_cert_issue_main() { echo "Invalid domain entered." fi fi + ssl_cert_issue_main ;; *) - echo "Invalid choice" + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + ssl_cert_issue_main ;; esac } @@ -1297,20 +1340,28 @@ iplimit_main() { ;; 4) show_banlog + iplimit_main ;; 5) tail -f /var/log/fail2ban.log + iplimit_main ;; 6) service fail2ban status + iplimit_main ;; 7) systemctl restart fail2ban + iplimit_main ;; 8) remove_iplimit + iplimit_main + ;; + *) + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + iplimit_main ;; - *) echo "Invalid choice" ;; esac } @@ -1391,7 +1442,7 @@ install_iplimit() { remove_iplimit() { echo -e "${green}\t1.${plain} Only remove IP Limit configurations" echo -e "${green}\t2.${plain} Uninstall Fail2ban and IP Limit" - echo -e "${green}\t0.${plain} Abort" + echo -e "${green}\t0.${plain} Back to Main Menu" read -p "Choose an option: " num case "$num" in 1) @@ -1431,8 +1482,7 @@ remove_iplimit() { before_show_menu ;; 0) - echo -e "${yellow}Cancelled.${plain}\n" - iplimit_main + show_menu ;; *) echo -e "${red}Invalid option. Please select a valid number.${plain}\n" @@ -1454,7 +1504,7 @@ SSH_port_forwarding() { if [[ -n "$existing_cert" && -n "$existing_key" ]]; then echo -e "${green}Panel is secure with SSL.${plain}" - return 0 + before_show_menu fi if [[ -z "$existing_cert" && -z "$existing_key" && (-z "$existing_listenIP" || "$existing_listenIP" == "0.0.0.0") ]]; then echo -e "\n${red}Warning: No Cert and Key found! The panel is not secure.${plain}" @@ -1474,7 +1524,7 @@ SSH_port_forwarding() { echo -e "\nChoose an option:" echo -e "${green}1.${plain} Set listen IP" echo -e "${green}2.${plain} Clear listen IP" - echo -e "${green}0.${plain} Abort" + echo -e "${green}0.${plain} Back to Main Menu" read -p "Choose an option: " num case "$num" in @@ -1509,10 +1559,11 @@ SSH_port_forwarding() { restart ;; 0) - echo "Operation aborted." + show_menu ;; *) - echo "Invalid option. Exiting." + echo -e "${red}Invalid option. Please select a valid number.${plain}\n" + SSH_port_forwarding ;; esac } From 9f445686a4586822f6de35b460cdcd4de7ff7abd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 01:10:21 +0330 Subject: [PATCH 02/25] Bump google.golang.org/grpc from 1.67.1 to 1.68.0 (#2597) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.67.1 to 1.68.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.67.1...v1.68.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 3943989d..d6994ed5 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/xtls/xray-core v1.8.25-0.20241031075831-4ec5c78c3453 go.uber.org/atomic v1.11.0 golang.org/x/text v0.19.0 - google.golang.org/grpc v1.67.1 + google.golang.org/grpc v1.68.0 gorm.io/driver/sqlite v1.5.6 gorm.io/gorm v1.25.12 ) diff --git a/go.sum b/go.sum index 03b50bf1..dddf7dc5 100644 --- a/go.sum +++ b/go.sum @@ -57,6 +57,8 @@ github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -227,8 +229,8 @@ golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uI golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173/go.mod h1:tkCQ4FQXmpAgYVh++1cq16/dH4QJtmvpRv19DWGAHSA= google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 35df2a05052560cc3be9874b1431f4976a463027 Mon Sep 17 00:00:00 2001 From: DecorativeFamily <185765765+decorativefamily@users.noreply.github.com> Date: Tue, 12 Nov 2024 01:28:00 +0330 Subject: [PATCH 03/25] [CodeFactor] Apply fixes (#2595) Co-authored-by: codefactor-io --- web/assets/codemirror/hint/javascript-hint.js | 2 +- web/assets/codemirror/javascript.js | 2 +- web/assets/codemirror/lint/lint.css | 2 +- web/html/xui/inbounds.html | 4 ++-- web/html/xui/settings.html | 2 +- web/html/xui/xray.html | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/web/assets/codemirror/hint/javascript-hint.js b/web/assets/codemirror/hint/javascript-hint.js index 95639798..f4396a79 100644 --- a/web/assets/codemirror/hint/javascript-hint.js +++ b/web/assets/codemirror/hint/javascript-hint.js @@ -63,7 +63,7 @@ return scriptHint(editor, javascriptKeywords, function (e, cur) {return e.getTokenAt(cur);}, options); - }; + } CodeMirror.registerHelper("hint", "javascript", javascriptHint); function getCoffeeScriptToken(editor, cur) { diff --git a/web/assets/codemirror/javascript.js b/web/assets/codemirror/javascript.js index bb735ebc..3f65a26b 100644 --- a/web/assets/codemirror/javascript.js +++ b/web/assets/codemirror/javascript.js @@ -362,7 +362,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { if (type == wanted) return cont(); else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass(); else return cont(exp); - }; + } return exp; } diff --git a/web/assets/codemirror/lint/lint.css b/web/assets/codemirror/lint/lint.css index e1560db9..8bb5804b 100644 --- a/web/assets/codemirror/lint/lint.css +++ b/web/assets/codemirror/lint/lint.css @@ -6,7 +6,7 @@ .CodeMirror-lint-tooltip { background-color: #ffd; border: 1px solid black; - border-radius: 4px 4px 4px 4px; + border-radius: 4px; color: black; font-family: monospace; font-size: 10pt; diff --git a/web/html/xui/inbounds.html b/web/html/xui/inbounds.html index a5a4c940..478f29de 100644 --- a/web/html/xui/inbounds.html +++ b/web/html/xui/inbounds.html @@ -15,7 +15,7 @@ overflow-y: hidden; } .ant-table .ant-table-content .ant-table-tbody tr:last-child .ant-table-wrapper { - margin:-10px 22px -10px !important; + margin:-10px 22px !important; } .ant-table .ant-table-content .ant-table-tbody tr:last-child .ant-table-wrapper .ant-table { border-bottom-left-radius: 1rem; @@ -40,7 +40,7 @@ padding: .5rem; } .ant-table .ant-table-content .ant-table-tbody tr:last-child .ant-table-wrapper { - margin:-10px 2px -10px !important; + margin:-10px 2px !important; } } .ant-col-sm-24 { diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index d7383061..0c70ca1c 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -26,7 +26,7 @@ padding: .5rem 1rem; text-align: center; background: rgb(255 145 0 / 15%); - margin: 1.5rem 2.5rem 0rem 2.5rem; + margin: 1.5rem 2.5rem 0rem; border-radius: .5rem; transition: all 0.5s; animation: signal 3s cubic-bezier(0.18, 0.89, 0.32, 1.28) infinite; diff --git a/web/html/xui/xray.html b/web/html/xui/xray.html index ddb4d515..6bcd31b9 100644 --- a/web/html/xui/xray.html +++ b/web/html/xui/xray.html @@ -52,7 +52,7 @@ font-size: 24px; } .ant-collapse-content-box>li { - padding: 12px 0 0 0 !important; + padding: 12px 0 0 !important; } .ant-list-item>li { padding: 10px 20px !important; From a4cf77422f9f62323b7953264cc6f200f803f0ea Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 12 Nov 2024 01:29:03 +0330 Subject: [PATCH 04/25] update dependencies --- go.mod | 38 ++++++++++++++--------------- go.sum | 76 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/go.mod b/go.mod index d6994ed5..d777c71e 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,13 @@ module x-ui -go 1.23.2 +go 1.23.3 require ( github.com/gin-contrib/gzip v1.0.1 github.com/gin-contrib/sessions v1.0.1 github.com/gin-gonic/gin v1.10.0 github.com/goccy/go-json v0.10.3 - github.com/mymmrac/telego v0.31.3 + github.com/mymmrac/telego v0.31.4 github.com/nicksnyder/go-i18n/v2 v2.4.1 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 github.com/pelletier/go-toml/v2 v2.2.3 @@ -16,7 +16,7 @@ require ( github.com/valyala/fasthttp v1.57.0 github.com/xtls/xray-core v1.8.25-0.20241031075831-4ec5c78c3453 go.uber.org/atomic v1.11.0 - golang.org/x/text v0.19.0 + golang.org/x/text v0.20.0 google.golang.org/grpc v1.68.0 gorm.io/driver/sqlite v1.5.6 gorm.io/gorm v1.25.12 @@ -24,7 +24,7 @@ require ( require ( github.com/andybalholm/brotli v1.1.1 // indirect - github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic v1.12.4 // indirect github.com/bytedance/sonic/loader v0.2.1 // indirect github.com/cloudflare/circl v1.5.0 // indirect github.com/cloudwego/base64x v0.1.4 // indirect @@ -40,7 +40,7 @@ require ( github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/google/btree v1.1.3 // indirect - github.com/google/pprof v0.0.0-20241023014458-598669927662 // indirect + github.com/google/pprof v0.0.0-20241101162523-b92577c0c142 // indirect github.com/gorilla/context v1.1.2 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/gorilla/sessions v1.4.0 // indirect @@ -50,7 +50,7 @@ require ( github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.11 // indirect - github.com/klauspost/cpuid/v2 v2.2.8 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect @@ -58,7 +58,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.24 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/onsi/ginkgo/v2 v2.20.2 // indirect + github.com/onsi/ginkgo/v2 v2.21.0 // indirect github.com/pires/go-proxyproto v0.8.0 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/quic-go/qpack v0.5.1 // indirect @@ -66,7 +66,7 @@ require ( github.com/refraction-networking/utls v1.6.7 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect - github.com/sagernet/sing v0.4.3 // indirect + github.com/sagernet/sing v0.5.0 // indirect github.com/sagernet/sing-shadowsocks v0.2.7 // indirect github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38 // indirect github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 // indirect @@ -78,23 +78,23 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fastjson v1.6.4 // indirect github.com/vishvananda/netlink v1.3.0 // indirect - github.com/vishvananda/netns v0.0.4 // indirect + github.com/vishvananda/netns v0.0.5 // indirect github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/mock v0.5.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/crypto v0.29.0 // indirect + golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/time v0.8.0 // indirect + golang.org/x/tools v0.27.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/protobuf v1.35.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gvisor.dev/gvisor v0.0.0-20231202080848-1f7806d17489 // indirect diff --git a/go.sum b/go.sum index dddf7dc5..7905809f 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0 h1:Wo41lDOevRJS github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0/go.mod h1:FVGavL/QEBQDcBpr3fAojoK17xX5k9bicBphrOpP7uM= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= -github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= -github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -66,8 +66,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241023014458-598669927662 h1:SKMkD83p7FwUqKmBsPdLHF5dNyxq3jOWwu9w9UyH5vA= -github.com/google/pprof v0.0.0-20241023014458-598669927662/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20241101162523-b92577c0c142 h1:sAGdeJj0bnMgUNVeUpp6AYlVdCt3/GdI3pGRqsNSQLs= +github.com/google/pprof v0.0.0-20241101162523-b92577c0c142/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o= github.com/gorilla/context v1.1.2/go.mod h1:KDPwT9i/MeWHiLl90fuTgrt4/wPcv75vFAZLaOOcbxM= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= @@ -87,8 +87,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= -github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -109,14 +109,14 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mymmrac/telego v0.31.3 h1:yZlD+dm+1W6p3OmCG8K+MbS02Y6paUgwPnqfZN3RWQQ= -github.com/mymmrac/telego v0.31.3/go.mod h1:coOoqXVmjFnwBlzusjfEezbQ7RH9wQnDowJdMm+bnEo= +github.com/mymmrac/telego v0.31.4 h1:NpiNl0P/8eydknka/k6XaaaWVj5BKMlM3Ibba63QTBU= +github.com/mymmrac/telego v0.31.4/go.mod h1:T12js1PgbYDYznvoN05MSMuPMfWTYo7D9LKl5cPFWiI= github.com/nicksnyder/go-i18n/v2 v2.4.1 h1:zwzjtX4uYyiaU02K5Ia3zSkpJZrByARkRB4V3YPrr0g= github.com/nicksnyder/go-i18n/v2 v2.4.1/go.mod h1:++Pl70FR6Cki7hdzZRnEEqdc2dJt+SAGotyFg/SvZMk= -github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= -github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= +github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= @@ -141,8 +141,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/sagernet/sing v0.4.3 h1:Ty/NAiNnVd6844k7ujlL5lkzydhcTH5Psc432jXA4Y8= -github.com/sagernet/sing v0.4.3/go.mod h1:ieZHA/+Y9YZfXs2I3WtuwgyCZ6GPsIR7HdKb1SdEnls= +github.com/sagernet/sing v0.5.0 h1:soo2wVwLcieKWWKIksFNK6CCAojUgAppqQVwyRYGkEM= +github.com/sagernet/sing v0.5.0/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-shadowsocks v0.2.7 h1:zaopR1tbHEw5Nk6FAkM05wCslV6ahVegEZaKMv9ipx8= github.com/sagernet/sing-shadowsocks v0.2.7/go.mod h1:0rIKJZBR65Qi0zwdKezt4s57y/Tl1ofkaq6NlkzVuyE= github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38 h1:D0vL7YNisV2yqE55+q0lFuGse6U8lxlg7fYTctlT5Gc= @@ -180,8 +180,9 @@ github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXV github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk= github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs= -github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= +github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= +github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 h1:g1Cj7d+my6k/HHxLAyxPwyX8i7FGRr6ulBDMkBzg2BM= github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463/go.mod h1:BjIOLmkEEtAgloAiVUcYj0Mt+YU00JARZw8AEU0IwAg= github.com/xtls/xray-core v1.8.25-0.20241031075831-4ec5c78c3453 h1:2piT7IYX0SKhYjD+XiJMDZAbY01MkP1HYO54njmisaQ= @@ -196,39 +197,38 @@ go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= -golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= -golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= -golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= +golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uIfPMv78iAJGcPKDeqAFnaLBropIC4= golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173/go.mod h1:tkCQ4FQXmpAgYVh++1cq16/dH4QJtmvpRv19DWGAHSA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= From 6e59aa14b0c37bb8070a8a8caa2bb7d6949561f6 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 12 Nov 2024 12:11:27 +0330 Subject: [PATCH 05/25] Xray core buggy version removed accept >= v24.11.11 or v1.8.24 --- web/service/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/service/server.go b/web/service/server.go index de3eda9d..eab5d700 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -286,7 +286,7 @@ func (s *ServerService) GetXrayVersions() ([]string, error) { } if (major == 1 && minor == 8 && patch == 24) || - (major == 24 && ((minor > 10) || (minor == 10 && patch >= 16))) || + (major == 24 && ((minor > 11) || (minor == 11 && patch >= 11))) || (major > 24) { versions = append(versions, release.TagName) } From 111bfe5d2e3d391f52dc11811c4efb0663323d7d Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 12 Nov 2024 14:01:42 +0330 Subject: [PATCH 06/25] ShadowSocks - ivCheck --- web/assets/js/model/inbound.js | 8 ++++++-- web/html/xui/form/protocol/shadowsocks.html | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index ea6f56fa..41121b66 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -2198,13 +2198,15 @@ Inbound.ShadowsocksSettings = class extends Inbound.Settings { method = SSMethods.BLAKE3_AES_256_GCM, password = RandomUtil.randomShadowsocksPassword(), network = 'tcp,udp', - shadowsockses = [new Inbound.ShadowsocksSettings.Shadowsocks()] + shadowsockses = [new Inbound.ShadowsocksSettings.Shadowsocks()], + ivCheck = false, ) { super(protocol); this.method = method; this.password = password; this.network = network; this.shadowsockses = shadowsockses; + this.ivCheck = ivCheck; } static fromJson(json = {}) { @@ -2214,6 +2216,7 @@ Inbound.ShadowsocksSettings = class extends Inbound.Settings { json.password, json.network, json.clients.map(client => Inbound.ShadowsocksSettings.Shadowsocks.fromJson(client)), + json.ivCheck, ); } @@ -2222,7 +2225,8 @@ Inbound.ShadowsocksSettings = class extends Inbound.Settings { method: this.method, password: this.password, network: this.network, - clients: Inbound.ShadowsocksSettings.toJsonArray(this.shadowsockses) + clients: Inbound.ShadowsocksSettings.toJsonArray(this.shadowsockses), + ivCheck: this.ivCheck, }; } }; diff --git a/web/html/xui/form/protocol/shadowsocks.html b/web/html/xui/form/protocol/shadowsocks.html index b55a3d5c..1190b672 100644 --- a/web/html/xui/form/protocol/shadowsocks.html +++ b/web/html/xui/form/protocol/shadowsocks.html @@ -43,5 +43,8 @@ UDP + + + {{end}} From b7d1c84cd0f226a0f3c70e841d5b90ef92425378 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 12 Nov 2024 14:26:35 +0330 Subject: [PATCH 07/25] README OS - Windows x64 --- README.es_ES.md | 1 + README.md | 1 + README.ru_RU.md | 1 + README.zh_CN.md | 1 + 4 files changed, 4 insertions(+) diff --git a/README.es_ES.md b/README.es_ES.md index a557d0cd..95c9f8b7 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -253,6 +253,7 @@ location /sub { - Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 +- Windows x64 ## Arquitecturas y Dispositivos Compatibles diff --git a/README.md b/README.md index e60d5a95..c4d2951b 100644 --- a/README.md +++ b/README.md @@ -258,6 +258,7 @@ location /sub { - Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 +- Windows x64 ## Supported Architectures and Devices diff --git a/README.ru_RU.md b/README.ru_RU.md index e5b05dc0..1d23f4aa 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -257,6 +257,7 @@ location /sub { - Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 +- Windows x64 ## Поддерживаемые архитектуры и устройства diff --git a/README.zh_CN.md b/README.zh_CN.md index 6ad22d0c..cb813923 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -254,6 +254,7 @@ location /sub { - Oracle Linux 8+ - OpenSUSE Tubleweed - Amazon Linux 2023 +- Windows x64 ## 支持的架构和设备
From c0ef53e5423ffdfbd051fe06b39ed03ad2c74f1c Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Tue, 12 Nov 2024 14:55:16 +0330 Subject: [PATCH 08/25] Access URL - SSL exist --- x-ui.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/x-ui.sh b/x-ui.sh index 884cd06c..19f20aea 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -309,9 +309,20 @@ 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 -Eo 'cert: .+' | awk '{print $2}') local server_ip=$(curl -s https://api.ipify.org) - echo -e "${green}Access URL: http://${server_ip}:${existing_port}${existing_webBasePath}${plain}" + if [[ -n "$existing_cert" ]]; then + local domain=$(basename "$(dirname "$existing_cert")") + + if [[ "$domain" =~ ^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then + echo -e "${green}Access URL: https://${domain}:${existing_port}${existing_webBasePath}${plain}" + else + echo -e "${green}Access URL: https://${server_ip}:${existing_port}${existing_webBasePath}${plain}" + fi + else + echo -e "${green}Access URL: http://${server_ip}:${existing_port}${existing_webBasePath}${plain}" + fi } set_port() { From 7ad4a3dffc3905d61ccc9a3c0fef6eb196fe0625 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Wed, 13 Nov 2024 14:17:09 +0330 Subject: [PATCH 09/25] Xray-core v24.11.11 --- .github/workflows/release.yml | 2 +- DockerInit.sh | 2 +- go.mod | 2 +- go.sum | 4 ++-- xray/api.go | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8ad585a4..e5d41b8d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,7 +83,7 @@ jobs: cd x-ui/bin # Download dependencies - Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.10.31/" + Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.11.11/" if [ "${{ matrix.platform }}" == "amd64" ]; then wget ${Xray_URL}Xray-linux-64.zip unzip Xray-linux-64.zip diff --git a/DockerInit.sh b/DockerInit.sh index 90e83e9b..e64075b2 100755 --- a/DockerInit.sh +++ b/DockerInit.sh @@ -27,7 +27,7 @@ case $1 in esac mkdir -p build/bin cd build/bin -wget "https://github.com/XTLS/Xray-core/releases/download/v24.10.31/Xray-linux-${ARCH}.zip" +wget "https://github.com/XTLS/Xray-core/releases/download/v24.11.11/Xray-linux-${ARCH}.zip" unzip "Xray-linux-${ARCH}.zip" rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat mv xray "xray-linux-${FNAME}" diff --git a/go.mod b/go.mod index d777c71e..1f904923 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/robfig/cron/v3 v3.0.1 github.com/shirou/gopsutil/v4 v4.24.10 github.com/valyala/fasthttp v1.57.0 - github.com/xtls/xray-core v1.8.25-0.20241031075831-4ec5c78c3453 + github.com/xtls/xray-core v1.8.25-0.20241111042233-0df2446f824d go.uber.org/atomic v1.11.0 golang.org/x/text v0.20.0 google.golang.org/grpc v1.68.0 diff --git a/go.sum b/go.sum index 7905809f..5ae39f09 100644 --- a/go.sum +++ b/go.sum @@ -185,8 +185,8 @@ github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zd github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463 h1:g1Cj7d+my6k/HHxLAyxPwyX8i7FGRr6ulBDMkBzg2BM= github.com/xtls/reality v0.0.0-20240909153216-e26ae2305463/go.mod h1:BjIOLmkEEtAgloAiVUcYj0Mt+YU00JARZw8AEU0IwAg= -github.com/xtls/xray-core v1.8.25-0.20241031075831-4ec5c78c3453 h1:2piT7IYX0SKhYjD+XiJMDZAbY01MkP1HYO54njmisaQ= -github.com/xtls/xray-core v1.8.25-0.20241031075831-4ec5c78c3453/go.mod h1:OlJhs59caMUabGbOamwTc2khBSOfd34qtVJVXFhpfWM= +github.com/xtls/xray-core v1.8.25-0.20241111042233-0df2446f824d h1:00+ceMqRs5YdBMm4NLdsupYnxkP5Ghka9Lzw2ciVhgk= +github.com/xtls/xray-core v1.8.25-0.20241111042233-0df2446f824d/go.mod h1:n8wJBW828YcDQ+9+BnAtbofXVt31VMvz4TwbZK0BaEE= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= diff --git a/xray/api.go b/xray/api.go index d0de76e8..727ab526 100644 --- a/xray/api.go +++ b/xray/api.go @@ -129,7 +129,7 @@ func (x *XrayAPI) AddUser(Protocol string, inboundTag string, user map[string]in CipherType: ssCipherType, }) } else { - account = serial.ToTypedMessage(&shadowsocks_2022.User{ + account = serial.ToTypedMessage(&shadowsocks_2022.ServerConfig{ Key: user["password"].(string), Email: user["email"].(string), }) From 2982d809ab4f5301a27b811509e7fb92f427673f Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Wed, 13 Nov 2024 19:57:55 +0330 Subject: [PATCH 10/25] update - CF SSL Certificate --- x-ui.sh | 107 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 35 deletions(-) diff --git a/x-ui.sh b/x-ui.sh index 19f20aea..b99d801d 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -1116,76 +1116,113 @@ ssl_cert_issue() { } ssl_cert_issue_CF() { - 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" + 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}') + LOGI "****** Instructions for Use ******" + LOGI "Follow the steps below to complete the process:" + LOGI "1. Cloudflare Registered E-mail." + LOGI "2. Cloudflare Global API Key." + LOGI "3. The Domain Name." + LOGI "4. Once the certificate is issued, you will be prompted to set the certificate for the panel (optional)." + LOGI "5. The script also supports automatic renewal of the SSL certificate after installation." + + confirm "Do you confirm the information and wish to proceed? [y/n]" "y" + if [ $? -eq 0 ]; then - # check for acme.sh first + # 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" + echo "acme.sh could not be found. We will install it." install_acme if [ $? -ne 0 ]; then - LOGE "install acme failed, please check logs" + LOGE "Install acme failed, please check logs." exit 1 fi fi + CF_Domain="" - CF_GlobalKey="" - CF_AccountEmail="" - certPath=/root/cert + certPath="/root/cert-CF" if [ ! -d "$certPath" ]; then - mkdir $certPath + mkdir -p $certPath else rm -rf $certPath - mkdir $certPath + mkdir -p $certPath fi + LOGD "Please set a domain name:" - read -p "Input your domain here:" CF_Domain - LOGD "Your domain name is set to:${CF_Domain}" + read -p "Input your domain here: " CF_Domain + LOGD "Your domain name is set to: ${CF_Domain}" + + # Set up Cloudflare API details + CF_GlobalKey="" + CF_AccountEmail="" LOGD "Please set the API key:" - read -p "Input your key here:" CF_GlobalKey - LOGD "Your API key is:${CF_GlobalKey}" + read -p "Input your key here: " CF_GlobalKey + LOGD "Your API key is: ${CF_GlobalKey}" + LOGD "Please set up registered email:" - read -p "Input your email here:" CF_AccountEmail - LOGD "Your registered email address is:${CF_AccountEmail}" + read -p "Input your email here: " CF_AccountEmail + LOGD "Your registered email address is: ${CF_AccountEmail}" + + # Set the default CA to Let's Encrypt ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt if [ $? -ne 0 ]; then - LOGE "Default CA, Lets'Encrypt fail, script exiting..." + LOGE "Default CA, Let'sEncrypt fail, script exiting..." exit 1 fi + export CF_Key="${CF_GlobalKey}" - export CF_Email=${CF_AccountEmail} + export CF_Email="${CF_AccountEmail}" + + # Issue the certificate using Cloudflare DNS ~/.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..." exit 1 else - LOGI "Certificate issued Successfully, Installing..." + 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 + + # Install the certificate + ~/.acme.sh/acme.sh --installcert -d ${CF_Domain} -d *.${CF_Domain} \ + --cert-file ${certPath}/${CF_Domain}/fullchain.pem \ + --key-file ${certPath}/${CF_Domain}/privkey.pem + if [ $? -ne 0 ]; then LOGE "Certificate installation failed, script exiting..." exit 1 else - LOGI "Certificate installed Successfully,Turning on automatic updates..." + LOGI "Certificate installed successfully, Turning on automatic updates..." fi + + # Enable auto-update ~/.acme.sh/acme.sh --upgrade --auto-upgrade if [ $? -ne 0 ]; then - LOGE "Auto update setup Failed, script exiting..." - ls -lah cert - chmod 755 $certPath + LOGE "Auto update setup failed, script exiting..." exit 1 else - LOGI "The certificate is installed and auto-renewal is turned on, Specific information is as follows" - ls -lah cert - chmod 755 $certPath + LOGI "The certificate is installed and auto-renewal is turned on. Specific information is as follows:" + ls -lah ${certPath}/${CF_Domain} + chmod 755 ${certPath}/${CF_Domain} + fi + + # Prompt user to set panel paths after successful certificate installation + read -p "Would you like to set this certificate for the panel? (y/n): " setPanel + if [[ "$setPanel" == "y" || "$setPanel" == "Y" ]]; then + local webCertFile="${certPath}/${CF_Domain}/fullchain.pem" + local webKeyFile="${certPath}/${CF_Domain}/privkey.pem" + + if [[ -f "$webCertFile" && -f "$webKeyFile" ]]; then + /usr/local/x-ui/x-ui cert -webCert "$webCertFile" -webCertKey "$webKeyFile" + LOGI "Panel paths set for domain: $CF_Domain" + LOGI " - Certificate File: $webCertFile" + LOGI " - Private Key File: $webKeyFile" + echo -e "${green}Access URL: https://${CF_Domain}:${existing_port}${existing_webBasePath}${plain}" + restart + else + LOGE "Error: Certificate or private key file not found for domain: $CF_Domain." + fi + else + LOGI "Skipping panel path setting." fi else show_menu From ccda652e69f5d613acca6346dda3c15fcb7ba36b Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 14 Nov 2024 13:09:51 +0330 Subject: [PATCH 11/25] SplitHTTP - Mode --- sub/subService.go | 4 ++++ web/assets/js/model/inbound.js | 19 ++++++++++++++++-- web/assets/js/model/outbound.js | 20 ++++++++++++++++--- web/html/xui/form/outbound.html | 5 +++++ .../xui/form/stream/stream_splithttp.html | 6 ++++++ web/html/xui/inbound_info_modal.html | 8 ++++++++ 6 files changed, 57 insertions(+), 5 deletions(-) diff --git a/sub/subService.go b/sub/subService.go index 2838e932..1659b98b 100644 --- a/sub/subService.go +++ b/sub/subService.go @@ -238,6 +238,7 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string { headers, _ := splithttp["headers"].(map[string]interface{}) obj["host"] = searchHost(headers) } + obj["mode"] = splithttp["mode"].(string) } security, _ := stream["security"].(string) obj["tls"] = security @@ -389,6 +390,7 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string { headers, _ := splithttp["headers"].(map[string]interface{}) params["host"] = searchHost(headers) } + params["mode"] = splithttp["mode"].(string) } security, _ := stream["security"].(string) if security == "tls" { @@ -586,6 +588,7 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string headers, _ := splithttp["headers"].(map[string]interface{}) params["host"] = searchHost(headers) } + params["mode"] = splithttp["mode"].(string) } security, _ := stream["security"].(string) if security == "tls" { @@ -783,6 +786,7 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st headers, _ := splithttp["headers"].(map[string]interface{}) params["host"] = searchHost(headers) } + params["mode"] = splithttp["mode"].(string) } security, _ := stream["security"].(string) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index 41121b66..0e403fce 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -113,6 +113,12 @@ const USERS_SECURITY = { ZERO: "zero", }; +const MODE_OPTION = { + AUTO: "auto", + PACKET_UP: "packet-up", + STREAM_UP: "stream-up", +}; + Object.freeze(Protocols); Object.freeze(SSMethods); Object.freeze(TLS_FLOW_CONTROL); @@ -125,6 +131,7 @@ Object.freeze(USAGE_OPTION); Object.freeze(DOMAIN_STRATEGY_OPTION); Object.freeze(TCP_CONGESTION_OPTION); Object.freeze(USERS_SECURITY); +Object.freeze(MODE_OPTION); class XrayCommonClass { @@ -528,7 +535,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass { maxConnections: 0, cMaxReuseTimes: "64-128", cMaxLifetimeMs: 0 - } + }, + mode = MODE_OPTION.AUTO, ) { super(); this.path = path; @@ -540,6 +548,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass { this.noSSEHeader = noSSEHeader; this.xPaddingBytes = xPaddingBytes; this.xmux = xmux; + this.mode = mode; } addHeader(name, value) { @@ -561,6 +570,7 @@ class SplitHTTPStreamSettings extends XrayCommonClass { json.noSSEHeader, json.xPaddingBytes, json.xmux, + json.mode, ); } @@ -579,7 +589,8 @@ class SplitHTTPStreamSettings extends XrayCommonClass { maxConnections: this.xmux.maxConnections, cMaxReuseTimes: this.xmux.cMaxReuseTimes, cMaxLifetimeMs: this.xmux.cMaxLifetimeMs - } + }, + mode: this.mode, }; } } @@ -1329,6 +1340,7 @@ class Inbound extends XrayCommonClass { const splithttp = this.stream.splithttp; obj.path = splithttp.path; obj.host = splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host'); + obj.mode = splithttp.mode; } if (security === 'tls') { @@ -1401,6 +1413,7 @@ class Inbound extends XrayCommonClass { const splithttp = this.stream.splithttp; params.set("path", splithttp.path); params.set("host", splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host')); + params.set("mode", splithttp.mode); break; } @@ -1504,6 +1517,7 @@ class Inbound extends XrayCommonClass { const splithttp = this.stream.splithttp; params.set("path", splithttp.path); params.set("host", splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host')); + params.set("mode", splithttp.mode); break; } @@ -1586,6 +1600,7 @@ class Inbound extends XrayCommonClass { const splithttp = this.stream.splithttp; params.set("path", splithttp.path); params.set("host", splithttp.host?.length > 0 ? splithttp.host : this.getHeader(splithttp, 'host')); + params.set("mode", splithttp.mode); break; } diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index 78078dd6..35be85d8 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -77,6 +77,12 @@ const USERS_SECURITY = { ZERO: "zero", }; +const MODE_OPTION = { + AUTO: "auto", + PACKET_UP: "packet-up", + STREAM_UP: "stream-up", +}; + Object.freeze(Protocols); Object.freeze(SSMethods); Object.freeze(TLS_FLOW_CONTROL); @@ -85,6 +91,7 @@ Object.freeze(ALPN_OPTION); Object.freeze(OutboundDomainStrategies); Object.freeze(WireguardDomainStrategy); Object.freeze(USERS_SECURITY); +Object.freeze(MODE_OPTION); class CommonClass { @@ -320,16 +327,22 @@ class HttpUpgradeStreamSettings extends CommonClass { } class SplitHTTPStreamSettings extends CommonClass { - constructor(path = '/', host = '') { + constructor( + path = '/', + host = '', + mode = '', + ) { super(); this.path = path; this.host = host; + this.mode = mode; } static fromJson(json = {}) { return new SplitHTTPStreamSettings( json.path, json.host, + json.mode, ); } @@ -337,6 +350,7 @@ class SplitHTTPStreamSettings extends CommonClass { return { path: this.path, host: this.host, + mode: this.mode, }; } } @@ -710,7 +724,7 @@ class Outbound extends CommonClass { } else if (network === 'httpupgrade') { stream.httpupgrade = new HttpUpgradeStreamSettings(json.path, json.host); } else if (network === 'splithttp') { - stream.splithttp = new SplitHTTPStreamSettings(json.path, json.host); + stream.splithttp = new SplitHTTPStreamSettings(json.path, json.host, json.mode); } if (json.tls && json.tls == 'tls') { @@ -754,7 +768,7 @@ class Outbound extends CommonClass { } else if (type === 'httpupgrade') { stream.httpupgrade = new HttpUpgradeStreamSettings(path, host); } else if (type === 'splithttp') { - stream.splithttp = new SplitHTTPStreamSettings(path, host); + stream.splithttp = new SplitHTTPStreamSettings(path, host, mode); } if (security == 'tls') { diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index 2f5d8207..fde2f27c 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -380,6 +380,11 @@ + + + [[ key ]] + + diff --git a/web/html/xui/form/stream/stream_splithttp.html b/web/html/xui/form/stream/stream_splithttp.html index 957720e9..12cd3cac 100644 --- a/web/html/xui/form/stream/stream_splithttp.html +++ b/web/html/xui/form/stream/stream_splithttp.html @@ -22,6 +22,12 @@ + + + [[ key ]] + + diff --git a/web/html/xui/inbound_info_modal.html b/web/html/xui/inbound_info_modal.html index 36f165c6..0e0a18fc 100644 --- a/web/html/xui/inbound_info_modal.html +++ b/web/html/xui/inbound_info_modal.html @@ -58,6 +58,14 @@ +