From c605ea657074ee912a4a8fbc28978d104a0c0e56 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Tue, 9 Jun 2020 14:01:42 -0700 Subject: [PATCH] Add support for non-AWS S3 storage endpoints and auth --- config.go | 15 +++++++++++++++ config/config-example.yaml | 1 + s3Storage.go | 8 ++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/config.go b/config.go index 6c7262c48..7ee61c42b 100644 --- a/config.go +++ b/config.go @@ -44,6 +44,7 @@ type IPFS struct { type S3 struct { Enabled bool `yaml:"enabled"` + Endpoint string `yaml:"endpoint"` AccessKey string `yaml:"accessKey"` Secret string `yaml:"secret"` Bucket string `yaml:"bucket"` @@ -75,6 +76,20 @@ func checkConfig(config Config) { panic("S3 and IPFS support cannot be enabled at the same time. Choose one.") } + if config.S3.Enabled { + if config.S3.AccessKey == "" || config.S3.Secret == "" { + panic("S3 support requires an access key and secret.") + } + + if config.S3.Region == "" || config.S3.Endpoint == "" { + panic("S3 support requires a region and endpoint.") + } + + if config.S3.Bucket == "" { + panic("S3 support requires a bucket created for storing public video segments.") + } + } + if !fileExists(config.PrivateHLSPath) { panic(fmt.Sprintf("%s does not exist.", config.PrivateHLSPath)) } diff --git a/config/config-example.yaml b/config/config-example.yaml index 426d0747a..1a5bd1e2a 100644 --- a/config/config-example.yaml +++ b/config/config-example.yaml @@ -21,6 +21,7 @@ ipfs: s3: enabled: false + endpoint: https://s3.us-west-2.amazonaws.com accessKey: ABC12342069 secret: lolomgqwtf49583949 region: us-west-2 diff --git a/s3Storage.go b/s3Storage.go index a0480164b..e9b0e0d5d 100644 --- a/s3Storage.go +++ b/s3Storage.go @@ -17,6 +17,7 @@ type S3Storage struct { sess *session.Session host string + s3Endpoint string s3Region string s3Bucket string s3AccessKey string @@ -26,6 +27,7 @@ type S3Storage struct { func (s *S3Storage) Setup(configuration Config) { log.Println("Setting up S3 for external storage of video...") + s.s3Endpoint = configuration.S3.Endpoint s.s3Region = configuration.S3.Region s.s3Bucket = configuration.S3.Bucket s.s3AccessKey = configuration.S3.AccessKey @@ -91,8 +93,10 @@ func (s S3Storage) connectAWS() *session.Session { sess, err := session.NewSession( &aws.Config{ - Region: aws.String(s.s3Region), - Credentials: creds, + Region: aws.String(s.s3Region), + Credentials: creds, + Endpoint: aws.String(s.s3Endpoint), + S3ForcePathStyle: aws.Bool(true), }, )