summaryrefslogtreecommitdiffstats
path: root/app/file.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/file.go')
-rw-r--r--app/file.go19
1 files changed, 16 insertions, 3 deletions
diff --git a/app/file.go b/app/file.go
index 3b7a6860c..f46dd50ec 100644
--- a/app/file.go
+++ b/app/file.go
@@ -56,13 +56,23 @@ const (
MaxImageSize = 6048 * 4032 // 24 megapixels, roughly 36MB as a raw image
)
+// Similar to s3.New() but allows initialization of signature v2 or signature v4 client.
+// If signV2 input is false, function always returns signature v4.
+func s3New(endpoint, accessKey, secretKey string, secure bool, signV2 bool) (*s3.Client, error) {
+ if signV2 {
+ return s3.NewV2(endpoint, accessKey, secretKey, secure)
+ }
+ return s3.NewV4(endpoint, accessKey, secretKey, secure)
+}
+
func ReadFile(path string) ([]byte, *model.AppError) {
if utils.Cfg.FileSettings.DriverName == model.IMAGE_DRIVER_S3 {
endpoint := utils.Cfg.FileSettings.AmazonS3Endpoint
accessKey := utils.Cfg.FileSettings.AmazonS3AccessKeyId
secretKey := utils.Cfg.FileSettings.AmazonS3SecretAccessKey
secure := *utils.Cfg.FileSettings.AmazonS3SSL
- s3Clnt, err := s3.New(endpoint, accessKey, secretKey, secure)
+ signV2 := *utils.Cfg.FileSettings.AmazonS3SignV2
+ s3Clnt, err := s3New(endpoint, accessKey, secretKey, secure, signV2)
if err != nil {
return nil, model.NewLocAppError("ReadFile", "api.file.read_file.s3.app_error", nil, err.Error())
}
@@ -94,7 +104,8 @@ func MoveFile(oldPath, newPath string) *model.AppError {
accessKey := utils.Cfg.FileSettings.AmazonS3AccessKeyId
secretKey := utils.Cfg.FileSettings.AmazonS3SecretAccessKey
secure := *utils.Cfg.FileSettings.AmazonS3SSL
- s3Clnt, err := s3.New(endpoint, accessKey, secretKey, secure)
+ signV2 := *utils.Cfg.FileSettings.AmazonS3SignV2
+ s3Clnt, err := s3New(endpoint, accessKey, secretKey, secure, signV2)
if err != nil {
return model.NewLocAppError("moveFile", "api.file.write_file.s3.app_error", nil, err.Error())
}
@@ -128,10 +139,12 @@ func WriteFile(f []byte, path string) *model.AppError {
accessKey := utils.Cfg.FileSettings.AmazonS3AccessKeyId
secretKey := utils.Cfg.FileSettings.AmazonS3SecretAccessKey
secure := *utils.Cfg.FileSettings.AmazonS3SSL
- s3Clnt, err := s3.New(endpoint, accessKey, secretKey, secure)
+ signV2 := *utils.Cfg.FileSettings.AmazonS3SignV2
+ s3Clnt, err := s3New(endpoint, accessKey, secretKey, secure, signV2)
if err != nil {
return model.NewLocAppError("WriteFile", "api.file.write_file.s3.app_error", nil, err.Error())
}
+
bucket := utils.Cfg.FileSettings.AmazonS3Bucket
ext := filepath.Ext(path)