Merge pull request #73 from yunify/add-NewWithEndpoint

Add new with endpoint
This commit is contained in:
runzexia 2017-12-12 16:13:18 +08:00 committed by GitHub
commit 19b51a63f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 2 deletions

View File

@ -17,15 +17,18 @@
package config
import (
"fmt"
"io/ioutil"
"net"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
"github.com/yunify/qingcloud-sdk-go/logger"
"github.com/yunify/qingcloud-sdk-go/utils"
"net"
"time"
)
// A Config stores a configuration of this sdk.
@ -62,6 +65,42 @@ func New(accessKeyID, secretAccessKey string) (*Config, error) {
return config, nil
}
// NewWithEndpoint create a Config with given AccessKeyID, SecretAccessKey and endpoint
func NewWithEndpoint(accessKeyID, secretAccessKey, endpoint string) (*Config, error) {
qcURL, err := url.Parse(endpoint)
if err != nil {
return nil, err
}
if !strings.Contains(qcURL.Host, ":") {
if qcURL.Scheme == "https" {
qcURL.Host += ":443"
} else if qcURL.Scheme == "http" {
qcURL.Host += ":80"
} else {
return nil, fmt.Errorf("can not find default port ")
}
}
config, err := NewDefault()
if err != nil {
return nil, err
}
_, port, err := net.SplitHostPort(qcURL.Host)
if err != nil {
return nil, err
}
config.Port, _ = strconv.Atoi(port)
config.AccessKeyID = accessKeyID
config.SecretAccessKey = secretAccessKey
config.Protocol = qcURL.Scheme
config.URI = qcURL.Path
config.Connection = &http.Client{}
return config, nil
}
// NewDefault create a Config with default configuration.
func NewDefault() (*Config, error) {
config := &Config{}

View File

@ -91,3 +91,15 @@ func TestNew(t *testing.T) {
assert.Equal(t, "SecretAccessKey", config.SecretAccessKey)
assert.Equal(t, "https", config.Protocol)
}
func TestNewWithEndpoint(t *testing.T) {
config, err := NewWithEndpoint("AccessKeyID", "SecretAccessKey", "https://api.qingcloud.com/iaas")
assert.Nil(t, err)
assert.Equal(t, "AccessKeyID", config.AccessKeyID)
assert.Equal(t, "SecretAccessKey", config.SecretAccessKey)
assert.Equal(t, "https", config.Protocol)
assert.Equal(t, "api.qingcloud.com", config.Host)
assert.Equal(t, 443, config.Port)
assert.Equal(t, "/iaas", config.URI)
}

View File

@ -99,6 +99,7 @@ func (is *Signer) BuildStringToSign(request *http.Request) (string, error) {
}
return "", fmt.Errorf("Requset Type Not Support For Sign ")
}
// BuildStringToSignByValues build the string to sign.
func (is *Signer) BuildStringToSignByValues(requestDate string, requestMethod string, requestPath string, requestParams url.Values) (string, error) {
requestParams.Set("access_key_id", is.AccessKeyID)