diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
commit | 8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch) | |
tree | 544930fb309b30317ae9797a9683768705d664c4 /workhorse/internal/config/url_openers.go | |
parent | 4b1de649d0168371549608993deac953eb692019 (diff) |
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'workhorse/internal/config/url_openers.go')
-rw-r--r-- | workhorse/internal/config/url_openers.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/workhorse/internal/config/url_openers.go b/workhorse/internal/config/url_openers.go new file mode 100644 index 00000000000..d3c96ee9eef --- /dev/null +++ b/workhorse/internal/config/url_openers.go @@ -0,0 +1,51 @@ +package config + +import ( + "context" + "fmt" + "net/url" + + "gocloud.dev/blob" + "gocloud.dev/blob/azureblob" +) + +// This code can be removed once https://github.com/google/go-cloud/pull/2851 is merged. + +// URLOpener opens Azure URLs like "azblob://mybucket". +// +// The URL host is used as the bucket name. +// +// The following query options are supported: +// - domain: The domain name used to access the Azure Blob storage (e.g. blob.core.windows.net) +type azureURLOpener struct { + *azureblob.URLOpener +} + +func (o *azureURLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { + opts := new(azureblob.Options) + *opts = o.Options + + err := setOptionsFromURLParams(u.Query(), opts) + if err != nil { + return nil, err + } + return azureblob.OpenBucket(ctx, o.Pipeline, o.AccountName, u.Host, opts) +} + +func setOptionsFromURLParams(q url.Values, opts *azureblob.Options) error { + for param, values := range q { + if len(values) > 1 { + return fmt.Errorf("multiple values of %v not allowed", param) + } + + value := values[0] + switch param { + case "domain": + opts.StorageDomain = azureblob.StorageDomain(value) + default: + return fmt.Errorf("unknown query parameter %q", param) + } + } + + return nil +} |