Bound document content extraction time and decouple it from uploads (MM-69098) (#36856) (#37043)

Automatic Merge
Этот коммит содержится в:
Julien Tant
2026-06-14 23:35:26 -07:00
коммит произвёл GitHub
родитель 775c36f827
Коммит acc19baca0
19 изменённых файлов: 513 добавлений и 13 удалений

Просмотреть файл

@@ -1767,6 +1767,7 @@ type FileSettings struct {
Directory *string `access:"environment_file_storage,write_restrictable,cloud_restrictable"`
EnablePublicLink *bool `access:"site_public_links,cloud_restrictable"`
ExtractContent *bool `access:"environment_file_storage,write_restrictable"`
ExtractContentTimeout *int `access:"environment_file_storage,write_restrictable"` // In seconds. 0 disables the timeout.
ArchiveRecursion *bool `access:"environment_file_storage,write_restrictable"`
PublicLinkSalt *string `access:"site_public_links,cloud_restrictable"` // telemetry: none
InitialFont *string `access:"environment_file_storage,cloud_restrictable"` // telemetry: none
@@ -1844,6 +1845,10 @@ func (s *FileSettings) SetDefaults(isUpdate bool) {
s.ExtractContent = NewPointer(true)
}
if s.ExtractContentTimeout == nil {
s.ExtractContentTimeout = NewPointer(10)
}
if s.ArchiveRecursion == nil {
s.ArchiveRecursion = NewPointer(false)
}
@@ -4230,6 +4235,10 @@ func (s *FileSettings) isValid() *AppError {
return NewAppError("Config.IsValid", "model.config.is_valid.max_file_size.app_error", nil, "", http.StatusBadRequest)
}
if *s.ExtractContentTimeout < 0 {
return NewAppError("Config.IsValid", "model.config.is_valid.extract_content_timeout.app_error", nil, "", http.StatusBadRequest)
}
if !(*s.DriverName == ImageDriverLocal || *s.DriverName == ImageDriverS3) {
return NewAppError("Config.IsValid", "model.config.is_valid.file_driver.app_error", nil, "", http.StatusBadRequest)
}

Просмотреть файл

@@ -296,6 +296,38 @@ func TestFileSettingsDirectoryWhitespaceValidation(t *testing.T) {
}
}
func TestFileSettingsExtractContentTimeout(t *testing.T) {
t.Run("default is valid", func(t *testing.T) {
cfg := &Config{}
cfg.SetDefaults()
require.NotNil(t, cfg.FileSettings.ExtractContentTimeout)
assert.Equal(t, 10, *cfg.FileSettings.ExtractContentTimeout)
assert.Nil(t, cfg.FileSettings.isValid())
})
t.Run("zero disables the timeout and is valid", func(t *testing.T) {
cfg := &Config{}
cfg.SetDefaults()
cfg.FileSettings.ExtractContentTimeout = NewPointer(0)
assert.Nil(t, cfg.FileSettings.isValid())
})
t.Run("a positive value is valid", func(t *testing.T) {
cfg := &Config{}
cfg.SetDefaults()
cfg.FileSettings.ExtractContentTimeout = NewPointer(10)
assert.Nil(t, cfg.FileSettings.isValid())
})
t.Run("a negative value is rejected", func(t *testing.T) {
cfg := &Config{}
cfg.SetDefaults()
cfg.FileSettings.ExtractContentTimeout = NewPointer(-1)
err := cfg.FileSettings.isValid()
require.NotNil(t, err)
assert.Equal(t, "model.config.is_valid.extract_content_timeout.app_error", err.Id)
})
}
func TestConfigDefaultSignatureAlgorithm(t *testing.T) {
c1 := Config{}
c1.SetDefaults()