From 601359baef655bfe55de1fad6c54f54168c659ce Mon Sep 17 00:00:00 2001 From: Liam Burnand Date: Sun, 16 Feb 2025 18:49:58 +0000 Subject: [PATCH] Adding the CDN for avatars --- main.go | 16 +++++++++++++++- utils/cdn.go | 32 ++++++++++++++++++++++++++++++++ views/views.go | 6 +++++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 utils/cdn.go diff --git a/main.go b/main.go index 58dd033..325004e 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "github.com/joho/godotenv" + "github.com/ystv/web-auth/utils" "github.com/ystv/web-auth/views" ) @@ -77,6 +78,19 @@ func main() { domainName := os.Getenv("WAUTH_DOMAIN_NAME") + // CDN + cdnConfig := utils.CDNConfig{ + Endpoint: os.Getenv("WAUTH_CDN_ENDPOINT"), + Region: os.Getenv("WAUTH_CDN_REGION"), + AccessKeyID: os.Getenv("WAUTH_CDN_ACCESSKEYID"), + SecretAccessKey: os.Getenv("WAUTH_CDN_SECRETACCESSKEY"), + } + cdn, err := utils.NewCDN(cdnConfig) + if err != nil { + log.Fatalf("Unable to connect to CDN: %v", err) + } + log.Printf("Connected to CDN: %s", cdnConfig.Endpoint) + // Generate config conf := &views.Config{ Version: Version, @@ -103,7 +117,7 @@ func main() { }, } - v := views.New(conf, dbHost) + v := views.New(conf, dbHost, cdn) router := NewRouter(&RouterConf{ Config: conf, diff --git a/utils/cdn.go b/utils/cdn.go new file mode 100644 index 0000000..c4075b0 --- /dev/null +++ b/utils/cdn.go @@ -0,0 +1,32 @@ +package utils + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3" +) + +// CDNConfig represents a configuration to connect to a CDN / S3 instance +type CDNConfig struct { + Endpoint string + Region string + AccessKeyID string + SecretAccessKey string +} + +// NewCDN Initialise connection to CDN +func NewCDN(config CDNConfig) (*s3.S3, error) { + s3Config := &aws.Config{ + Credentials: credentials.NewStaticCredentials(config.AccessKeyID, config.SecretAccessKey, ""), + Endpoint: aws.String(config.Endpoint), + Region: aws.String(config.Region), + S3ForcePathStyle: aws.Bool(true), + } + newSession, err := session.NewSession(s3Config) + if err != nil { + return nil, err + } + cdn := s3.New(newSession) + return cdn, nil +} diff --git a/views/views.go b/views/views.go index 78f6b6d..e8c2836 100644 --- a/views/views.go +++ b/views/views.go @@ -7,6 +7,7 @@ import ( "log" "time" + "github.com/aws/aws-sdk-go/service/s3" "github.com/go-playground/validator/v10" "github.com/gorilla/securecookie" "github.com/gorilla/sessions" @@ -60,6 +61,7 @@ type ( Views struct { api api.Repo cache *cache.Cache + cdn *s3.S3 conf *Config cookie *sessions.CookieStore crowd crowd.Repo @@ -81,7 +83,7 @@ type ( ) // New initialises connections, templates, and cookies -func New(conf *Config, host string) *Views { +func New(conf *Config, host string, cdn *s3.S3) *Views { v := &Views{} // Connecting to stores dbStore := db.NewStore(conf.DatabaseURL, host) @@ -92,6 +94,8 @@ func New(conf *Config, host string) *Views { v.api = api.NewAPIRepo(dbStore) v.crowd = crowd.NewCrowdRepo(dbStore) + v.cdn = cdn + v.template = templates.NewTemplate(v.permission, v.role, v.user) // Initialising cache