From 9f3713aa98011596a62315fd3b96fa2e77044081 Mon Sep 17 00:00:00 2001 From: Saturnino Abril Date: Sun, 6 Aug 2017 06:45:46 +0800 Subject: [PLT-7231/PLT-7306] Fix GitLab SSO failure with non-English locale and make config locales more forgiving (#7125) --- utils/config.go | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'utils/config.go') diff --git a/utils/config.go b/utils/config.go index 87f3d11f9..6a973fe1c 100644 --- a/utils/config.go +++ b/utils/config.go @@ -343,7 +343,12 @@ func LoadConfig(fileName string) { } if err := ValidateLocales(&config); err != nil { - panic(T(err.Id)) + cfgMutex.Unlock() + if err := SaveConfig(CfgFileName, &config); err != nil { + err.Translate(T) + l4g.Warn(err.Error()) + } + cfgMutex.Lock() } if err := ValidateLdapFilter(&config); err != nil { @@ -562,26 +567,44 @@ func ValidateLdapFilter(cfg *model.Config) *model.AppError { } func ValidateLocales(cfg *model.Config) *model.AppError { + var err *model.AppError locales := GetSupportedLocales() if _, ok := locales[*cfg.LocalizationSettings.DefaultServerLocale]; !ok { - return model.NewLocAppError("ValidateLocales", "utils.config.supported_server_locale.app_error", nil, "") + *cfg.LocalizationSettings.DefaultServerLocale = model.DEFAULT_LOCALE + err = model.NewLocAppError("ValidateLocales", "utils.config.supported_server_locale.app_error", nil, "") } if _, ok := locales[*cfg.LocalizationSettings.DefaultClientLocale]; !ok { - return model.NewLocAppError("ValidateLocales", "utils.config.supported_client_locale.app_error", nil, "") + *cfg.LocalizationSettings.DefaultClientLocale = model.DEFAULT_LOCALE + err = model.NewLocAppError("ValidateLocales", "utils.config.supported_client_locale.app_error", nil, "") } if len(*cfg.LocalizationSettings.AvailableLocales) > 0 { + isDefaultClientLocaleInAvailableLocales := false for _, word := range strings.Split(*cfg.LocalizationSettings.AvailableLocales, ",") { + if _, ok := locales[word]; !ok { + *cfg.LocalizationSettings.AvailableLocales = "" + isDefaultClientLocaleInAvailableLocales = true + err = model.NewLocAppError("ValidateLocales", "utils.config.supported_available_locales.app_error", nil, "") + break + } + if word == *cfg.LocalizationSettings.DefaultClientLocale { - return nil + isDefaultClientLocaleInAvailableLocales = true } } - return model.NewLocAppError("ValidateLocales", "utils.config.validate_locale.app_error", nil, "") + availableLocales := *cfg.LocalizationSettings.AvailableLocales + + if !isDefaultClientLocaleInAvailableLocales { + availableLocales += "," + *cfg.LocalizationSettings.DefaultClientLocale + err = model.NewLocAppError("ValidateLocales", "utils.config.add_client_locale.app_error", nil, "") + } + + *cfg.LocalizationSettings.AvailableLocales = strings.Join(RemoveDuplicatesFromStringArray(strings.Split(availableLocales, ",")), ",") } - return nil + return err } func Desanitize(cfg *model.Config) { -- cgit v1.2.3-1-g7c22