@@ -2,6 +2,7 @@ package sdk | |||
import ( | |||
"context" | |||
"crypto/tls" | |||
"fmt" | |||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth" | |||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/credentials" | |||
@@ -29,7 +30,16 @@ type Client struct { | |||
config *Config | |||
} | |||
func (client *Client) GetHTTPSInsecure() bool { | |||
return client.isInsecure | |||
} | |||
func (client *Client) InitClientConfig() (config *Config) { | |||
if client.config != nil { | |||
return client.config | |||
} else { | |||
return NewConfig() | |||
} | |||
} | |||
@@ -121,10 +131,39 @@ func (client *Client) getTimeOut(request requests.AcsRequest) (time.Duration, ti | |||
return readTimeOut, connectTimeOut | |||
} | |||
func (client *Client) getHTTPSInsecure(request requests.AcsRequest) (insecure bool) { | |||
if request.GetHTTPSInsecure() != nil { | |||
insecure = *request.GetHTTPSInsecure() | |||
} else { | |||
insecure = client.GetHTTPSInsecure() | |||
} | |||
return | |||
} | |||
func (client *Client) DoAction(request requests.AcsRequest, response responses.AcsResponse) (err error) { | |||
return client.DoActionWithSigner(request, response, nil) | |||
} | |||
func (client *Client) DoActionWithSigner(request requests.AcsRequest, response responses.AcsResponse, signer auth.Signer) (err error) { | |||
client.setTimeOut(request) | |||
if trans, ok := client.httpClient.Transport.(*http.Transport); ok && trans != nil { | |||
if trans.TLSClientConfig != nil { | |||
trans.TLSClientConfig.InsecureSkipVerify = client.getHTTPSInsecure(request) | |||
} else { | |||
trans.TLSClientConfig = &tls.Config{ | |||
InsecureSkipVerify: client.getHTTPSInsecure(request), | |||
} | |||
} | |||
client.httpClient.Transport = trans | |||
} | |||
var httpResponse *http.Response | |||
} | |||
func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (httpRequest *requests.HttpRequest, err error) { | |||
} |
@@ -1,16 +1,23 @@ | |||
package sdk | |||
import ( | |||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" | |||
"net/http" | |||
"time" | |||
) | |||
type Config struct { | |||
Timeout time.Duration | |||
HttpTransport *http.Transport `default:""` | |||
Transport http.RoundTripper `default:""` | |||
Debug bool `default:"false"` | |||
HttpTransport *http.Transport `default:""` | |||
Transport http.RoundTripper `default:""` | |||
GoRoutinePoolSize int `default:"0"` | |||
UserAgent string `default:""` | |||
Scheme string `default:"HTTP"` | |||
Timeout time.Duration `default:"5"` | |||
} | |||
func NewConfig() *Config { | |||
return &Config{} | |||
config := &Config{} | |||
utils.InitStructWithDefaultTag(config) | |||
return config | |||
} |
@@ -1,6 +1,13 @@ | |||
package utils | |||
import "net/url" | |||
import ( | |||
"fmt" | |||
"net/url" | |||
"reflect" | |||
"strconv" | |||
"strings" | |||
"time" | |||
) | |||
func GetUrlFormedMap(source map[string]string) (urlEncoded string) { | |||
urlEncoder := url.Values{} | |||
@@ -10,3 +17,34 @@ func GetUrlFormedMap(source map[string]string) (urlEncoded string) { | |||
urlEncoded = urlEncoder.Encode() | |||
return | |||
} | |||
func InitStructWithDefaultTag(bean interface{}) { | |||
beantype := reflect.TypeOf(bean) | |||
for i := 0; i < beantype.Elem().NumField(); i++ { | |||
field := beantype.Elem().Field(i) | |||
defaultValue := strings.TrimSpace(field.Tag.Get("default")) | |||
if defaultValue == "" || defaultValue == "-" { | |||
continue | |||
} | |||
setter := reflect.ValueOf(bean).Elem().Field(i) | |||
fieldTypeName := field.Type.String() | |||
switch fieldTypeName { | |||
case "int", "int64", "int32", "int8", "int16": | |||
intval, _ := strconv.ParseInt(defaultValue, 10, 64) | |||
setter.SetInt(intval) | |||
case "uint", "uint8", "uint16", "uint32", "uint64", "uintptr": | |||
uintval, _ := strconv.ParseUint(defaultValue, 10, 64) | |||
setter.SetUint(uintval) | |||
case "string": | |||
setter.SetString(defaultValue) | |||
case "time.Duration": | |||
intval, _ := strconv.ParseInt(defaultValue, 10, 64) | |||
setter.SetInt(intval * int64(time.Second)) | |||
case "bool": | |||
boolval, _ := strconv.ParseBool(defaultValue) | |||
setter.SetBool(boolval) | |||
default: | |||
fmt.Println(field.Type.String(), field.Name) | |||
} | |||
} | |||
} |
@@ -0,0 +1,25 @@ | |||
package utils | |||
import ( | |||
"fmt" | |||
"net/http" | |||
"testing" | |||
"time" | |||
) | |||
type TestCase struct { | |||
Debug bool `default:"false"` | |||
HttpTransport *http.Transport `default:""` | |||
Transport http.RoundTripper `default:""` | |||
GoRoutinePoolSize int `default:"5"` | |||
UserAgent string `default:""` | |||
Scheme string `default:"HTTP"` | |||
Haha uintptr `default:"232"` | |||
Timeout time.Duration `default:"5"` | |||
} | |||
func TestInitStructWithDefaultTag(t *testing.T) { | |||
testcase := &TestCase{} | |||
InitStructWithDefaultTag(testcase) | |||
fmt.Printf("%+v", testcase) | |||
} |
@@ -19,6 +19,6 @@ func (c *Client) SendSms(req *SendSmsRequest) (response *SendSmsResponse, err er | |||
func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client, err error) { | |||
client = &Client{} | |||
err = client.InitWithOptions("", nil, "") | |||
err = client.InitWithAccessKey(accesskey, secrect, source) | |||
return | |||
} |