Browse Source

fix https endpoint proxy bug

taowei.wtw 6 years ago
parent
commit
cbe2cde93c
5 changed files with 61 additions and 8 deletions
  1. 6 6
      oss/client.go
  2. 44 0
      oss/client_test.go
  3. 9 0
      oss/conn.go
  4. 1 1
      oss/const.go
  5. 1 1
      oss/multipart.go

+ 6 - 6
oss/client.go

@@ -175,9 +175,9 @@ func (client Client) IsBucketExist(bucketName string) (bool, error) {
 //
 // error    it's nil if no error, otherwise it's an error object.
 //
-func (client Client) DeleteBucket(bucketName string) error {
+func (client Client) DeleteBucket(bucketName string, options ...Option) error {
 	params := map[string]interface{}{}
-	resp, err := client.do("DELETE", bucketName, params, nil, nil)
+	resp, err := client.do("DELETE", bucketName, params, nil, nil, options...)
 	if err != nil {
 		return err
 	}
@@ -675,11 +675,11 @@ func (client Client) GetBucketCORS(bucketName string) (GetBucketCORSResult, erro
 //
 // error    it's nil if no error, otherwise it's an error object.
 //
-func (client Client) GetBucketInfo(bucketName string) (GetBucketInfoResult, error) {
+func (client Client) GetBucketInfo(bucketName string, options ...Option) (GetBucketInfoResult, error) {
 	var out GetBucketInfoResult
 	params := map[string]interface{}{}
 	params["bucketInfo"] = nil
-	resp, err := client.do("GET", bucketName, params, nil, nil)
+	resp, err := client.do("GET", bucketName, params, nil, nil, options...)
 	if err != nil {
 		return out, err
 	}
@@ -1286,8 +1286,8 @@ func SetCredentialsProvider(provider CredentialsProvider) ClientOption {
 // Private
 func (client Client) do(method, bucketName string, params map[string]interface{},
 	headers map[string]string, data io.Reader, options ...Option) (*Response, error) {
-	resp, err := client.Conn.Do(method, bucketName, "", params,
-		headers, data, 0, nil)
+
+	resp, err := client.Conn.Do(method, bucketName, "", params, headers, data, 0, nil)
 
 	// get response header
 	respHeader, _ := findOption(options, responseHeader, nil)

+ 44 - 0
oss/client_test.go

@@ -2009,6 +2009,50 @@ func (s *OssClientSuite) TestProxy(c *C) {
 	c.Assert(err, IsNil)
 }
 
+// TestProxy for https endpoint
+func (s *OssClientSuite) TestHttpsEndpointProxy(c *C) {
+	bucketNameTest := bucketNamePrefix + randLowStr(6)
+	objectName := objectNamePrefix + randLowStr(6)
+	objectValue := randLowStr(100)
+
+	httpsEndPoint := ""
+	if strings.HasPrefix(endpoint, "http://") {
+		httpsEndPoint = strings.Replace(endpoint, "http://", "https://", 1)
+	} else if !strings.HasPrefix(endpoint, "https://") {
+		httpsEndPoint = "https://" + endpoint
+	} else {
+		httpsEndPoint = endpoint
+	}
+
+	client, err := New(httpsEndPoint, accessID, accessKey, AuthProxy(proxyHost, proxyUser, proxyPasswd))
+
+	// Create bucket
+	err = client.CreateBucket(bucketNameTest)
+	c.Assert(err, IsNil)
+
+	bucket, err := client.Bucket(bucketNameTest)
+
+	// Put object
+	err = bucket.PutObject(objectName, strings.NewReader(objectValue))
+	c.Assert(err, IsNil)
+
+	// Get object
+	_, err = bucket.GetObject(objectName)
+	c.Assert(err, IsNil)
+
+	// List objects
+	_, err = bucket.ListObjects()
+	c.Assert(err, IsNil)
+
+	// Delete object
+	err = bucket.DeleteObject(objectName)
+	c.Assert(err, IsNil)
+
+	// Delete bucket
+	err = client.DeleteBucket(bucketNameTest)
+	c.Assert(err, IsNil)
+}
+
 // Private
 func (s *OssClientSuite) checkBucket(buckets []BucketProperties, bucket string) bool {
 	for _, v := range buckets {

+ 9 - 0
oss/conn.go

@@ -56,6 +56,13 @@ func (conn *Conn) init(config *Config, urlMaker *urlMaker, client *http.Client)
 			if err != nil {
 				return err
 			}
+			if config.IsAuthProxy {
+				if config.ProxyPassword != "" {
+					proxyURL.User = url.UserPassword(config.ProxyUser, config.ProxyPassword)
+				} else {
+					proxyURL.User = url.User(config.ProxyUser)
+				}
+			}
 			transport.Proxy = http.ProxyURL(proxyURL)
 		}
 		client = &http.Client{Transport: transport}
@@ -135,6 +142,7 @@ func (conn Conn) DoURL(method HTTPMethod, signedURL string, headers map[string]s
 		// Transfer failed
 		event = newProgressEvent(TransferFailedEvent, tracker.completedBytes, req.ContentLength, 0)
 		publishProgress(listener, event)
+		conn.config.WriteLog(Debug, "[Resp:%p]http error:%s\n", req, err.Error())
 		return nil, err
 	}
 
@@ -267,6 +275,7 @@ func (conn Conn) doRequest(method string, uri *url.URL, canonicalizedResource st
 		// Transfer failed
 		event = newProgressEvent(TransferFailedEvent, tracker.completedBytes, req.ContentLength, 0)
 		publishProgress(listener, event)
+		conn.config.WriteLog(Debug, "[Resp:%p]http error:%s\n", req, err.Error())
 		return nil, err
 	}
 

+ 1 - 1
oss/const.go

@@ -182,5 +182,5 @@ const (
 
 	NullVersion = "null"
 
-	Version = "v2.0.1" // Go SDK version
+	Version = "v2.0.2" // Go SDK version
 )

+ 1 - 1
oss/multipart.go

@@ -255,7 +255,7 @@ func (bucket Bucket) ListUploadedParts(imur InitiateMultipartUploadResult, optio
 	}
 
 	params["uploadId"] = imur.UploadID
-	resp, err := bucket.do("GET", imur.Key, params, nil, nil, nil)
+	resp, err := bucket.do("GET", imur.Key, params, options, nil, nil)
 	if err != nil {
 		return out, err
 	}