Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/controller')
-rw-r--r--web/controller/xray_setting.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/web/controller/xray_setting.go b/web/controller/xray_setting.go
index 0c382fb9..7e4c7966 100644
--- a/web/controller/xray_setting.go
+++ b/web/controller/xray_setting.go
@@ -49,6 +49,23 @@ func (a *XraySettingController) getXraySetting(c *gin.Context) {
jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err)
return
}
+ // Older versions of this handler embedded the raw DB value as
+ // `xraySetting` in the response without checking if the value
+ // already had that wrapper shape. When the frontend saved it
+ // back through the textarea verbatim, the wrapper got persisted
+ // and every subsequent save nested another layer, which is what
+ // eventually produced the blank Xray Settings page in #4059.
+ // Strip any such wrapper here, and heal the DB if we found one so
+ // the next read is O(1) instead of climbing the same pile again.
+ if unwrapped := service.UnwrapXrayTemplateConfig(xraySetting); unwrapped != xraySetting {
+ if saveErr := a.XraySettingService.SaveXraySetting(unwrapped); saveErr == nil {
+ xraySetting = unwrapped
+ } else {
+ // Don't fail the read — just serve the unwrapped value
+ // and leave the DB healing for a later save.
+ xraySetting = unwrapped
+ }
+ }
inboundTags, err := a.InboundService.GetInboundTags()
if err != nil {
jsonMsg(c, I18nWeb(c, "pages.settings.toasts.getSettings"), err)