From ace54bc51721a34e91b9adfb5b96ed040672c7fe Mon Sep 17 00:00:00 2001 From: ali rahimi Date: Wed, 15 Jan 2025 22:36:49 +0100 Subject: [PATCH] add client traffic syncer setting option --- web/assets/js/model/setting.js | 1 + web/entity/entity.go | 1 + web/html/xui/settings.html | 1 + web/service/setting.go | 10 ++++++++++ web/translation/translate.en_US.toml | 2 ++ web/translation/translate.es_ES.toml | 2 ++ web/translation/translate.fa_IR.toml | 2 ++ web/translation/translate.id_ID.toml | 2 ++ web/translation/translate.ja_JP.toml | 2 ++ web/translation/translate.pt_BR.toml | 2 ++ web/translation/translate.ru_RU.toml | 2 ++ web/translation/translate.tr_TR.toml | 2 ++ web/translation/translate.uk_UA.toml | 2 ++ web/translation/translate.vi_VN.toml | 2 ++ web/translation/translate.zh_CN.toml | 2 ++ web/translation/translate.zh_TW.toml | 2 ++ web/web.go | 8 ++++++-- 17 files changed, 43 insertions(+), 2 deletions(-) diff --git a/web/assets/js/model/setting.js b/web/assets/js/model/setting.js index 8e010598..72fe77ef 100644 --- a/web/assets/js/model/setting.js +++ b/web/assets/js/model/setting.js @@ -26,6 +26,7 @@ class AllSetting { this.xrayTemplateConfig = ""; this.secretEnable = false; this.subEnable = false; + this.subSyncEnable = true; this.subListen = ""; this.subPort = 2096; this.subPath = "/sub/"; diff --git a/web/entity/entity.go b/web/entity/entity.go index 12206340..f5f375ea 100644 --- a/web/entity/entity.go +++ b/web/entity/entity.go @@ -40,6 +40,7 @@ type AllSetting struct { TimeLocation string `json:"timeLocation" form:"timeLocation"` SecretEnable bool `json:"secretEnable" form:"secretEnable"` SubEnable bool `json:"subEnable" form:"subEnable"` + SubSyncEnable bool `json:"subSyncEnable" form:"subSyncEnable"` SubListen string `json:"subListen" form:"subListen"` SubPort int `json:"subPort" form:"subPort"` SubPath string `json:"subPath" form:"subPath"` diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index 2c8515e2..fa56baf7 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -268,6 +268,7 @@ + diff --git a/web/service/setting.go b/web/service/setting.go index d238c33d..0e9a009e 100644 --- a/web/service/setting.go +++ b/web/service/setting.go @@ -50,6 +50,7 @@ var defaultValueMap = map[string]string{ "tgLang": "en-US", "secretEnable": "false", "subEnable": "false", + "subSyncEnable": "true", "subListen": "", "subPort": "2096", "subPath": "/sub/", @@ -416,6 +417,14 @@ func (s *SettingService) GetSubEnable() (bool, error) { return s.getBool("subEnable") } +func (s *SettingService) GetSubSyncEnable() (bool, error) { + return s.getBool("subSyncEnable") +} + +func (s *SettingService) SetSubSyncEnable(value bool) error { + return s.setBool("subSyncEnable", value) +} + func (s *SettingService) GetSubListen() (string, error) { return s.getString("subListen") } @@ -544,6 +553,7 @@ func (s *SettingService) GetDefaultSettings(host string) (interface{}, error) { "defaultKey": func() (interface{}, error) { return s.GetKeyFile() }, "tgBotEnable": func() (interface{}, error) { return s.GetTgbotEnabled() }, "subEnable": func() (interface{}, error) { return s.GetSubEnable() }, + "subSyncEnable": func() (interface{}, error) { return s.GetSubSyncEnable() }, "subURI": func() (interface{}, error) { return s.GetSubURI() }, "subJsonURI": func() (interface{}, error) { return s.GetSubJsonURI() }, "remarkModel": func() (interface{}, error) { return s.GetRemarkModel() }, diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index d867dc56..637c9d1b 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -290,6 +290,8 @@ "subSettings" = "Subscription" "subEnable" = "Enable Subscription Service" "subEnableDesc" = "Enables the subscription service." +"subSyncEnable" = "Enable Subscription Sync" +"subSyncEnableDesc" = "Traffic from clients with the same subscription will be synchronized every 10 seconds." "subListen" = "Listen IP" "subListenDesc" = "The IP address for the subscription service. (leave blank to listen on all IPs)" "subPort" = "Listen Port" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index 7b69b54a..6ef70309 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -288,6 +288,8 @@ "subSettings" = "Suscripción" "subEnable" = "Habilitar Servicio" "subEnableDesc" = "Función de suscripción con configuración separada." +"subSyncEnable" = "Habilitar sincronización de suscripciones" +"subSyncEnableDesc" = "El tráfico de los clientes con la misma suscripción se sincronizará cada 10 segundos." "subListen" = "Listening IP" "subListenDesc" = "Dejar en blanco por defecto para monitorear todas las IPs." "subPort" = "Puerto de Suscripción" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 416a1763..2d05bc5b 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -290,6 +290,8 @@ "subSettings" = "سابسکریپشن" "subEnable" = "فعال‌سازی سرویس سابسکریپشن" "subEnableDesc" = "سرویس سابسکریپشن‌ را فعال‌می‌کند" +"subSyncEnable" = "فعال‌سازی همگام سازی سابسکریپشن" +"subSyncEnableDesc" = "ترافیک کلاینت هایی که سابسکریپشن یکسان دارند هر ۱۰ ثانیه همگام می‌شوند." "subListen" = "آدرس آی‌پی" "subListenDesc" = "آدرس آی‌پی برای سرویس سابسکریپشن. برای گوش دادن به‌تمام آی‌پی‌ها خالی‌بگذارید" "subPort" = "پورت" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index 0838031f..f1e2586a 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -290,6 +290,8 @@ "subSettings" = "Langganan" "subEnable" = "Aktifkan Layanan Langganan" "subEnableDesc" = "Mengaktifkan layanan langganan." +"subSyncEnable" = "Aktifkan Sinkronisasi Langganan" +"subSyncEnableDesc" = "Lalu lintas dari klien dengan langganan yang sama akan disinkronkan setiap 10 detik." "subListen" = "IP Pendengar" "subListenDesc" = "Alamat IP untuk layanan langganan. (biarkan kosong untuk mendengarkan semua IP)" "subPort" = "Port Pendengar" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index 43194ec6..72043cef 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -290,6 +290,8 @@ "subSettings" = "サブスクリプション設定" "subEnable" = "サブスクリプションサービスを有効にする" "subEnableDesc" = "サブスクリプションサービス機能を有効にする" +"subSyncEnable" = "サブスクリプション同期を有効にする" +"subSyncEnableDesc" = "同じサブスクリプションを持つクライアントからのトラフィックは 10 秒ごとに同期されます。" "subListen" = "監視IP" "subListenDesc" = "サブスクリプションサービスが監視するIPアドレス(空白にするとすべてのIPを監視)" "subPort" = "監視ポート" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index 697b5484..5699a4cf 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -290,6 +290,8 @@ "subSettings" = "Assinatura" "subEnable" = "Ativar Serviço de Assinatura" "subEnableDesc" = "Ativa o serviço de assinatura." +"subSyncEnable" = "Habilitar sincronização de assinatura" +"subSyncEnableDesc" = "O tráfego de clientes com a mesma assinatura será sincronizado a cada 10 segundos." "subListen" = "IP de Escuta" "subListenDesc" = "O endereço IP para o serviço de assinatura. (deixe em branco para escutar em todos os IPs)" "subPort" = "Porta de Escuta" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index bc42f2ed..cb7f56d3 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -290,6 +290,8 @@ "subSettings" = "Подписка" "subEnable" = "Включить службу" "subEnableDesc" = "Функция подписки с отдельной конфигурацией" +"subSyncEnable" = "Включить синхронизацию подписки" +"subSyncEnableDesc" = "Трафик от клиентов с одинаковой подпиской будет синхронизироваться каждые 10 секунд." "subListen" = "Прослушивание IP" "subListenDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса" "subPort" = "Порт подписки" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index f9c4ddad..43de7d39 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -290,6 +290,8 @@ "subSettings" = "Abonelik" "subEnable" = "Abonelik Hizmetini Etkinleştir" "subEnableDesc" = "Abonelik hizmetini etkinleştirir." +"subSyncEnable" = "Abonelik Senkronizasyonunu Etkinleştir" +"subSyncEnableDesc" = "Aynı aboneliğe sahip istemcilerden gelen trafik her 10 saniyede bir senkronize edilecektir." "subListen" = "Dinleme IP" "subListenDesc" = "Abonelik hizmeti için IP adresi. (tüm IP'leri dinlemek için boş bırakın)" "subPort" = "Dinleme Portu" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 9c82c042..53373dd0 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -290,6 +290,8 @@ "subSettings" = "Підписка" "subEnable" = "Увімкнути службу підписки" "subEnableDesc" = "Вмикає службу підписки." +"subSyncEnable" = "Увімкнути синхронізацію підписки" +"subSyncEnableDesc" = "Трафік від клієнтів з однаковою підпискою буде синхронізовано кожні 10 секунд." "subListen" = "Слухати IP" "subListenDesc" = "IP-адреса для служби підписки. (залиште порожнім, щоб слухати всі IP-адреси)" "subPort" = "Слухати порт" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 88fc70fe..add37764 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -288,6 +288,8 @@ "subSettings" = "Gói đăng ký" "subEnable" = "Bật dịch vụ" "subEnableDesc" = "Tính năng gói đăng ký với cấu hình riêng" +"subSyncEnable" = "Bật đồng bộ đăng ký" +"subSyncEnableDesc" = "Lưu lượng truy cập từ các máy khách có cùng đăng ký sẽ được đồng bộ sau mỗi 10 giây." "subListen" = "Listening IP" "subListenDesc" = "Mặc định để trống để nghe tất cả các IP" "subPort" = "Cổng gói đăng ký" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index 35ec9e0c..beddd1e6 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -290,6 +290,8 @@ "subSettings" = "订阅设置" "subEnable" = "启用订阅服务" "subEnableDesc" = "启用订阅服务功能" +"subSyncEnable" = "启用订阅同步" +"subSyncEnableDesc" = "具有相同订阅的客户端的流量将每 10 秒同步一次。" "subListen" = "监听 IP" "subListenDesc" = "订阅服务监听的 IP 地址(留空表示监听所有 IP)" "subPort" = "监听端口" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index 9951fb77..7ce4103a 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -290,6 +290,8 @@ "subSettings" = "訂閱設定" "subEnable" = "啟用訂閱服務" "subEnableDesc" = "啟用訂閱服務功能" +"subSyncEnable" = "啟用訂閱同步" +"subSyncEnableDesc" = "來自具有相同訂閱的客戶端的流量將每 10 秒同步一次。" "subListen" = "監聽 IP" "subListenDesc" = "訂閱服務監聽的 IP 地址(留空表示監聽所有 IP)" "subPort" = "監聽埠" diff --git a/web/web.go b/web/web.go index 867e4357..4bd1e1db 100644 --- a/web/web.go +++ b/web/web.go @@ -260,8 +260,12 @@ func (s *Server) startTask() { s.cron.AddJob("@every 10s", job.NewXrayTrafficJob()) }() - // Sync the client traffic with same SubId every 10 seconds - s.cron.AddJob("@every 10s", job.NewClientTrafficSyncJob()) + isSubEnable, err1 := s.settingService.GetSubEnable() + isSubSyncEnable, err2 := s.settingService.GetSubSyncEnable() + if err1 == nil && err2 == nil && isSubEnable && isSubSyncEnable { + // Sync the client traffic with the same SubId every 10 seconds + s.cron.AddJob("@every 10s", job.NewClientTrafficSyncJob()) + } // check client ips from log file every 10 sec s.cron.AddJob("@every 10s", job.NewCheckClientIpJob())