From 1c2b6095c94ddcf1ba0c9a7aadd9f70804660b90 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 15 Oct 2024 20:54:23 +0200 Subject: [PATCH 01/21] fix core restart on traffic reset of disabled client Co-Authored-By: Alireza Ahmadi --- web/service/inbound.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/service/inbound.go b/web/service/inbound.go index 60530143..7afcb140 100644 --- a/web/service/inbound.go +++ b/web/service/inbound.go @@ -1574,7 +1574,7 @@ func (s *InboundService) ResetClientTraffic(id int, clientEmail string) (bool, e return false, err } for _, client := range clients { - if client.Email == clientEmail { + if client.Email == clientEmail && client.Enable { s.xrayApi.Init(p.GetAPIPort()) cipher := "" if string(inbound.Protocol) == "shadowsocks" { From d85226dc799505e9c6d06f104992c617f4075343 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:55:16 +0200 Subject: [PATCH 02/21] Bump github.com/nicksnyder/go-i18n/v2 from 2.4.0 to 2.4.1 (#2582) Bumps [github.com/nicksnyder/go-i18n/v2](https://github.com/nicksnyder/go-i18n) from 2.4.0 to 2.4.1. - [Release notes](https://github.com/nicksnyder/go-i18n/releases) - [Changelog](https://github.com/nicksnyder/go-i18n/blob/main/CHANGELOG.md) - [Commits](https://github.com/nicksnyder/go-i18n/compare/v2.4.0...v2.4.1) --- updated-dependencies: - dependency-name: github.com/nicksnyder/go-i18n/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 402feeb2..8f2d4a67 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( 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/nicksnyder/go-i18n/v2 v2.4.0 + 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 github.com/robfig/cron/v3 v3.0.1 diff --git a/go.sum b/go.sum index 65f127fe..bd69e7e0 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0 h1:Wo41lDOevRJSGpevP+8Pk5bANX7fJacO2w04aqLiC5I= github.com/OmarTariq612/goech v0.0.0-20240405204721-8e2e1dafd3a0/go.mod h1:FVGavL/QEBQDcBpr3fAojoK17xX5k9bicBphrOpP7uM= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= @@ -109,8 +109,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G 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/nicksnyder/go-i18n/v2 v2.4.0 h1:3IcvPOAvnCKwNm0TB0dLDTuawWEj+ax/RERNC+diLMM= -github.com/nicksnyder/go-i18n/v2 v2.4.0/go.mod h1:nxYSZE9M0bf3Y70gPQjN9ha7XNHX7gMc814+6wVyEI4= +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= From f98d78c3560a2e86cc03801002e965ca64eceb5a Mon Sep 17 00:00:00 2001 From: laperuz92 <31198184+laperuz92@users.noreply.github.com> Date: Wed, 16 Oct 2024 02:56:09 +0800 Subject: [PATCH 03/21] Update Russian translation. (#2583) * Update Russian translations. * Some more fixes --- web/translation/translate.ru_RU.toml | 76 ++++++++++++++-------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 434d481c..a5eae4b8 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -1,6 +1,6 @@ "username" = "Имя пользователя" "password" = "Пароль" -"login" = "Логин" +"login" = "Войти" "confirm" = "Подтвердить" "cancel" = "Отмена" "close" = "Закрыть" @@ -67,12 +67,12 @@ "settings" = "Настройки панели" "xray" = "Настройки Xray" "logout" = "Выход" -"link" = "Менеджмент" +"link" = "Управление" [pages.login] "hello" = "Привет" "title" = "Добро пожаловать" -"loginAgain" = "Время пребывания в сети вышло. Пожалуйста, войдите в систему снова" +"loginAgain" = "Ваша сессия истекла. Пожалуйста, войдите в систему снова" [pages.login.toasts] "invalidFormData" = "Недопустимый формат данных" @@ -93,8 +93,8 @@ "xraySwitchClickDesk" = "Выбирайте внимательно, так как старые версии могут быть несовместимы с текущими конфигурациями" "operationHours" = "Время работы системы" "systemLoad" = "Системная нагрузка" -"systemLoadDesc" = "средняя загрузка системы за последние 1, 5 и 15 минут" -"connectionTcpCountDesc" = "Всего подключений TCP по всем сетевым картам." +"systemLoadDesc" = "Средняя загрузка системы за последние 1, 5 и 15 минут" +"connectionTcpCountDesc" = "Общее количество подключений TCP по всем сетевым картам." "connectionUdpCountDesc" = "Общее количество подключений UDP по всем сетевым картам." "connectionCount" = "Количество соединений" "upSpeed" = "Общая скорость upload для всех сетей" @@ -133,21 +133,21 @@ "update" = "Обновить" "modifyInbound" = "Изменить подключение" "deleteInbound" = "Удалить подключение" -"deleteInboundContent" = "Подтвердите удаление подключения?" +"deleteInboundContent" = "Вы уверены, что хотите удалить подключение?" "deleteClient" = "Удалить клиента" "deleteClientContent" = "Вы уверены, что хотите удалить клиента?" -"resetTrafficContent" = "Подтвердите сброс трафика?" +"resetTrafficContent" = "Вы уверены, что хотите сбросить трафик?" "copyLink" = "Копировать ключ" "address" = "Адрес" "network" = "Сеть" "destinationPort" = "Порт назначения" "targetAddress" = "Целевой адрес" -"monitorDesc" = "Оставьте пустым по умолчанию" +"monitorDesc" = "Оставьте пустым для прослушивания всех IP-адресов" "meansNoLimit" = "= Без ограничений (значение: ГБ)" "totalFlow" = "Общий расход" "leaveBlankToNeverExpire" = "Оставьте пустым, чтобы не истекало" -"noRecommendKeepDefault" = "Нет требований для сохранения настроек по умолчанию" -"certificatePath" = "Путь файла" +"noRecommendKeepDefault" = "Рекомендуется оставить настройки по умолчанию" +"certificatePath" = "Путь к файлу" "certificateContent" = "Содержимое файла" "publicKey" = "Публичный ключ" "privatekey" = "Приватный ключ" @@ -160,16 +160,16 @@ "cloneInboundOk" = "Клонировано" "resetAllTraffic" = "Сбросить трафик всех подключений" "resetAllTrafficTitle" = "Сброс трафика всех подключений" -"resetAllTrafficContent" = "Подтверждаете сброс трафика всех подключений?" +"resetAllTrafficContent" = "Вы уверены, что хотите сбросить трафик всех подключений?" "resetInboundClientTraffics" = "Сбросить трафик пользователей" "resetInboundClientTrafficTitle" = "Сброс трафика пользователей" "resetInboundClientTrafficContent" = "Вы уверены, что хотите сбросить весь трафик для этих пользователей?" "resetAllClientTraffics" = "Сбросить трафик всех пользователей" "resetAllClientTrafficTitle" = "Сброс трафика всех пользователей" -"resetAllClientTrafficContent" = "Подтверждаете сброс трафика всех пользователей?" +"resetAllClientTrafficContent" = "Вы уверены, что хотите сбросить трафик всех пользователей?" "delDepletedClients" = "Удалить отключенных пользователей" "delDepletedClientsTitle" = "Удаление отключенных пользователей" -"delDepletedClientsContent" = "Подтверждаете удаление отключенных пользователей?" +"delDepletedClientsContent" = "Вы уверены, что хотите удалить всех отключенных пользователей?" "email" = "Email" "emailDesc" = "Пожалуйста, укажите уникальный Email" "IPLimit" = "Ограничение по IP" @@ -220,7 +220,7 @@ "version" = "Версия" "method" = "Метод" "path" = "Путь" -"status" = "Положение дел" +"status" = "Статус" "statusDescription" = "Описание статуса" "requestHeader" = "Заголовок запроса" "responseHeader" = "Заголовок ответа" @@ -228,9 +228,9 @@ [pages.settings] "title" = "Настройки" "save" = "Сохранить" -"infoDesc" = "Каждое сделанное здесь изменение необходимо сохранить. Пожалуйста, перезапустите панель, чтобы изменения вступили в силу" +"infoDesc" = "Каждое выполненное изменение необходимо сохранить. Пожалуйста, перезапустите панель, чтобы изменения вступили в силу" "restartPanel" = "Перезапуск панели" -"restartPanelDesc" = "Подтвердите перезапуск панели? ОК для перезапуска панели через 3 сек. Если вы не можете пользоваться панелью после перезапуска, пожалуйста, посмотрите лог панели на сервере" +"restartPanelDesc" = "Вы уверены, что хотите перезапустить панель?Нажмите ОК для перезапуска панели через 3 сек. Если вы не можете пользоваться панелью после перезапуска, пожалуйста, посмотрите лог панели на сервере" "actions" = "Действия" "resetDefaultConfig" = "Сбросить на конфигурацию по умолчанию" "panelSettings" = "Настройки панели" @@ -243,21 +243,21 @@ "panelPort" = "Порт панели" "panelPortDesc" = "Порт, используемый для отображения этой панели" "publicKeyPath" = "Путь к файлу публичного ключа сертификата панели" -"publicKeyPathDesc" = "Введите полный путь, начинающийся с" +"publicKeyPathDesc" = "Введите полный путь, начинающийся с '/'" "privateKeyPath" = "Путь к файлу приватного ключа сертификата панели" -"privateKeyPathDesc" = "Введите полный путь, начинающийся с" +"privateKeyPathDesc" = "Введите полный путь, начинающийся с '/'" "panelUrlPath" = "Корневой путь URL адреса панели" -"panelUrlPathDesc" = "Должен начинаться с '/' и заканчиваться на" +"panelUrlPathDesc" = "Должен начинаться с '/' и заканчиваться на '/'" "pageSize" = "Размер нумерации страниц" "pageSizeDesc" = "Определить размер страницы для входящей таблицы. Установите 0, чтобы отключить" "remarkModel" = "Модель примечания и символ разделения" "datepicker" = "Выбор даты" "datepickerPlaceholder" = "Выберите дату" -"datepickerDescription" = "Тип календаря выбора указывает дату истечения срока действия." +"datepickerDescription" = "Запланированные задачи выполняются в соответствии с данным календарём" "sampleRemark" = "Пример замечания" -"oldUsername" = "Текущее имя пользователя" +"oldUsername" = "Текущий логин" "currentPassword" = "Текущий пароль" -"newUsername" = "Новое имя пользователя" +"newUsername" = "Новый логин" "newPassword" = "Новый пароль" "telegramBotEnable" = "Включить Telegram бота" "telegramBotEnableDesc" = "Подключайтесь к функциям этой панели через Telegram бота" @@ -265,8 +265,8 @@ "telegramTokenDesc" = "Необходимо получить токен у менеджера ботов Telegram @botfather" "telegramProxy" = "Прокси Socks5" "telegramProxyDesc" = "Если для подключения к Telegram вам нужен прокси Socks5. Настройте его параметры согласно руководству." -"telegramChatId" = "Telegram ChatID админа бота" -"telegramChatIdDesc" = "Множественные идентификаторы чата, разделенные запятыми. Чтобы получить свои идентификаторы чатов, используйте @userinfobot или команду '/id' в боте." +"telegramChatId" = "Идентификатор Telegram администратора бота" +"telegramChatIdDesc" = "Один или несколько идентификаторов администратора бота. Чтобы получить идентификатор, используйте @userinfobot или команду '/id' в боте." "telegramNotifyTime" = "Частота уведомлений бота Telegram" "telegramNotifyTimeDesc" = "Используйте формат времени Crontab" "tgNotifyBackup" = "Резервное копирование базы данных" @@ -291,19 +291,19 @@ "subPort" = "Порт подписки" "subPortDesc" = "Номер порта для обслуживания службы подписки не должен использоваться на сервере" "subCertPath" = "Путь к файлу открытого ключа сертификата подписки" -"subCertPathDesc" = "Введите абсолютный путь, начинающийся с '/'" +"subCertPathDesc" = "Введите полный путь, начинающийся с '/'" "subKeyPath" = "Путь к файлу закрытого ключа сертификата подписки" -"subKeyPathDesc" = "Введите абсолютный путь, начинающийся с '/'" +"subKeyPathDesc" = "Введите полный путь, начинающийся с '/'" "subPath" = "Корневой путь URL-адреса подписки" "subPathDesc" = "Должен начинаться с '/' и заканчиваться на '/'" "subDomain" = "Домен прослушивания" "subDomainDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все домены и IP-адреса" "subUpdates" = "Интервалы обновления подписки" -"subUpdatesDesc" = "Часовой интервал между обновлениями в клиентском приложении" +"subUpdatesDesc" = "Интервал между обновлениями в клиентском приложении (в часах)" "subEncrypt" = "Шифровать конфиги" "subEncryptDesc" = "Шифровать возвращенные конфиги в подписке" "subShowInfo" = "Показать информацию об использовании" -"subShowInfoDesc" = "Показывать восстановленный трафик и дату после имени конфигурации" +"subShowInfoDesc" = "Показывать оставшиеся трафик и дату после имени конфигурации" "subURI" = "URI обратного прокси" "subURIDesc" = "Изменить базовый URI URL-адреса подписки для использования за прокси-серверами" "fragment" = "Фрагментация" @@ -327,7 +327,7 @@ "generalConfigs" = "Основные настройки" "generalConfigsDesc" = "Эти параметры описывают общие настройки" "logConfigs" = "Журнал" -"logConfigsDesc" = "Журналы могут повлиять на эффективность вашего сервера. Рекомендуется включать их с умом только в случае ваших нужд!" +"logConfigsDesc" = "Журналы могут повлиять на эффективность вашего сервера. Рекомендуется включать их только в случае необходимости!" "blockConfigs" = "Блокировка конфигураций" "blockConfigsDesc" = "Эти параметры не позволят пользователям подключаться к определенным протоколам и веб-сайтам" "basicRouting" = "Базовые соединения" @@ -344,7 +344,7 @@ "Template" = "Шаблон конфигурации Xray" "TemplateDesc" = "Создание файла конфигурации Xray на основе этого шаблона" "FreedomStrategy" = "Настройка стратегии протокола Freedom" -"FreedomStrategyDesc" = "Установка стратегию вывода сети в протоколе Freedom" +"FreedomStrategyDesc" = "Установка стратегии вывода сети в протоколе Freedom" "RoutingStrategy" = "Настройка стратегии маршрутизации доменов" "RoutingStrategyDesc" = "Установка общей стратегии маршрутизации разрешения DNS" "Torrent" = "Запрет использования BitTorrent" @@ -362,7 +362,7 @@ "logLevel" = "Уровень журнала" "logLevelDesc" = "Уровень журнала для журналов ошибок, указывающий информацию, которую необходимо записать." "accessLog" = "Журнал доступа" -"accessLogDesc" = "Путь к файлу журнала доступа. Специальное значение «none» отключило журналы доступа." +"accessLogDesc" = "Путь к файлу журнала доступа. Специальное значение «none» отключает журналы доступа." "errorLog" = "Журнал ошибок" "errorLogDesc" = "Путь к файлу журнала ошибок. Специальное значение «none» отключает журналы ошибок." "dnsLog" = "DNS Журнал" @@ -379,7 +379,7 @@ "dest" = "Пункт назначения" "inbound" = "Входящий" "outbound" = "Исходящий" -"balancer" = "балансир" +"balancer" = "Балансировщик" "info" = "Информация" "add" = "Добавить правило" "edit" = "Редактировать правило" @@ -391,7 +391,7 @@ "editOutbound" = "Изменить исходящий" "editReverse" = "Редактировать реверс" "tag" = "Тег" -"tagDesc" = "уникальный тег" +"tagDesc" = "Уникальный тег" "address" = "Адрес" "reverse" = "Обратный" "domain" = "Домен" @@ -400,21 +400,21 @@ "portal" = "Портал" "intercon" = "Соединение" "settings" = "Настройки" -"accountInfo" = "Информация Об Учетной Записи" +"accountInfo" = "Информация Об учетной записи" "outboundStatus" = "Исходящий статус" "sendThrough" = "Отправить через" [pages.xray.balancer] -"addBalancer" = "Добавить балансир" -"editBalancer" = "Редактировать балансир" +"addBalancer" = "Добавить балансировщик" +"editBalancer" = "Редактировать балансировщик" "balancerStrategy" = "Стратегия" "balancerSelectors" = "Селекторы" "tag" = "Тег" -"tagDesc" = "уникальный тег" +"tagDesc" = "Уникальный тег" "balancerDesc" = "Невозможно одновременно использовать balancerTag и outboundTag. При одновременном использовании будет работать только outboundTag." [pages.xray.wireguard] -"secretKey" = "Секретный ключ" +"secretKey" = "Приватный ключ" "publicKey" = "Публичный ключ" "allowedIPs" = "Разрешенные IP-адреса" "endpoint" = "Конечная точка" From b0d2cb93e1d4fcd4ed5885c984511382e786de70 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 15 Oct 2024 21:33:41 +0200 Subject: [PATCH 04/21] bash menu - debug log, clear all logs --- x-ui.sh | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/x-ui.sh b/x-ui.sh index d312a225..73b9361b 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -416,10 +416,31 @@ disable() { } show_log() { - journalctl -u x-ui.service -e --no-pager -f - if [[ $# == 0 ]]; then + echo -e "${green}\t1.${plain} Debug Log" + echo -e "${green}\t2.${plain} Clear All logs" + echo -e "${green}\t0.${plain} Back to Main Menu" + read -p "Choose an option: " choice + + case "$choice" in + 0) + return + ;; + 1) + journalctl -u x-ui -e --no-pager -f -p debug + if [[ $# == 0 ]]; then before_show_menu - fi + fi + ;; + 2) + sudo journalctl --rotate + sudo journalctl --vacuum-time=1s + echo "All Logs cleared." + restart + ;; + *) + echo "Invalid choice" + ;; + esac } show_banlog() { @@ -1449,7 +1470,7 @@ show_menu() { ${green}12.${plain} Stop ${green}13.${plain} Restart ${green}14.${plain} Check Status - ${green}15.${plain} Check Logs + ${green}15.${plain} Logs Management ———————————————— ${green}16.${plain} Enable Autostart ${green}17.${plain} Disable Autostart From d97d36bb9e4b379c3067d9c48c2e31f068a81cbb Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Tue, 15 Oct 2024 21:49:36 +0200 Subject: [PATCH 05/21] 500 rows for log page --- web/html/xui/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/web/html/xui/index.html b/web/html/xui/index.html index f1583a8f..2e57277a 100644 --- a/web/html/xui/index.html +++ b/web/html/xui/index.html @@ -291,6 +291,7 @@ 20 50 100 + 500 From dff2496d73e94792b6ecd876a2bdb6ab851faec8 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Wed, 16 Oct 2024 12:07:28 +0200 Subject: [PATCH 06/21] Xray Core v24.10.16 --- .github/workflows/release.yml | 2 +- DockerInit.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 731a916a..38ee449f 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.9.30/" + Xray_URL="https://github.com/XTLS/Xray-core/releases/download/v24.10.16/" 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 b68af92f..aae6b1c4 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.9.30/Xray-linux-${ARCH}.zip" +wget "https://github.com/XTLS/Xray-core/releases/download/v24.10.16/Xray-linux-${ARCH}.zip" unzip "Xray-linux-${ARCH}.zip" rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat mv xray "xray-linux-${FNAME}" From ac7901abba4326ae8ee75cdc18bbb84c7bda85d4 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Wed, 16 Oct 2024 12:06:47 +0200 Subject: [PATCH 07/21] Wireguard - kernel Tun --- web/assets/js/model/outbound.js | 6 +++++- web/assets/js/model/xray.js | 12 +++++++++++- web/html/xui/form/outbound.html | 3 +++ web/html/xui/form/protocol/wireguard.html | 3 +++ web/html/xui/inbound_info_modal.html | 4 ++++ web/html/xui/warp_modal.html | 3 ++- 6 files changed, 28 insertions(+), 3 deletions(-) diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index a66cc215..71c07713 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -1178,7 +1178,8 @@ Outbound.WireguardSettings = class extends CommonClass { domainStrategy = '', reserved = '', peers = [new Outbound.WireguardSettings.Peer()], - kernelMode = false + kernelMode = false, + kernelTun = false ) { super(); this.mtu = mtu; @@ -1190,6 +1191,7 @@ Outbound.WireguardSettings = class extends CommonClass { this.reserved = Array.isArray(reserved) ? reserved.join(',') : reserved; this.peers = peers; this.kernelMode = kernelMode; + this.kernelTun = kernelTun; } addPeer() { @@ -1210,6 +1212,7 @@ Outbound.WireguardSettings = class extends CommonClass { json.reserved, json.peers.map(peer => Outbound.WireguardSettings.Peer.fromJson(peer)), json.kernelMode, + json.kernelTun, ); } @@ -1223,6 +1226,7 @@ Outbound.WireguardSettings = class extends CommonClass { reserved: this.reserved ? this.reserved.split(",").map(Number) : undefined, peers: Outbound.WireguardSettings.Peer.toJsonArray(this.peers), kernelMode: this.kernelMode, + kernelTun: this.kernelTun, }; } }; diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 6d0c1c9d..9b731a7f 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -2644,13 +2644,21 @@ Inbound.HttpSettings.HttpAccount = class extends XrayCommonClass { }; Inbound.WireguardSettings = class extends XrayCommonClass { - constructor(protocol, mtu = 1420, secretKey = Wireguard.generateKeypair().privateKey, peers = [new Inbound.WireguardSettings.Peer()], kernelMode = false) { + constructor( + protocol, + mtu = 1420, + secretKey = Wireguard.generateKeypair().privateKey, + peers = [new Inbound.WireguardSettings.Peer()], + kernelMode = false, + kernelTun = false, + ) { super(protocol); this.mtu = mtu; this.secretKey = secretKey; this.pubKey = secretKey.length > 0 ? Wireguard.generateKeypair(secretKey).publicKey : ''; this.peers = peers; this.kernelMode = kernelMode; + this.kernelTun = kernelTun; } addPeer() { @@ -2668,6 +2676,7 @@ Inbound.WireguardSettings = class extends XrayCommonClass { json.secretKey, json.peers.map(peer => Inbound.WireguardSettings.Peer.fromJson(peer)), json.kernelMode, + json.kernelTun, ); } @@ -2677,6 +2686,7 @@ Inbound.WireguardSettings = class extends XrayCommonClass { secretKey: this.secretKey, peers: Inbound.WireguardSettings.Peer.toJsonArray(this.peers), kernelMode: this.kernelMode, + kernelTun: this.kernelTun, }; } }; diff --git a/web/html/xui/form/outbound.html b/web/html/xui/form/outbound.html index 00b33c0b..f35391cf 100644 --- a/web/html/xui/form/outbound.html +++ b/web/html/xui/form/outbound.html @@ -150,6 +150,9 @@ + + + @@ -939,13 +920,22 @@ { label: '🇻🇳 Vietnam', value: 'ext:geosite_VN.dat:vn' }, { label: '🇻🇳 .vn', value: 'regexp:.*\\.vn$' }, ], - ProtectionOptions: [ + BlockDomainsOptions: [ { label: 'Ads All', value: 'geosite:category-ads-all' }, { label: 'Ads IR 🇮🇷', value: 'ext:geosite_IR.dat:category-ads-all' }, { label: 'Ads VN 🇻🇳', value: 'ext:geosite_VN.dat:ads' }, - { label: 'Malware 🇮🇷', value: 'geosite_IR.dat:malware' }, - { label: 'Phishing 🇮🇷', value: 'geosite_IR.dat:phishing' }, - { label: 'Cryptominers 🇮🇷', value: 'geosite_IR.dat:cryptominers' }, + { label: 'Malware 🇮🇷', value: 'ext:geosite_IR.dat:malware' }, + { label: 'Phishing 🇮🇷', value: 'ext:geosite_IR.dat:phishing' }, + { label: 'Cryptominers 🇮🇷', value: 'ext:geosite_IR.dat:cryptominers' }, + { label: '🇮🇷 Iran', value: 'ext:geosite_IR.dat:ir' }, + { label: '🇮🇷 .ir', value: 'regexp:.*\\.ir$' }, + { label: '🇮🇷 .ایران', value: 'regexp:.*\\.xn--mgba3a4f16a$' }, + { label: '🇨🇳 China', value: 'geosite:cn' }, + { label: '🇨🇳 .cn', value: 'regexp:.*\\.cn$' }, + { label: '🇷🇺 Russia', value: 'geosite:category-ru' }, + { label: '🇷🇺 .ru', value: 'regexp:.*\\.ru' }, + { label: '🇻🇳 Vietnam', value: 'ext:geosite_VN.dat:vn' }, + { label: '🇻🇳 .vn', value: 'regexp:.*\\.vn$' }, ], ServicesOptions: [ { label: 'Apple', value: 'geosite:apple' }, From 5e5851029d0f4aa4957054ba687ef85aeb246d16 Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Thu, 17 Oct 2024 12:58:18 +0200 Subject: [PATCH 21/21] update README: SSL Certificate Management --- README.es_ES.md | 44 ++++++++++++++++++++++++++++++++++---------- README.md | 2 ++ README.ru_RU.md | 2 ++ README.zh_CN.md | 8 +++++--- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/README.es_ES.md b/README.es_ES.md index f4d78818..dc096a24 100644 --- a/README.es_ES.md +++ b/README.es_ES.md @@ -41,27 +41,51 @@ VERSION=v1.7.9 bash <(curl -Ls "https://raw.githubusercontent.com/mhsanaei/3x-ui ## Certificado SSL
- Haz clic para el Certificado SSL + Haga clic para ver los detalles del certificado SSL -### Cloudflare +### ACME -El script de gestión tiene una aplicación de certificado SSL incorporada para Cloudflare. Para usar este script para colocar un certificado, necesitas lo siguiente: +Para gestionar certificados SSL utilizando ACME: -- Correo electrónico registrado en Cloudflare -- Clave Global de API de Cloudflare -- El nombre de dominio se ha resuelto en el servidor actual a través de Cloudflare - -**1:** Ejecuta el comando`x-ui`en la terminal, luego elige `Certificado SSL de Cloudflare`. +1. Asegúrate de que tu dominio esté correctamente resuelto al servidor. +2. Ejecuta el comando `x-ui` en la terminal y elige `Gestión de Certificados SSL`. +3. Se te presentarán las siguientes opciones: + - **Get SSL:** Obtener certificados SSL. + - **Revoke:** Revocar certificados SSL existentes. + - **Force Renew:** Forzar la renovación de certificados SSL. + - **Show Existing Domains:** Mostrar todos los certificados de dominio disponibles en el servidor. + - **Set Certificate Paths for the Panel:** Especificar el certificado para tu dominio que será utilizado por el panel. ### Certbot -``` + +Para instalar y usar Certbot: + +```sh apt-get install certbot -y certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com certbot renew --dry-run ``` -***Consejo:*** *Certbot también está integrado en el script de gestión. Puedes ejecutar el comando `x-ui` , luego elegir `Gestión de Certificados SSL`.* +### Cloudflare + +El script de gestión incluye una aplicación de certificado SSL integrada para Cloudflare. Para usar este script para solicitar un certificado, necesitas lo siguiente: + +- Correo electrónico registrado en Cloudflare +- Clave API Global de Cloudflare +- El nombre de dominio debe estar resuelto al servidor actual a través de Cloudflare + +**Cómo obtener la Clave API Global de Cloudflare:** + +1. Ejecuta el comando `x-ui` en la terminal y elige `Certificado SSL de Cloudflare`. +2. Visita el enlace: [Tokens de API de Cloudflare](https://dash.cloudflare.com/profile/api-tokens). +3. Haz clic en "Ver Clave API Global" (consulta la captura de pantalla a continuación): + ![](media/APIKey1.PNG) +4. Es posible que necesites volver a autenticar tu cuenta. Después de eso, se mostrará la Clave API (consulta la captura de pantalla a continuación): + ![](media/APIKey2.png) + +Al utilizarlo, simplemente ingresa tu `nombre de dominio`, `correo electrónico` y `CLAVE API`. El diagrama es el siguiente: + ![](media/DetailEnter.png)
diff --git a/README.md b/README.md index e7bcaf22..6f52f0ce 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ To manage SSL certificates using ACME: - **Get SSL:** Obtain SSL certificates. - **Revoke:** Revoke existing SSL certificates. - **Force Renew:** Force renewal of SSL certificates. + - **Show Existing Domains:** Display all domain certificates available on the server. + - **Set Certificate Paths for the Panel:** Specify the certificate for your domain to be used by the panel. ### Certbot diff --git a/README.ru_RU.md b/README.ru_RU.md index e6456c7b..36ad3ced 100644 --- a/README.ru_RU.md +++ b/README.ru_RU.md @@ -54,6 +54,8 @@ VERSION=v1.7.9 bash <(curl -Ls "https://raw.githubusercontent.com/mhsanaei/3x-ui - **Get SSL:** Получить SSL сертификаты. - **Revoke:** Отозвать существующие SSL сертификаты. - **Force Renew:** Принудительно перевыпустить SSL сертификаты. + - **Show Existing Domains:** Отобразить все сертификаты доменов, доступные на сервере. + - **Set Certificate Paths for the Panel:** Укажите сертификат для вашего домена, который будет использоваться панелью. ### Certbot diff --git a/README.zh_CN.md b/README.zh_CN.md index 96a29e44..c4fe7d86 100644 --- a/README.zh_CN.md +++ b/README.zh_CN.md @@ -51,9 +51,11 @@ VERSION=v1.7.9 bash <(curl -Ls "https://raw.githubusercontent.com/mhsanaei/3x-ui 2. 在终端中运行 `x-ui` 命令,然后选择 `SSL证书管理`。 3. 您将看到以下选项: - - **获取SSL证书:** 获取SSL证书。 - - **吊销:** 吊销现有的SSL证书。 - - **强制更新:** 强制更新SSL证书。 + - **Get SSL:** 获取SSL证书。 + - **Revoke:** 吊销现有的SSL证书。 + - **Force Renew:** 强制更新SSL证书。 + - **Show Existing Domains:** 显示服务器上所有可用的域证书。 + - **Set Certificate Paths for the Panel:** 指定用于面板的域证书。 ### Certbot