From 758402311a97a053a5276049db6dce4f8f8dcfbc Mon Sep 17 00:00:00 2001 From: enahum Date: Tue, 28 Feb 2017 06:07:02 -0300 Subject: [PATCH] PLT-5548 Prevent server start if defaultLocate is not available (#5532) * PLT-5548 Prevent server start if defaultLocate is not available * Add validation for supported locales --- i18n/en.json | 12 ++++++++++++ utils/config.go | 27 +++++++++++++++++++++++++++ utils/i18n.go | 4 ++++ 3 files changed, 43 insertions(+) diff --git a/i18n/en.json b/i18n/en.json index 9e1452da5b..1535bac47b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -5619,6 +5619,18 @@ "id": "utils.config.save_config.saving.app_error", "translation": "An error occurred while saving the file to {{.Filename}}" }, + { + "id": "utils.config.supported_client_locale.app_error", + "translation": "Unable to load mattermost configuration file: DefaultClientLocale must be one of the supported locales" + }, + { + "id": "utils.config.supported_server_locale.app_error", + "translation": "Unable to load mattermost configuration file: DefaultServerLocale must be one of the supported locales" + }, + { + "id": "utils.config.validate_locale.app_error", + "translation": "Unable to load mattermost configuration file: AvailableLocales must include DefaultClientLocale" + }, { "id": "utils.diagnostic.analytics_not_found.app_error", "translation": "Analytics not initialized" diff --git a/utils/config.go b/utils/config.go index 0908f22977..fd1597132a 100644 --- a/utils/config.go +++ b/utils/config.go @@ -196,6 +196,10 @@ func LoadConfig(fileName string) { } } + if err := ValidateLocales(&config); err != nil { + panic(T(err.Id)) + } + if err := ValidateLdapFilter(&config); err != nil { panic(T(err.Id)) } @@ -387,6 +391,29 @@ func ValidateLdapFilter(cfg *model.Config) *model.AppError { return nil } +func ValidateLocales(cfg *model.Config) *model.AppError { + locales := GetSupportedLocales() + if _, ok := locales[*cfg.LocalizationSettings.DefaultServerLocale]; !ok { + return 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, "") + } + + if len(*cfg.LocalizationSettings.AvailableLocales) > 0 { + for _, word := range strings.Split(*cfg.LocalizationSettings.AvailableLocales, ",") { + if word == *cfg.LocalizationSettings.DefaultClientLocale { + return nil + } + } + + return model.NewLocAppError("ValidateLocales", "utils.config.validate_locale.app_error", nil, "") + } + + return nil +} + func Desanitize(cfg *model.Config) { if cfg.LdapSettings.BindPassword != nil && *cfg.LdapSettings.BindPassword == model.FAKE_SETTING { *cfg.LdapSettings.BindPassword = *Cfg.LdapSettings.BindPassword diff --git a/utils/i18n.go b/utils/i18n.go index 8366ae75d3..5a0bb197f8 100644 --- a/utils/i18n.go +++ b/utils/i18n.go @@ -94,6 +94,10 @@ func GetTranslationsAndLocale(w http.ResponseWriter, r *http.Request) (i18n.Tran return translations, model.DEFAULT_LOCALE } +func GetSupportedLocales() map[string]string { + return locales +} + func TfuncWithFallback(pref string) i18n.TranslateFunc { t, _ := i18n.Tfunc(pref) return func(translationID string, args ...interface{}) string {