diff --git a/s3/s3.go b/s3/s3.go index 997f8640e568c0eda68af4c2dc9fec321b06f285..69ab117004cc801ad06f509c358f989f43e2dc8b 100644 --- a/s3/s3.go +++ b/s3/s3.go @@ -78,10 +78,45 @@ const ( MIMETypeXLSX MIMEType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ) +var ( + s3Sessions = map[string]*SessionWithHelpers{} +) + type SessionWithHelpers struct { S3Session *s3.S3 } +func GetS3Session(region ...string) *SessionWithHelpers { + + s3Region := "af-south-1" + + // Set custom region + if region != nil && len(region) > 0 { + s3Region = region[0] + } + + // Check if session exists for region, if it does return it + if s3Session, ok := s3Sessions[s3Region]; ok { + return s3Session + } + + // Setup session + options := session.Options{ + Config: aws.Config{ + Region: aws.String(s3Region), + }, + } + + sess, err := session.NewSessionWithOptions(options) + if err != nil { + return nil + } + + s3Session := NewSession(sess) + s3Sessions[s3Region] = s3Session + return s3Session +} + func NewSession(session *session.Session) *SessionWithHelpers { return &SessionWithHelpers{ S3Session: s3.New(session),