From c02e9c0c23fc88ce1cbe2adff43456db0eec0d18 Mon Sep 17 00:00:00 2001 From: Michal Pristas Date: Mon, 9 Jul 2018 08:42:22 +0200 Subject: [PATCH] Added configurable CDN endpoint (#214) * added configurable cdn endpoint --- pkg/config/env/cdn.go | 23 +++++++++++++++++++++++ pkg/storage/azurecdn/storage.go | 2 +- pkg/storage/gcp/saver.go | 22 ++++++++++++++++++++-- pkg/storage/s3/storage.go | 2 +- 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 pkg/config/env/cdn.go diff --git a/pkg/config/env/cdn.go b/pkg/config/env/cdn.go new file mode 100644 index 00000000..c7d2e759 --- /dev/null +++ b/pkg/config/env/cdn.go @@ -0,0 +1,23 @@ +package env + +import ( + "net/url" + + "github.com/gobuffalo/envy" +) + +// CDNEndpointWithDefault returns CDN endpoint if set +// if not it should default to clouds default blob storage endpoint e.g +func CDNEndpointWithDefault(value *url.URL) *url.URL { + rawURI, err := envy.MustGet("CDN_ENDPOINT") + if err != nil { + return value + } + + uri, err := url.Parse(rawURI) + if err != nil { + return value + } + + return uri +} diff --git a/pkg/storage/azurecdn/storage.go b/pkg/storage/azurecdn/storage.go index fac9f21b..a1a7e7eb 100644 --- a/pkg/storage/azurecdn/storage.go +++ b/pkg/storage/azurecdn/storage.go @@ -37,7 +37,7 @@ func New(accountName, accountKey string) (*Storage, error) { // // func (s Storage) BaseURL() *url.URL { - return s.accountURL + return env.CDNEndpointWithDefault(s.accountURL) } // Save implements the (github.com/gomods/athens/pkg/storage).Saver interface. diff --git a/pkg/storage/gcp/saver.go b/pkg/storage/gcp/saver.go index debabbd0..83e0ed77 100644 --- a/pkg/storage/gcp/saver.go +++ b/pkg/storage/gcp/saver.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "log" + "net/url" "time" "cloud.google.com/go/storage" @@ -18,7 +19,8 @@ import ( // Storage implements the Saver interface // (./pkg/storage).Saver type Storage struct { - bucket *storage.BucketHandle + bucket *storage.BucketHandle + baseURI *url.URL } // New returns a new Storage instance authenticated using the provided @@ -37,7 +39,23 @@ func New(ctx context.Context, cred option.ClientOption) (*Storage, error) { return nil, err } bkt := client.Bucket(bucketname) - return &Storage{bucket: bkt}, nil + + u, err := url.Parse(fmt.Sprintf("https://storage.googleapis.com/%s", bucketname)) + if err != nil { + return nil, err + } + + return &Storage{bucket: bkt, baseURI: u}, nil +} + +// BaseURL returns the base URL that stores all modules. It can be used +// in the "meta" tag redirect response to vgo. +// +// For example: +// +// +func (s *Storage) BaseURL() *url.URL { + return env.CDNEndpointWithDefault(s.baseURI) } // Save uploads the module .mod, .zip and .info files for a given version. diff --git a/pkg/storage/s3/storage.go b/pkg/storage/s3/storage.go index 31aa74d8..c0dc05c5 100644 --- a/pkg/storage/s3/storage.go +++ b/pkg/storage/s3/storage.go @@ -73,7 +73,7 @@ func NewWithClient(bucketName string, client s3iface.S3API) (*Storage, error) { // // func (s Storage) BaseURL() *url.URL { - return s.baseURI + return env.CDNEndpointWithDefault(s.baseURI) } // Save implements the (github.com/gomods/athens/pkg/storage).Saver interface.