diff --git a/sdk/client.go b/sdk/client.go index b7ef8f6..e171e9c 100644 --- a/sdk/client.go +++ b/sdk/client.go @@ -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) { + } diff --git a/sdk/config.go b/sdk/config.go index 11db32a..db136bd 100644 --- a/sdk/config.go +++ b/sdk/config.go @@ -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 } diff --git a/sdk/utils/utils.go b/sdk/utils/utils.go index 824ef58..b8b6125 100644 --- a/sdk/utils/utils.go +++ b/sdk/utils/utils.go @@ -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) + } + } +} diff --git a/sdk/utils/utils_test.go b/sdk/utils/utils_test.go new file mode 100644 index 0000000..96fcf22 --- /dev/null +++ b/sdk/utils/utils_test.go @@ -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) +} diff --git a/services/jedi/client.go b/services/jedi/client.go index 24336d2..1d40b9b 100644 --- a/services/jedi/client.go +++ b/services/jedi/client.go @@ -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 }