From a4b9ce513a04d3f24a4db9fde282b338a2f3257a Mon Sep 17 00:00:00 2001 From: ioito Date: Tue, 24 May 2022 16:25:41 +0800 Subject: [PATCH] fix(region): huawei object temp url --- pkg/multicloud/huawei/obs/conf.go | 26 ++++++++++++++++++++------ pkg/multicloud/objectstore/shell.go | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/pkg/multicloud/huawei/obs/conf.go b/pkg/multicloud/huawei/obs/conf.go index f4334c76fd..65a0de13c0 100644 --- a/pkg/multicloud/huawei/obs/conf.go +++ b/pkg/multicloud/huawei/obs/conf.go @@ -219,7 +219,7 @@ func (conf *config) initConfigWithDefault() error { urlHolder.scheme = "http" address = conf.endpoint[len("http://"):] } else { - urlHolder.scheme = "http" + urlHolder.scheme = "https" address = conf.endpoint } @@ -328,11 +328,25 @@ func DummyQueryEscape(s string) string { return s } -func (conf *config) formatUrls(bucketName, objectKey string, params map[string]string, escape bool) (requestUrl string, canonicalizedUrl string) { +func (conf *config) requestUrl(bucket string) string { + urlHolder := conf.urlHolder + requestUrl := fmt.Sprintf("%s://%s", urlHolder.scheme, urlHolder.host) + if len(bucket) > 0 { + requestUrl = fmt.Sprintf("%s://%s.%s", urlHolder.scheme, bucket, urlHolder.host) + } + if urlHolder.scheme == "https" && urlHolder.port != 443 { + requestUrl += fmt.Sprintf(":%d", urlHolder.port) + } + if urlHolder.scheme == "http" && urlHolder.port != 80 { + requestUrl += fmt.Sprintf(":%d", urlHolder.port) + } + return requestUrl +} +func (conf *config) formatUrls(bucketName, objectKey string, params map[string]string, escape bool) (requestUrl string, canonicalizedUrl string) { urlHolder := conf.urlHolder if conf.cname { - requestUrl = fmt.Sprintf("%s://%s:%d", urlHolder.scheme, urlHolder.host, urlHolder.port) + requestUrl = conf.requestUrl("") if conf.signature == "v4" { canonicalizedUrl = "/" } else { @@ -340,14 +354,14 @@ func (conf *config) formatUrls(bucketName, objectKey string, params map[string]s } } else { if bucketName == "" { - requestUrl = fmt.Sprintf("%s://%s:%d", urlHolder.scheme, urlHolder.host, urlHolder.port) + requestUrl = conf.requestUrl("") canonicalizedUrl = "/" } else { if conf.pathStyle { - requestUrl = fmt.Sprintf("%s://%s:%d/%s", urlHolder.scheme, urlHolder.host, urlHolder.port, bucketName) + requestUrl = fmt.Sprintf("%s/%s", conf.requestUrl(""), bucketName) canonicalizedUrl = "/" + bucketName } else { - requestUrl = fmt.Sprintf("%s://%s.%s:%d", urlHolder.scheme, bucketName, urlHolder.host, urlHolder.port) + requestUrl = conf.requestUrl(bucketName) if conf.signature == "v2" || conf.signature == "OBS" { canonicalizedUrl = "/" + bucketName + "/" } else { diff --git a/pkg/multicloud/objectstore/shell.go b/pkg/multicloud/objectstore/shell.go index 3c831b31b1..1236e64f92 100644 --- a/pkg/multicloud/objectstore/shell.go +++ b/pkg/multicloud/objectstore/shell.go @@ -793,6 +793,26 @@ func S3Shell() { return nil }) + type BucketObjectTempUrlOptions struct { + BUCKET string `help:"name of bucket"` + KEY string `help:"Key of object"` + Method string `default:"GET" choices:"GET|PUT|POST"` + Hour int64 `default:"1"` + } + + shellutils.R(&BucketObjectTempUrlOptions{}, "object-temp-url", "Show object temp url", func(cli cloudprovider.ICloudRegion, args *BucketObjectTempUrlOptions) error { + bucket, err := cli.GetIBucketById(args.BUCKET) + if err != nil { + return err + } + url, err := bucket.GetTempUrl(args.Method, args.KEY, time.Duration(args.Hour)*time.Hour) + if err != nil { + return err + } + fmt.Println(url) + return nil + }) + type BucketObjectCopyOptions struct { SRC string `help:"name of source bucket"` SRCKEY string `help:"Key of source object"`