From 7db276b3bb4e3ee2478c258db07e90b7948f9b26 Mon Sep 17 00:00:00 2001 From: delifer Date: Mon, 23 Feb 2026 22:31:02 +0700 Subject: [PATCH 1/4] add librespeed --- .vscode/launch.json | 35 --------------------- .vscode/tasks.json | 75 --------------------------------------------- install.sh | 2 +- x-ui.sh | 33 ++++++++++++++++++-- 4 files changed, 32 insertions(+), 113 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/tasks.json diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 8a969702..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "$schema": "vscode://schemas/launch", - "version": "0.2.0", - "configurations": [ - { - "name": "Run 3x-ui (Debug)", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${workspaceFolder}", - "cwd": "${workspaceFolder}", - "env": { - "XUI_DEBUG": "true" - }, - "console": "integratedTerminal" - }, - { - "name": "Run 3x-ui (Debug, custom env)", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${workspaceFolder}", - "cwd": "${workspaceFolder}", - "env": { - // Set to true to serve assets/templates directly from disk for development - "XUI_DEBUG": "true", - // Uncomment to override DB folder location (by default uses working dir on Windows when debug) - // "XUI_DB_FOLDER": "${workspaceFolder}", - // Example: override log level (debug|info|notice|warn|error) - // "XUI_LOG_LEVEL": "debug" - }, - "console": "integratedTerminal" - } - ] -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 337d694f..00000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "go: build", - "type": "shell", - "command": "go", - "args": [ - "build", - "-o", - "bin/3x-ui.exe", - "./main.go" - ], - "options": { - "cwd": "${workspaceFolder}" - }, - "problemMatcher": [ - "$go" - ], - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "label": "go: run", - "type": "shell", - "command": "go", - "args": [ - "run", - "./main.go" - ], - "options": { - "cwd": "${workspaceFolder}", - "env": { - "XUI_DEBUG": "true" - } - }, - "problemMatcher": [ - "$go" - ] - }, - { - "label": "go: test", - "type": "shell", - "command": "go", - "args": [ - "test", - "./..." - ], - "options": { - "cwd": "${workspaceFolder}" - }, - "problemMatcher": [ - "$go" - ], - "group": "test" - }, - { - "label": "go: vet", - "type": "shell", - "command": "go", - "args": [ - "vet", - "./..." - ], - "options": { - "cwd": "${workspaceFolder}" - }, - "problemMatcher": [ - "$go" - ] - } - ] -} \ No newline at end of file diff --git a/install.sh b/install.sh index 46207777..53a995e2 100644 --- a/install.sh +++ b/install.sh @@ -580,7 +580,7 @@ prompt_and_setup_ssl() { # 3.1 Request Domain to compose Panel URL later read -rp "Please enter domain name certificate issued for: " custom_domain - custom_domain="${custom_domain// /}" # Убираем пробелы + custom_domain="${custom_domain// /}" # Delete spaces # 3.2 Loop for Certificate Path while true; do diff --git a/x-ui.sh b/x-ui.sh index 2bd125ab..7dcde465 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -1661,6 +1661,31 @@ run_speedtest() { speedtest } +run_librespeed() { + #Test GO + if command -v go &>/dev/null; then + echo "GO installed!" + else + #Intalling GO + echo "Installing GO..." + VERSION=$(curl -s https://go.dev/dl/?mode=json | grep -m 1 'version' | cut -d'"' -f4) + wget https://go.dev/dl/$VERSION.linux-amd64.tar.gz + rm -rf /usr/local/go && tar -C /usr/local -xzf $VERSION.linux-amd64.tar.gz + export PATH=$PATH:/usr/local/go/bin + echo "GO installed!" + fi + + found=$(find / -type d -name "speedtest-cli" 2>/dev/null) + if [ -n "$found" ]; then + echo "Test speed..." + $found/out/librespeed-cli-linux-amd64 + else + echo "Installing Librespeed..." + git clone https://github.com/librespeed/speedtest-cli + cd speedtest-cli/ && ./build.sh + echo "Start this option again!" + fi +} ip_validation() { @@ -2204,10 +2229,11 @@ show_menu() { │ ${green}23.${plain} Enable BBR │ │ ${green}24.${plain} Update Geo Files │ │ ${green}25.${plain} Speedtest by Ookla │ +│ ${green}26.${plain} Librespeed │ ╚────────────────────────────────────────────────╝ " show_status - echo && read -rp "Please enter your selection [0-25]: " num + echo && read -rp "Please enter your selection [0-26]: " num case "${num}" in 0) @@ -2288,8 +2314,11 @@ show_menu() { 25) run_speedtest ;; + 26) + run_librespeed + ;; *) - LOGE "Please enter the correct number [0-25]" + LOGE "Please enter the correct number [0-26]" ;; esac } From e726bd4a95809bfc79eae92d7e38dce5b9dc7604 Mon Sep 17 00:00:00 2001 From: delifer Date: Tue, 24 Feb 2026 11:17:04 +0700 Subject: [PATCH 2/4] add dns changer, add honeypot for server --- x-ui.sh | 127 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 113 insertions(+), 14 deletions(-) diff --git a/x-ui.sh b/x-ui.sh index 7dcde465..0f625b5f 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -1664,15 +1664,15 @@ run_speedtest() { run_librespeed() { #Test GO if command -v go &>/dev/null; then - echo "GO installed!" + echo -e "${green}${plain} GO installed!" else #Intalling GO - echo "Installing GO..." + echo echo -e "${yellow}${plain} Installing GO..." VERSION=$(curl -s https://go.dev/dl/?mode=json | grep -m 1 'version' | cut -d'"' -f4) wget https://go.dev/dl/$VERSION.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf $VERSION.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin - echo "GO installed!" + echo -e "${green}${plain} GO installed!" fi found=$(find / -type d -name "speedtest-cli" 2>/dev/null) @@ -1680,13 +1680,104 @@ run_librespeed() { echo "Test speed..." $found/out/librespeed-cli-linux-amd64 else - echo "Installing Librespeed..." + echo -e "${yellow}${plain}Installing Librespeed..." git clone https://github.com/librespeed/speedtest-cli cd speedtest-cli/ && ./build.sh - echo "Start this option again!" + echo -e "${green}${plain}Start this option again!" fi } +create_honeypot() { + + local pkg_manager="" + local server_ip=$(curl -s --max-time 3 https://4.ident.me) + + echo -e "${yellow}${plain}Downloading sources and Utilites..." + if command -v dnf &>/dev/null; then + pkg_manager="dnf" + dnf install httpd -y + elif command -v yum &>/dev/null; then + pkg_manager="yum" + yum install httpd + elif command -v apt-get &>/dev/null; then + pkg_manager="apt-get" + apt-get install apache2 + elif command -v apt &>/dev/null; then + pkg_manager="apt" + apt install apache2 + fi + + if [[ -z $pkg_manager ]]; then + echo "Error: Package manager not found. You may need to install HoneyPot manually." + return 1 + fi + + # Start apache server for HoneyPot + systemctl enable apache2 + systemctl start apache2 + + echo -e "${yellow}${plain}Installing HoneyPot..." + + git clone https://github.com/d3l1f3r/SpaceSaver.git + mv SpaceSaver/ /var/www/html/ + + # Configs + echo """ + + ServerName SpaceSaver + DocumentRoot /var/www/html/SpaceSaver + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined +""" >> /etc/apache2/sites-enabled/spacesaver.conf + + echo """ + + ServerName SpaceSaver + DocumentRoot /var/www/html/SpaceSaver + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined +""" >> /etc/apache2/sites-available/spacesaver.conf + + # Restarting apache server + sudo systemctl reload apache2 + + # Access rights to HoneyPot's files + sudo chown -R www-data:www-data /var/www/html/SpaceSaver + sudo chmod -R 755 /var/www/html/SpaceSaver + chmod 644 /var/www/html/SpaceSaver/index.html + + sudo systemctl reload apache2 + + echo -e "${green}${plain}Done!" + echo -e "${green}${plain}Available here -> http://$server_ip:80" +} + +change_dns() { + echo -e "${yellow}${plain}Changing DNS resolver" + echo -e "${plain}Enter resolver (default: 9.9.9.9): " + read resolver + + if [ -n "$resolver" ]; then + echo "nameserver $resolver" > /etc/resolv.conf + else + echo "nameserver 9.9.9.9" > /etc/resolv.conf + fi + echo -e "${green}${plain}Done!" +} ip_validation() { ipv6_regex="^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$" @@ -2225,15 +2316,17 @@ show_menu() { │ ${green}20.${plain} IP Limit Management │ │ ${green}21.${plain} Firewall Management │ │ ${green}22.${plain} SSH Port Forwarding Management │ +│ ${green}23.${plain} HoneyPot (Fakesite) │ +│ ${green}24.${plain} Change DNS resolver │ │────────────────────────────────────────────────│ -│ ${green}23.${plain} Enable BBR │ -│ ${green}24.${plain} Update Geo Files │ -│ ${green}25.${plain} Speedtest by Ookla │ -│ ${green}26.${plain} Librespeed │ +│ ${green}25.${plain} Enable BBR │ +│ ${green}26.${plain} Update Geo Files │ +│ ${green}27.${plain} Speedtest by Ookla │ +│ ${green}28.${plain} Librespeed │ ╚────────────────────────────────────────────────╝ " show_status - echo && read -rp "Please enter your selection [0-26]: " num + echo && read -rp "Please enter your selection [0-28]: " num case "${num}" in 0) @@ -2306,19 +2399,25 @@ show_menu() { SSH_port_forwarding ;; 23) - bbr_menu + create_honeypot ;; 24) - update_geo + change_dns ;; 25) - run_speedtest + bbr_menu ;; 26) + update_geo + ;; + 27) + run_speedtest + ;; + 28) run_librespeed ;; *) - LOGE "Please enter the correct number [0-26]" + LOGE "Please enter the correct number [0-28]" ;; esac } From 58922be75884ba6b59fb306f21c11f6ce9061563 Mon Sep 17 00:00:00 2001 From: delifer Date: Fri, 27 Feb 2026 22:42:58 +0700 Subject: [PATCH 3/4] fix LibreSpeed installing, move the SpaceSaver inside --- x-ui.sh | 344 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 236 insertions(+), 108 deletions(-) diff --git a/x-ui.sh b/x-ui.sh index 0f625b5f..1c0d4fa8 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -408,6 +408,16 @@ restart() { fi } +restart_xray() { + systemctl reload x-ui + LOGI "xray-core Restart signal sent successfully, Please check the log information to confirm whether xray restarted successfully" + sleep 2 + show_xray_status + if [[ $# == 0 ]]; then + before_show_menu + fi +} + status() { if [[ $release == "alpine" ]]; then rc-service x-ui status @@ -1662,82 +1672,94 @@ run_speedtest() { } run_librespeed() { - #Test GO - if command -v go &>/dev/null; then - echo -e "${green}${plain} GO installed!" + + if command -v librespeed-cli &>/dev/null; then + librespeed-cli else - #Intalling GO - echo echo -e "${yellow}${plain} Installing GO..." - VERSION=$(curl -s https://go.dev/dl/?mode=json | grep -m 1 'version' | cut -d'"' -f4) - wget https://go.dev/dl/$VERSION.linux-amd64.tar.gz - rm -rf /usr/local/go && tar -C /usr/local -xzf $VERSION.linux-amd64.tar.gz - export PATH=$PATH:/usr/local/go/bin - echo -e "${green}${plain} GO installed!" - fi - - found=$(find / -type d -name "speedtest-cli" 2>/dev/null) - if [ -n "$found" ]; then - echo "Test speed..." - $found/out/librespeed-cli-linux-amd64 - else - echo -e "${yellow}${plain}Installing Librespeed..." - git clone https://github.com/librespeed/speedtest-cli - cd speedtest-cli/ && ./build.sh - echo -e "${green}${plain}Start this option again!" + #Intalling LibreSpeed + echo -e "${yellow} Installing LibreSpeed..." + VERSION=$(curl -s "https://api.github.com/repos/librespeed/speedtest-cli/releases/latest"| grep '"tag_name":' | sed -E 's/.*"v?([^"]+)".*/\1/') + wget https://github.com/librespeed/speedtest-cli/releases/download/v${VERSION}/librespeed-cli_${VERSION}_linux_amd64.tar.gz + tar -xzvf librespeed-cli_${VERSION}_linux_amd64.tar.gz && mv librespeed-cli /usr/bin + librespeed-cli fi } create_honeypot() { - - local pkg_manager="" local server_ip=$(curl -s --max-time 3 https://4.ident.me) - echo -e "${yellow}${plain}Downloading sources and Utilites..." - if command -v dnf &>/dev/null; then - pkg_manager="dnf" - dnf install httpd -y - elif command -v yum &>/dev/null; then - pkg_manager="yum" - yum install httpd - elif command -v apt-get &>/dev/null; then - pkg_manager="apt-get" - apt-get install apache2 - elif command -v apt &>/dev/null; then - pkg_manager="apt" - apt install apache2 - fi + echo -e "${plain}Do you want to use: ${green}Apache ${plain}or ${green}Nginx" - if [[ -z $pkg_manager ]]; then - echo "Error: Package manager not found. You may need to install HoneyPot manually." - return 1 - fi + read -p "Apache or Nginx: " nginx_or_apache - # Start apache server for HoneyPot - systemctl enable apache2 - systemctl start apache2 - - echo -e "${yellow}${plain}Installing HoneyPot..." + echo -e "${yellow}Downloading sources and Utilites..." - git clone https://github.com/d3l1f3r/SpaceSaver.git - mv SpaceSaver/ /var/www/html/ + if [ "$nginx_or_apache" = "Apache" ]; then + case "${release}" in + ubuntu) + apt-get update + apt-get install apache2 -y + ;; + debian) + apt-get update + apt-get install -y apache2 + ;; + armbian) + apt-get update && apt-get install apache2 -y + ;; + fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol) + dnf -y update && dnf -y install httpd + ;; + centos) + yum -y install apache2 + ;; + arch | manjaro | parch) + pacman -Syu --noconfirm apache + ;; + *) + echo -e "${red}Unsupported operating system. Please check the script and install the necessary packages manually.${plain}\n" + exit 1 + ;; + esac - # Configs - echo """ - - ServerName SpaceSaver - DocumentRoot /var/www/html/SpaceSaver + # Start apache server for HoneyPot + case "${release}" in + ubuntu) + systemctl enable apache2 + systemctl start apache2 + ;; + debian) + systemctl enable apache2 + systemctl start apache2 + ;; + armbian) + systemctl enable apache2 + systemctl start apache2 + ;; + fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol) + systemctl enable httpd + systemctl start httpd + ;; + centos) + systemctl enable httpd + systemctl start httpd + ;; + arch | manjaro | parch) + systemctl enable apache + systemctl start apache + ;; + *) + echo -e "${red}Cannot start apache service.${plain}\n" + exit 1 + ;; + esac - - Options Indexes FollowSymLinks - AllowOverride All - Require all granted - - ErrorLog ${APACHE_LOG_DIR}/error.log - CustomLog ${APACHE_LOG_DIR}/access.log combined -""" >> /etc/apache2/sites-enabled/spacesaver.conf + echo -e "${yellow}Installing HoneyPot..." + mv SpaceSaver/ /var/www/html/ - echo """ + # Config for apache2 + echo """ ServerName SpaceSaver DocumentRoot /var/www/html/SpaceSaver @@ -1751,19 +1773,121 @@ create_honeypot() { ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined """ >> /etc/apache2/sites-available/spacesaver.conf + + ln -sf /etc/apache2/sites-available/spacesaver.conf /etc/apache2/sites-enabled/ - # Restarting apache server - sudo systemctl reload apache2 + # Restarting apache server + case "${release}" in + ubuntu) + systemctl reload apache2 + ;; + debian) + systemctl reload apache2 + ;; + armbian) + systemctl reload apache2 + ;; + fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol) + systemctl reload httpd + ;; + centos) + systemctl reload httpd + ;; + arch | manjaro | parch) + systemctl reload httpd + ;; + *) + echo -e "${red}Cannot reload apache service.${plain}\n" + exit 1 + ;; + esac - # Access rights to HoneyPot's files - sudo chown -R www-data:www-data /var/www/html/SpaceSaver - sudo chmod -R 755 /var/www/html/SpaceSaver - chmod 644 /var/www/html/SpaceSaver/index.html + # Access rights to HoneyPot's files + chown -R www-data:www-data /var/www/html/SpaceSaver + chmod -R 755 /var/www/html/SpaceSaver + chmod 644 /var/www/html/SpaceSaver/index.html - sudo systemctl reload apache2 + echo -e "${plain}Done!" + echo -e "${green}Available here -> http://$server_ip:80" - echo -e "${green}${plain}Done!" - echo -e "${green}${plain}Available here -> http://$server_ip:80" + elif [ "$nginx_or_apache" = "Nginx" ]; then + case "${release}" in + ubuntu) + apt-get update + apt-get install nginx -y + ;; + debian) + apt-get update + apt-get install -y nginx + ;; + armbian) + apt-get update && apt-get install nginx -y + ;; + fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol) + dnf -y update && dnf -y install nginx + ;; + centos) + yum -y install nginx + ;; + arch | manjaro | parch) + pacman -Syu --noconfirm nginx + ;; + *) + echo -e "${red}Unsupported operating system. Please check the script and install the necessary packages manually.${plain}\n" + exit 1 + ;; + esac + + # Start nginx server for HoneyPot + systemctl enable nginx + systemctl start nginx + + #Downloading HoneyPot's files + git clone https://github.com/d3l1f3r/SpaceSaver.git + mv SpaceSaver/ /var/www/html/ + + # Config for nginx + tee /etc/nginx/sites-available/spacesaver.conf >/dev/null << 'EOF' + server { + listen 80 default_server; # ← важно для локального доступа + server_name 127.0.0.1 localhost SpaceSaver _; + + root /var/www/html/SpaceSaver; + index index.html; + + # Security Headers + add_header X-Content-Type-Options nosniff always; + add_header X-Frame-Options SAMEORIGIN always; + add_header X-XSS-Protection "1; mode=block" always; + add_header Referrer-Policy strict-origin-when-cross-origin always; + add_header Permissions-Policy "interest-cohort=()" always; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + + server_tokens off; + + location / { + try_files $uri $uri/ /index.html; + } + + location ~ /\. { + deny all; + access_log off; + log_not_found off; + } + + access_log /var/log/nginx/spacesaver.access.log; + error_log /var/log/nginx/spacesaver.error.log; + } +EOF + + rm -f /etc/nginx/sites-enabled/default + ln -sf /etc/nginx/sites-available/spacesaver.conf /etc/nginx/sites-enabled/ + systemctl reload nginx + + echo -e "${plain}Done!" + echo -e "${green}Available here -> http://$server_ip:80" + + fi } change_dns() { @@ -2170,11 +2294,11 @@ iplimit_remove_conflicts() { SSH_port_forwarding() { local URL_lists=( "https://api4.ipify.org" - "https://ipv4.icanhazip.com" - "https://v4.api.ipinfo.io/ip" - "https://ipv4.myexternalip.com/raw" - "https://4.ident.me" - "https://check-host.net/ip" + "https://ipv4.icanhazip.com" + "https://v4.api.ipinfo.io/ip" + "https://ipv4.myexternalip.com/raw" + "https://4.ident.me" + "https://check-host.net/ip" ) local server_ip="" for ip_address in "${URL_lists[@]}"; do @@ -2305,28 +2429,29 @@ show_menu() { │ ${green}11.${plain} Start │ │ ${green}12.${plain} Stop │ │ ${green}13.${plain} Restart │ -│ ${green}14.${plain} Check Status │ -│ ${green}15.${plain} Logs Management │ +| ${green}14.${plain} Restart Xray │ +│ ${green}15.${plain} Check Status │ +│ ${green}16.${plain} Logs Management │ │────────────────────────────────────────────────│ -│ ${green}16.${plain} Enable Autostart │ -│ ${green}17.${plain} Disable Autostart │ +│ ${green}17.${plain} Enable Autostart │ +│ ${green}18.${plain} Disable Autostart │ │────────────────────────────────────────────────│ -│ ${green}18.${plain} SSL Certificate Management │ -│ ${green}19.${plain} Cloudflare SSL Certificate │ -│ ${green}20.${plain} IP Limit Management │ -│ ${green}21.${plain} Firewall Management │ -│ ${green}22.${plain} SSH Port Forwarding Management │ -│ ${green}23.${plain} HoneyPot (Fakesite) │ -│ ${green}24.${plain} Change DNS resolver │ +│ ${green}19.${plain} SSL Certificate Management │ +│ ${green}20.${plain} Cloudflare SSL Certificate │ +│ ${green}21.${plain} IP Limit Management │ +│ ${green}22.${plain} Firewall Management │ +│ ${green}23.${plain} SSH Port Forwarding Management │ +│ ${green}24.${plain} HoneyPot (Fakesite) │ +│ ${green}25.${plain} Change DNS resolver │ │────────────────────────────────────────────────│ -│ ${green}25.${plain} Enable BBR │ -│ ${green}26.${plain} Update Geo Files │ -│ ${green}27.${plain} Speedtest by Ookla │ -│ ${green}28.${plain} Librespeed │ +│ ${green}26.${plain} Enable BBR │ +│ ${green}27.${plain} Update Geo Files │ +│ ${green}28.${plain} Speedtest by Ookla │ +│ ${green}29.${plain} Librespeed │ ╚────────────────────────────────────────────────╝ " show_status - echo && read -rp "Please enter your selection [0-28]: " num + echo && read -rp "Please enter your selection [0-29]: " num case "${num}" in 0) @@ -2372,52 +2497,55 @@ show_menu() { check_install && restart ;; 14) - check_install && status + check_install && restart_xray ;; 15) - check_install && show_log + check_install && status ;; 16) - check_install && enable + check_install && show_log ;; 17) - check_install && disable + check_install && enable ;; 18) - ssl_cert_issue_main + check_install && disable ;; 19) - ssl_cert_issue_CF + ssl_cert_issue_main ;; 20) - iplimit_main + ssl_cert_issue_CF ;; 21) - firewall_menu + iplimit_main ;; 22) - SSH_port_forwarding + firewall_menu ;; 23) - create_honeypot + SSH_port_forwarding ;; 24) - change_dns + create_honeypot ;; 25) - bbr_menu + change_dns ;; 26) - update_geo + bbr_menu ;; 27) - run_speedtest + update_geo ;; 28) + run_speedtest + ;; + 29) run_librespeed ;; *) - LOGE "Please enter the correct number [0-28]" + LOGE "Please enter the correct number [0-29]" ;; esac } @@ -2470,4 +2598,4 @@ if [[ $# > 0 ]]; then esac else show_menu -fi +fi \ No newline at end of file From 4b5f5db4ed73e3ce043b4c32b28bd5f8c8fe4552 Mon Sep 17 00:00:00 2001 From: delifer Date: Fri, 27 Feb 2026 23:03:19 +0700 Subject: [PATCH 4/4] fix LibreSpeed installing, move the SpaceSaver inside --- SpaceSaver/index.html | 35 +++++++++++++++++++++++ SpaceSaver/script.js | 6 ++++ SpaceSaver/style.css | 64 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 SpaceSaver/index.html create mode 100644 SpaceSaver/script.js create mode 100644 SpaceSaver/style.css diff --git a/SpaceSaver/index.html b/SpaceSaver/index.html new file mode 100644 index 00000000..e7aebbdf --- /dev/null +++ b/SpaceSaver/index.html @@ -0,0 +1,35 @@ + + + + + + + SpaceSaver + + +
+ SpaceSaver (Безопасное хранилище) +
+
+
+ + + + +
+ +
+ + + + +
+ + + +
Неверный пароль или имя пользователя
+
+
+ + + \ No newline at end of file diff --git a/SpaceSaver/script.js b/SpaceSaver/script.js new file mode 100644 index 00000000..9028d1d2 --- /dev/null +++ b/SpaceSaver/script.js @@ -0,0 +1,6 @@ +document.getElementById('loginForm').addEventListener('submit', function(e) { + e.preventDefault(); + document.getElementById('errorMsg').style.display = 'block'; + document.querySelector('input[name="username"]').value = ''; + document.querySelector('input[name="password"]').value = ''; + }); \ No newline at end of file diff --git a/SpaceSaver/style.css b/SpaceSaver/style.css new file mode 100644 index 00000000..b946a8af --- /dev/null +++ b/SpaceSaver/style.css @@ -0,0 +1,64 @@ +body { + min-height: 100vh; + background: #0a0e14; + color: #e0e7ff; + font-family: system-ui, sans-serif; + + display: flex; + justify-content: center; + align-items: center; + } + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + } + +.error-message { + color: #f85149; + font-size: 0.95rem; + margin-top: 1rem; + min-height: 1.2rem; + display: none; + } + +.input-group { + position: relative; + margin-bottom: 1.2rem; + } + +.icon { + position: absolute; + left: 1rem; + top: 50%; + transform: translateY(-50%); + width: 20px; + height: 20px; + color: #8b949e; + pointer-events: none; + } + +input { + width: 100%; + height: 44px; + padding: 0 1rem 0 2.8rem; + background: #0d1117; + border: 1px solid #30363d; + border-radius: 6px; + color: #e6edf3; + font-size: 1rem; + line-height: 1.4; + } + +button { + width: 100%; + padding: 0.95rem; + background: #238636; + color: white; + border: none; + border-radius: 6px; + font-size: 1.05rem; + cursor: pointer; + margin-top: 0.8rem; + } \ No newline at end of file