diff --git a/sub/subController.go b/sub/subController.go index 69d9086d..070a0906 100644 --- a/sub/subController.go +++ b/sub/subController.go @@ -3,12 +3,14 @@ package sub import ( "encoding/base64" "strings" + "x-ui/web/service" "github.com/gin-gonic/gin" ) type SUBController struct { - subService SubService + subService SubService + settingService service.SettingService } func NewSUBController(g *gin.RouterGroup) *SUBController { @@ -24,6 +26,7 @@ func (a *SUBController) initRouter(g *gin.RouterGroup) { } func (a *SUBController) subs(c *gin.Context) { + subEncrypt, _ := a.settingService.GetSubEncrypt() subId := c.Param("subid") host := strings.Split(c.Request.Host, ":")[0] subs, headers, err := a.subService.GetSubs(subId, host) @@ -40,6 +43,10 @@ func (a *SUBController) subs(c *gin.Context) { c.Writer.Header().Set("Profile-Update-Interval", headers[1]) c.Writer.Header().Set("Profile-Title", headers[2]) - c.String(200, base64.StdEncoding.EncodeToString([]byte(result))) + if subEncrypt { + c.String(200, base64.StdEncoding.EncodeToString([]byte(result))) + } else { + c.String(200, result) + } } } diff --git a/web/assets/js/model/models.js b/web/assets/js/model/models.js index 2af44ada..dfe33c1b 100644 --- a/web/assets/js/model/models.js +++ b/web/assets/js/model/models.js @@ -190,6 +190,7 @@ class AllSetting { this.subCertFile = ""; this.subKeyFile = ""; this.subUpdates = 0; + this.subEncrypt = true; this.timeLocation = "Asia/Tehran"; diff --git a/web/controller/setting.go b/web/controller/setting.go index 54de3a84..2bb8e9be 100644 --- a/web/controller/setting.go +++ b/web/controller/setting.go @@ -64,6 +64,7 @@ func (a *SettingController) getDefaultSettings(c *gin.Context) { "subDomain": func() (interface{}, error) { return a.settingService.GetSubDomain() }, "subKeyFile": func() (interface{}, error) { return a.settingService.GetSubKeyFile() }, "subCertFile": func() (interface{}, error) { return a.settingService.GetSubCertFile() }, + "subEncrypt": func() (interface{}, error) { return a.settingService.GetSubEncrypt() }, } result := make(map[string]interface{}) diff --git a/web/entity/entity.go b/web/entity/entity.go index b171db77..046ddb83 100644 --- a/web/entity/entity.go +++ b/web/entity/entity.go @@ -53,6 +53,7 @@ type AllSetting struct { SubCertFile string `json:"subCertFile" form:"subCertFile"` SubKeyFile string `json:"subKeyFile" form:"subKeyFile"` SubUpdates int `json:"subUpdates" form:"subUpdates"` + SubEncrypt bool `json:"subEncrypt" form:"subEncrypt"` } func (s *AllSetting) CheckValid() error { diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index f10fa53e..8a29c147 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -340,6 +340,7 @@ + diff --git a/web/service/setting.go b/web/service/setting.go index 1e6451db..49c6a709 100644 --- a/web/service/setting.go +++ b/web/service/setting.go @@ -49,6 +49,7 @@ var defaultValueMap = map[string]string{ "subCertFile": "", "subKeyFile": "", "subUpdates": "12", + "subEncrypt": "true", } type SettingService struct { @@ -367,6 +368,10 @@ func (s *SettingService) GetSubUpdates() (int, error) { return s.getInt("subUpdates") } +func (s *SettingService) GetSubEncrypt() (bool, error) { + return s.getBool("subEncrypt") +} + func (s *SettingService) UpdateAllSetting(allSetting *entity.AllSetting) error { if err := allSetting.CheckValid(); err != nil { return err diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index 2d13b724..69b430f5 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -263,6 +263,8 @@ "subDomainDesc" = "Leave blank by default to monitor all domains and IPs" "subUpdates" = "Subscription update intervals" "subUpdatesDesc" = "Interval hours between updates in client application" +"subEncrypt" = "Encrypt configs" +"subEncryptDesc" = "Encrypt the returned configs in subscription" [pages.settings.templates] diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index fbf17bae..4b8053f0 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -262,6 +262,8 @@ "subDomainDesc" = "برای نظارت بر همه دامنه ها و آی‌پی ها به طور پیش فرض خالی بگذارید" "subUpdates" = "فاصله به روز رسانی های سابسکریپشن" "subUpdatesDesc" = "ساعت های فاصله بین به روز رسانی در برنامه کاربر" +"subEncrypt" = "رمزگذاری کانفیگ ها" +"subEncryptDesc" = "رمزگذاری کانفیگ های بازگشتی سابسکریپشن" [pages.settings.templates] "title" = "الگوها" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index ac6ac609..c25a48d8 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -263,6 +263,8 @@ "subDomainDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все домены и IP-адреса" "subUpdates" = "Интервалы обновления подписки" "subUpdatesDesc" = "Часовой интервал между обновлениями в клиентском приложении" +"subEncrypt" = "Шифровать конфиги" +"subEncryptDesc" = "Шифровать возвращенные конфиги в подписке" [pages.settings.templates] "title" = "Шаблоны" diff --git a/web/translation/translate.zh_Hans.toml b/web/translation/translate.zh_Hans.toml index a1d2e1a4..b17db591 100644 --- a/web/translation/translate.zh_Hans.toml +++ b/web/translation/translate.zh_Hans.toml @@ -263,6 +263,8 @@ "subDomainDesc" = "留空默认监控所有域名和IP" "subUpdates" = "订阅更新间隔" "subUpdatesDesc" = "客户端应用程序更新之间的间隔时间" +"subEncrypt" = "加密配置" +"subEncryptDesc" = "在订阅中加密返回的配置" [pages.settings.templates] "title" = "模板"