From 1264188a584833e47f629a629595e91beb6b9dac Mon Sep 17 00:00:00 2001 From: Jason Song Date: Tue, 17 Jan 2023 15:39:47 +0800 Subject: [PATCH 1/4] fix: set disable_gravatar if offline mode --- models/system/setting.go | 6 ++++++ routers/web/admin/config.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/models/system/setting.go b/models/system/setting.go index 0701c4bf48dc4..f60a4d8c26d98 100644 --- a/models/system/setting.go +++ b/models/system/setting.go @@ -268,6 +268,12 @@ func Init() error { if setting_module.OfflineMode { disableGravatar = true enableFederatedAvatar = false + if err := SetSettingNoVersion(KeyPictureDisableGravatar, "true"); err != nil { + return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err) + } + if err := SetSettingNoVersion(KeyPictureEnableFederatedAvatar, "false"); err != nil { + return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err) + } } if enableFederatedAvatar || !disableGravatar { diff --git a/routers/web/admin/config.go b/routers/web/admin/config.go index eaa02588ca5c9..ddfc3dce54d79 100644 --- a/routers/web/admin/config.go +++ b/routers/web/admin/config.go @@ -5,9 +5,11 @@ package admin import ( + "fmt" "net/http" "net/url" "os" + "strconv" "strings" system_model "code.gitea.io/gitea/models/system" @@ -201,6 +203,16 @@ func ChangeConfig(ctx *context.Context) { value := ctx.FormString("value") version := ctx.FormInt("version") + if check, ok := changeConfigChecks[key]; ok { + if err := check(ctx, value); err != nil { + log.Warn("refused to set setting: %v", err) + ctx.JSON(http.StatusOK, map[string]string{ + "err": ctx.Tr("admin.config.set_setting_failed", key), + }) + return + } + } + if err := system_model.SetSetting(&system_model.Setting{ SettingKey: key, SettingValue: value, @@ -217,3 +229,20 @@ func ChangeConfig(ctx *context.Context) { "version": version + 1, }) } + +var changeConfigChecks = map[string]func(ctx *context.Context, newValue string) error{ + system_model.KeyPictureDisableGravatar: func(ctx *context.Context, newValue string) error { + v, _ := strconv.ParseBool(newValue) + if setting.OfflineMode && !v { + return fmt.Errorf("%q should be true when OFFLINE_MODE is true", system_model.KeyPictureDisableGravatar) + } + return nil + }, + system_model.KeyPictureEnableFederatedAvatar: func(ctx *context.Context, newValue string) error { + v, _ := strconv.ParseBool(newValue) + if setting.OfflineMode && v { + return fmt.Errorf("%q cannot be false when OFFLINE_MODE is true", system_model.KeyPictureEnableFederatedAvatar) + } + return nil + }, +} From 4c58a86af492a239001a989943b92fa42d7d67cd Mon Sep 17 00:00:00 2001 From: Jason Song Date: Tue, 17 Jan 2023 15:55:38 +0800 Subject: [PATCH 2/4] chore: simplify codes --- routers/web/admin/config.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/routers/web/admin/config.go b/routers/web/admin/config.go index ddfc3dce54d79..1f71e81785a99 100644 --- a/routers/web/admin/config.go +++ b/routers/web/admin/config.go @@ -231,16 +231,14 @@ func ChangeConfig(ctx *context.Context) { } var changeConfigChecks = map[string]func(ctx *context.Context, newValue string) error{ - system_model.KeyPictureDisableGravatar: func(ctx *context.Context, newValue string) error { - v, _ := strconv.ParseBool(newValue) - if setting.OfflineMode && !v { + system_model.KeyPictureDisableGravatar: func(_ *context.Context, newValue string) error { + if v, _ := strconv.ParseBool(newValue); setting.OfflineMode && !v { return fmt.Errorf("%q should be true when OFFLINE_MODE is true", system_model.KeyPictureDisableGravatar) } return nil }, - system_model.KeyPictureEnableFederatedAvatar: func(ctx *context.Context, newValue string) error { - v, _ := strconv.ParseBool(newValue) - if setting.OfflineMode && v { + system_model.KeyPictureEnableFederatedAvatar: func(_ *context.Context, newValue string) error { + if v, _ := strconv.ParseBool(newValue); setting.OfflineMode && v { return fmt.Errorf("%q cannot be false when OFFLINE_MODE is true", system_model.KeyPictureEnableFederatedAvatar) } return nil From cf4ff6c2b11c81c9189cbc37c1219748d753146c Mon Sep 17 00:00:00 2001 From: Jason Song Date: Tue, 17 Jan 2023 16:21:55 +0800 Subject: [PATCH 3/4] fix: check before updating --- models/system/setting.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/models/system/setting.go b/models/system/setting.go index f60a4d8c26d98..052df943fc28b 100644 --- a/models/system/setting.go +++ b/models/system/setting.go @@ -268,11 +268,15 @@ func Init() error { if setting_module.OfflineMode { disableGravatar = true enableFederatedAvatar = false - if err := SetSettingNoVersion(KeyPictureDisableGravatar, "true"); err != nil { - return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err) + if GetSettingBool(KeyPictureDisableGravatar) != true { + if err := SetSettingNoVersion(KeyPictureDisableGravatar, "true"); err != nil { + return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err) + } } - if err := SetSettingNoVersion(KeyPictureEnableFederatedAvatar, "false"); err != nil { - return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err) + if GetSettingBool(KeyPictureEnableFederatedAvatar) != false { + if err := SetSettingNoVersion(KeyPictureEnableFederatedAvatar, "false"); err != nil { + return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err) + } } } From 4cba434a8d0548aafa07011f06593670b3a12afa Mon Sep 17 00:00:00 2001 From: Jason Song Date: Tue, 17 Jan 2023 21:55:21 +0800 Subject: [PATCH 4/4] fix: simplify codes --- models/system/setting.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/system/setting.go b/models/system/setting.go index 052df943fc28b..50fe17498ef39 100644 --- a/models/system/setting.go +++ b/models/system/setting.go @@ -268,12 +268,12 @@ func Init() error { if setting_module.OfflineMode { disableGravatar = true enableFederatedAvatar = false - if GetSettingBool(KeyPictureDisableGravatar) != true { + if !GetSettingBool(KeyPictureDisableGravatar) { if err := SetSettingNoVersion(KeyPictureDisableGravatar, "true"); err != nil { return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err) } } - if GetSettingBool(KeyPictureEnableFederatedAvatar) != false { + if GetSettingBool(KeyPictureEnableFederatedAvatar) { if err := SetSettingNoVersion(KeyPictureEnableFederatedAvatar, "false"); err != nil { return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err) }