summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-01-04 07:13:38 -0500
committerChristopher Speller <crspeller@gmail.com>2016-01-04 07:13:38 -0500
commitc44873c61b205932bdbf1f81cfc2a9728a6fee31 (patch)
tree9879a7c1c42092d4e260909b502a6e7722091105
parent8931ff6e57cdff214b23fab2fce57fd71a7b37a2 (diff)
parentecef2c8cb5525c55dc56a81c53896d244f27deeb (diff)
downloadchat-c44873c61b205932bdbf1f81cfc2a9728a6fee31.tar.gz
chat-c44873c61b205932bdbf1f81cfc2a9728a6fee31.tar.bz2
chat-c44873c61b205932bdbf1f81cfc2a9728a6fee31.zip
Merge pull request #1763 from benburkert/non-s3-region
support unofficial S3 regions
-rw-r--r--api/file.go18
-rw-r--r--model/config.go44
2 files changed, 45 insertions, 17 deletions
diff --git a/api/file.go b/api/file.go
index d31abfb1d..67ebc14b7 100644
--- a/api/file.go
+++ b/api/file.go
@@ -522,7 +522,7 @@ func writeFile(f []byte, path string) *model.AppError {
auth.AccessKey = utils.Cfg.FileSettings.AmazonS3AccessKeyId
auth.SecretKey = utils.Cfg.FileSettings.AmazonS3SecretAccessKey
- s := s3.New(auth, aws.Regions[utils.Cfg.FileSettings.AmazonS3Region])
+ s := s3.New(auth, awsRegion())
bucket := s.Bucket(utils.Cfg.FileSettings.AmazonS3Bucket)
ext := filepath.Ext(path)
@@ -562,7 +562,7 @@ func readFile(path string) ([]byte, *model.AppError) {
auth.AccessKey = utils.Cfg.FileSettings.AmazonS3AccessKeyId
auth.SecretKey = utils.Cfg.FileSettings.AmazonS3SecretAccessKey
- s := s3.New(auth, aws.Regions[utils.Cfg.FileSettings.AmazonS3Region])
+ s := s3.New(auth, awsRegion())
bucket := s.Bucket(utils.Cfg.FileSettings.AmazonS3Bucket)
// try to get the file from S3 with some basic retry logic
@@ -613,3 +613,17 @@ func openFileWriteStream(path string) (io.Writer, *model.AppError) {
func closeFileWriteStream(file io.Writer) {
file.(*os.File).Close()
}
+
+func awsRegion() aws.Region {
+ if region, ok := aws.Regions[utils.Cfg.FileSettings.AmazonS3Region]; ok {
+ return region
+ }
+
+ return aws.Region{
+ Name: utils.Cfg.FileSettings.AmazonS3Region,
+ S3Endpoint: utils.Cfg.FileSettings.AmazonS3Endpoint,
+ S3BucketEndpoint: utils.Cfg.FileSettings.AmazonS3BucketEndpoint,
+ S3LocationConstraint: *utils.Cfg.FileSettings.AmazonS3LocationConstraint,
+ S3LowercaseBucket: *utils.Cfg.FileSettings.AmazonS3LowercaseBucket,
+ }
+}
diff --git a/model/config.go b/model/config.go
index 38ef81a85..a4792ff9e 100644
--- a/model/config.go
+++ b/model/config.go
@@ -68,21 +68,25 @@ type LogSettings struct {
}
type FileSettings struct {
- DriverName string
- Directory string
- EnablePublicLink bool
- PublicLinkSalt string
- ThumbnailWidth int
- ThumbnailHeight int
- PreviewWidth int
- PreviewHeight int
- ProfileWidth int
- ProfileHeight int
- InitialFont string
- AmazonS3AccessKeyId string
- AmazonS3SecretAccessKey string
- AmazonS3Bucket string
- AmazonS3Region string
+ DriverName string
+ Directory string
+ EnablePublicLink bool
+ PublicLinkSalt string
+ ThumbnailWidth int
+ ThumbnailHeight int
+ PreviewWidth int
+ PreviewHeight int
+ ProfileWidth int
+ ProfileHeight int
+ InitialFont string
+ AmazonS3AccessKeyId string
+ AmazonS3SecretAccessKey string
+ AmazonS3Bucket string
+ AmazonS3Region string
+ AmazonS3Endpoint string
+ AmazonS3BucketEndpoint string
+ AmazonS3LocationConstraint *bool
+ AmazonS3LowercaseBucket *bool
}
type EmailSettings struct {
@@ -210,6 +214,16 @@ func (o *Config) SetDefaults() {
o.FileSettings.PublicLinkSalt = NewRandomString(32)
}
+ if o.FileSettings.AmazonS3LocationConstraint == nil {
+ o.FileSettings.AmazonS3LocationConstraint = new(bool)
+ *o.FileSettings.AmazonS3LocationConstraint = false
+ }
+
+ if o.FileSettings.AmazonS3LowercaseBucket == nil {
+ o.FileSettings.AmazonS3LowercaseBucket = new(bool)
+ *o.FileSettings.AmazonS3LowercaseBucket = false
+ }
+
if len(o.EmailSettings.InviteSalt) == 0 {
o.EmailSettings.InviteSalt = NewRandomString(32)
}