diff --git a/server/platform/shared/filestore/filesstore.go b/server/platform/shared/filestore/filesstore.go index f5956871b1..a3ce497c5e 100644 --- a/server/platform/shared/filestore/filesstore.go +++ b/server/platform/shared/filestore/filesstore.go @@ -102,10 +102,10 @@ func NewExportFileBackendSettingsFromConfig(fileSettings *model.FileSettings, en AmazonS3PathPrefix: *fileSettings.ExportAmazonS3PathPrefix, AmazonS3Region: *fileSettings.ExportAmazonS3Region, AmazonS3Endpoint: *fileSettings.ExportAmazonS3Endpoint, - AmazonS3SSL: fileSettings.ExportAmazonS3SSL == nil || *fileSettings.AmazonS3SSL, - AmazonS3SignV2: fileSettings.ExportAmazonS3SignV2 != nil && *fileSettings.AmazonS3SignV2, - AmazonS3SSE: fileSettings.ExportAmazonS3SSE != nil && *fileSettings.AmazonS3SSE && enableComplianceFeature, - AmazonS3Trace: fileSettings.ExportAmazonS3Trace != nil && *fileSettings.AmazonS3Trace, + AmazonS3SSL: fileSettings.ExportAmazonS3SSL == nil || *fileSettings.ExportAmazonS3SSL, + AmazonS3SignV2: fileSettings.ExportAmazonS3SignV2 != nil && *fileSettings.ExportAmazonS3SignV2, + AmazonS3SSE: fileSettings.ExportAmazonS3SSE != nil && *fileSettings.ExportAmazonS3SSE && enableComplianceFeature, + AmazonS3Trace: fileSettings.ExportAmazonS3Trace != nil && *fileSettings.ExportAmazonS3Trace, AmazonS3RequestTimeoutMilliseconds: *fileSettings.ExportAmazonS3RequestTimeoutMilliseconds, AmazonS3PresignExpiresSeconds: *fileSettings.ExportAmazonS3PresignExpiresSeconds, SkipVerify: skipVerify, diff --git a/server/platform/shared/filestore/filesstore_test.go b/server/platform/shared/filestore/filesstore_test.go index 8746420376..ddf5f6eb89 100644 --- a/server/platform/shared/filestore/filesstore_test.go +++ b/server/platform/shared/filestore/filesstore_test.go @@ -18,6 +18,7 @@ import ( "github.com/stretchr/testify/suite" "github.com/xtgo/uuid" + "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" ) @@ -618,3 +619,117 @@ func BenchmarkS3WriteFile(b *testing.B) { b.StopTimer() } + +func TestNewExportFileBackendSettingsFromConfig(t *testing.T) { + t.Run("local filestore", func(t *testing.T) { + skipVerify := false + enableComplianceFeature := false + + expected := FileBackendSettings{ + DriverName: driverLocal, + Directory: "directory", + AmazonS3AccessKeyId: "", + AmazonS3SecretAccessKey: "", + AmazonS3Bucket: "", + AmazonS3PathPrefix: "", + AmazonS3Region: "", + AmazonS3Endpoint: "", + AmazonS3SSL: false, + AmazonS3SignV2: false, + AmazonS3SSE: false, + AmazonS3Trace: false, + SkipVerify: false, + AmazonS3RequestTimeoutMilliseconds: 0, + AmazonS3PresignExpiresSeconds: 0, + } + + actual := NewExportFileBackendSettingsFromConfig(&model.FileSettings{ + ExportDriverName: model.NewString(driverLocal), + ExportDirectory: model.NewString("directory"), + }, enableComplianceFeature, skipVerify) + + require.Equal(t, expected, actual) + }) + + t.Run("s3 filestore, disable compliance", func(t *testing.T) { + skipVerify := true + enableComplianceFeature := false + + expected := FileBackendSettings{ + DriverName: driverS3, + Directory: "", + AmazonS3AccessKeyId: "minioaccesskey", + AmazonS3SecretAccessKey: "miniosecretkey", + AmazonS3Bucket: "mattermost-test", + AmazonS3PathPrefix: "prefix", + AmazonS3Region: "region", + AmazonS3Endpoint: "s3.example.com", + AmazonS3SSL: true, + AmazonS3SignV2: true, + AmazonS3SSE: false, + AmazonS3Trace: true, + SkipVerify: true, + AmazonS3RequestTimeoutMilliseconds: 1000, + AmazonS3PresignExpiresSeconds: 60000, + } + + actual := NewExportFileBackendSettingsFromConfig(&model.FileSettings{ + ExportDriverName: model.NewString(driverS3), + ExportAmazonS3AccessKeyId: model.NewString("minioaccesskey"), + ExportAmazonS3SecretAccessKey: model.NewString("miniosecretkey"), + ExportAmazonS3Bucket: model.NewString("mattermost-test"), + ExportAmazonS3Region: model.NewString("region"), + ExportAmazonS3Endpoint: model.NewString("s3.example.com"), + ExportAmazonS3PathPrefix: model.NewString("prefix"), + ExportAmazonS3SSL: model.NewBool(true), + ExportAmazonS3SignV2: model.NewBool(true), + ExportAmazonS3SSE: model.NewBool(true), + ExportAmazonS3Trace: model.NewBool(true), + ExportAmazonS3RequestTimeoutMilliseconds: model.NewInt64(1000), + ExportAmazonS3PresignExpiresSeconds: model.NewInt64(60000), + }, enableComplianceFeature, skipVerify) + + require.Equal(t, expected, actual) + }) + + t.Run("s3 filestore, enable compliance", func(t *testing.T) { + skipVerify := true + enableComplianceFeature := true + + expected := FileBackendSettings{ + DriverName: driverS3, + Directory: "", + AmazonS3AccessKeyId: "minioaccesskey", + AmazonS3SecretAccessKey: "miniosecretkey", + AmazonS3Bucket: "mattermost-test", + AmazonS3PathPrefix: "prefix", + AmazonS3Region: "region", + AmazonS3Endpoint: "s3.example.com", + AmazonS3SSL: true, + AmazonS3SignV2: true, + AmazonS3SSE: true, + AmazonS3Trace: true, + SkipVerify: true, + AmazonS3RequestTimeoutMilliseconds: 1000, + AmazonS3PresignExpiresSeconds: 60000, + } + + actual := NewExportFileBackendSettingsFromConfig(&model.FileSettings{ + ExportDriverName: model.NewString(driverS3), + ExportAmazonS3AccessKeyId: model.NewString("minioaccesskey"), + ExportAmazonS3SecretAccessKey: model.NewString("miniosecretkey"), + ExportAmazonS3Bucket: model.NewString("mattermost-test"), + ExportAmazonS3Region: model.NewString("region"), + ExportAmazonS3Endpoint: model.NewString("s3.example.com"), + ExportAmazonS3PathPrefix: model.NewString("prefix"), + ExportAmazonS3SSL: model.NewBool(true), + ExportAmazonS3SignV2: model.NewBool(true), + ExportAmazonS3SSE: model.NewBool(true), + ExportAmazonS3Trace: model.NewBool(true), + ExportAmazonS3RequestTimeoutMilliseconds: model.NewInt64(1000), + ExportAmazonS3PresignExpiresSeconds: model.NewInt64(60000), + }, enableComplianceFeature, skipVerify) + + require.Equal(t, expected, actual) + }) +}