[MM-51329] server/config: add validation for local mode socket file (#23180)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
b2e0aa7088
Коммит
a496c14cc2
@@ -8811,6 +8811,10 @@
|
|||||||
"id": "model.config.is_valid.listen_address.app_error",
|
"id": "model.config.is_valid.listen_address.app_error",
|
||||||
"translation": "Invalid listen address for service settings Must be set."
|
"translation": "Invalid listen address for service settings Must be set."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "model.config.is_valid.local_mode_socket.app_error",
|
||||||
|
"translation": "Unable to locate local socket file directory."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "model.config.is_valid.localization.available_locales.app_error",
|
"id": "model.config.is_valid.localization.available_locales.app_error",
|
||||||
"translation": "Available Languages must contain Default Client Language."
|
"translation": "Available Languages must contain Default Client Language."
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -3749,6 +3750,16 @@ func (s *ServiceSettings) isValid() *AppError {
|
|||||||
return NewAppError("Config.IsValid", "model.config.is_valid.collapsed_threads.app_error", nil, "", http.StatusBadRequest)
|
return NewAppError("Config.IsValid", "model.config.is_valid.collapsed_threads.app_error", nil, "", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we check if file has a valid parent, the server will try to create the socket
|
||||||
|
// file if it doesn't exist, but we need to be sure if the directory exist or not
|
||||||
|
if *s.EnableLocalMode {
|
||||||
|
parent := filepath.Dir(*s.LocalModeSocketLocation)
|
||||||
|
_, err := os.Stat(parent)
|
||||||
|
if err != nil {
|
||||||
|
return NewAppError("Config.IsValid", "model.config.is_valid.local_mode_socket.app_error", nil, err.Error(), http.StatusBadRequest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1409,40 +1409,63 @@ func TestConfigExportSettingsIsValid(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestConfigServiceSettingsIsValid(t *testing.T) {
|
func TestConfigServiceSettingsIsValid(t *testing.T) {
|
||||||
cfg := Config{}
|
t.Run("local socket file should exist if local mode enabled", func(t *testing.T) {
|
||||||
cfg.SetDefaults()
|
cfg := Config{}
|
||||||
|
cfg.SetDefaults()
|
||||||
|
|
||||||
appErr := cfg.ServiceSettings.isValid()
|
appErr := cfg.ServiceSettings.isValid()
|
||||||
require.Nil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
|
|
||||||
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsDisabled
|
*cfg.ServiceSettings.EnableLocalMode = false
|
||||||
appErr = cfg.ServiceSettings.isValid()
|
// we don't need to check as local mode is not enabled
|
||||||
require.Nil(t, appErr)
|
*cfg.ServiceSettings.LocalModeSocketLocation = "an_invalid_path.socket"
|
||||||
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
|
require.Nil(t, appErr)
|
||||||
|
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = false
|
// now we can check if the file exist or not
|
||||||
appErr = cfg.ServiceSettings.isValid()
|
*cfg.ServiceSettings.EnableLocalMode = true
|
||||||
require.Nil(t, appErr)
|
*cfg.ServiceSettings.LocalModeSocketLocation = "/invalid_directory/mattermost_local.socket"
|
||||||
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
|
require.NotNil(t, appErr)
|
||||||
|
require.Equal(t, "model.config.is_valid.local_mode_socket.app_error", appErr.Id)
|
||||||
|
})
|
||||||
|
|
||||||
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsDefaultOff
|
t.Run("CRT settings should have consistent values", func(t *testing.T) {
|
||||||
appErr = cfg.ServiceSettings.isValid()
|
cfg := Config{}
|
||||||
require.NotNil(t, appErr)
|
cfg.SetDefaults()
|
||||||
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", appErr.Id)
|
|
||||||
|
|
||||||
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsDefaultOn
|
appErr := cfg.ServiceSettings.isValid()
|
||||||
appErr = cfg.ServiceSettings.isValid()
|
require.Nil(t, appErr)
|
||||||
require.NotNil(t, appErr)
|
|
||||||
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", appErr.Id)
|
|
||||||
|
|
||||||
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsAlwaysOn
|
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsDisabled
|
||||||
appErr = cfg.ServiceSettings.isValid()
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
require.NotNil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", appErr.Id)
|
|
||||||
|
|
||||||
*cfg.ServiceSettings.ThreadAutoFollow = true
|
*cfg.ServiceSettings.ThreadAutoFollow = false
|
||||||
*cfg.ServiceSettings.CollapsedThreads = "test_status"
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
appErr = cfg.ServiceSettings.isValid()
|
require.Nil(t, appErr)
|
||||||
require.NotNil(t, appErr)
|
|
||||||
require.Equal(t, "model.config.is_valid.collapsed_threads.app_error", appErr.Id)
|
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsDefaultOff
|
||||||
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
|
require.NotNil(t, appErr)
|
||||||
|
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", appErr.Id)
|
||||||
|
|
||||||
|
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsDefaultOn
|
||||||
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
|
require.NotNil(t, appErr)
|
||||||
|
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", appErr.Id)
|
||||||
|
|
||||||
|
*cfg.ServiceSettings.CollapsedThreads = CollapsedThreadsAlwaysOn
|
||||||
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
|
require.NotNil(t, appErr)
|
||||||
|
require.Equal(t, "model.config.is_valid.collapsed_threads.autofollow.app_error", appErr.Id)
|
||||||
|
|
||||||
|
*cfg.ServiceSettings.ThreadAutoFollow = true
|
||||||
|
*cfg.ServiceSettings.CollapsedThreads = "test_status"
|
||||||
|
appErr = cfg.ServiceSettings.isValid()
|
||||||
|
require.NotNil(t, appErr)
|
||||||
|
require.Equal(t, "model.config.is_valid.collapsed_threads.app_error", appErr.Id)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConfigDefaultCallsPluginState(t *testing.T) {
|
func TestConfigDefaultCallsPluginState(t *testing.T) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user