From 13ab011852c40475f6c772d1c978c9df19f3f41a Mon Sep 17 00:00:00 2001 From: liangzy Date: Wed, 5 Aug 2020 17:01:10 +0800 Subject: [PATCH] init project --- sdk/auth/credentials/access_key_creditial.go | 7 +++++ sdk/auth/signer.go | 2 ++ sdk/client.go | 33 ++++++++++++++------ sdk/requests/http_request.go | 17 +++++++--- sdk/requests/request.go | 8 +++-- sdk/responses/response.go | 28 ++++++++++++++++- services/jedi/client.go | 2 +- services/jedi/send_sms.go | 15 ++++++--- 8 files changed, 88 insertions(+), 24 deletions(-) diff --git a/sdk/auth/credentials/access_key_creditial.go b/sdk/auth/credentials/access_key_creditial.go index 8230ae7..636478e 100644 --- a/sdk/auth/credentials/access_key_creditial.go +++ b/sdk/auth/credentials/access_key_creditial.go @@ -9,3 +9,10 @@ type AccessKeyCredential struct { AccessKeyId string AccessKeySecret string } + +func (baseCred *BaseCredential) ToAccessKeyCredential() *AccessKeyCredential { + return &AccessKeyCredential{ + AccessKeyId: baseCred.AccessKeyId, + AccessKeySecret: baseCred.AccessKeySecret, + } +} diff --git a/sdk/auth/signer.go b/sdk/auth/signer.go index c1508e2..518982a 100644 --- a/sdk/auth/signer.go +++ b/sdk/auth/signer.go @@ -17,6 +17,8 @@ func NewSignerWithCredential(credential Credential, commonApi func(request *requ switch instance := credential.(type) { case *credentials.AccessKeyCredential: signer = signers.NewAccessKeySigner(instance) + case *credentials.BaseCredential: + signer = signers.NewAccessKeySigner(instance.ToAccessKeyCredential()) default: err = errors.New("UnsupportedCredentialErrorCode = SDK.UnsupportedCredential") } diff --git a/sdk/client.go b/sdk/client.go index 2578939..9ac59ee 100644 --- a/sdk/client.go +++ b/sdk/client.go @@ -21,6 +21,7 @@ import ( var Version = "0.0.1" var defaultConnectTimeout = 5 * time.Second var defaultReadTimeout = 10 * time.Second +var defaultDomain = ".gaore.com" var DefaultUserAgent = fmt.Sprintf("GaoreGoSdk (%s;%s) Golang/%s Core/%s", runtime.GOOS, runtime.GOARCH, strings.Trim(runtime.Version(), "go"), Version) type Client struct { @@ -83,7 +84,9 @@ func (client *Client) InitWithAccessKey(accessKeyId, accessKeySecret, source str } func (client *Client) InitWithOptions(host string, config *Config, credential auth.Credential) (err error) { + client.httpClient = &http.Client{} + client.config = config if config.Transport != nil { client.httpClient.Transport = config.Transport @@ -96,8 +99,7 @@ func (client *Client) InitWithOptions(host string, config *Config, credential au } client.signer, err = auth.NewSignerWithCredential(credential, client.ProcessCommonRequestWithSigner) - - return nil + return } func (client *Client) InitWithConfig() (config *Config) { @@ -186,7 +188,6 @@ func (client *Client) DoActionWithSigner(request requests.AcsRequest, response r if err != nil { return err } - noProxy := client.getNoProxy(httpRequest.URL.Scheme) var flag bool for _, value := range noProxy { @@ -222,18 +223,22 @@ func (client *Client) DoActionWithSigner(request requests.AcsRequest, response r var httpResponse *http.Response httpResponse, err = hookDo(client.httpClient.Do)(httpRequest) - if err == nil { - for key, val := range httpResponse.Header { - fmt.Println(key, val) - } + if err != nil { + return } + err = responses.Unmarshal(response, httpResponse, request.GetAcceptFormat()) return } func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer auth.Signer) (httpRequest *http.Request, err error) { // init param - request.SetDomain("") + domain := request.GetDomain() + if strings.Index(domain, ".") < 0 { + domain += defaultDomain + request.SetDomain(domain) + } + if request.GetScheme() == "" { request.SetScheme(client.config.Scheme) } @@ -242,11 +247,19 @@ func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer if err != nil { return } - // build request - err = auth.Sign(request, signer) + // build signature + var finalSigner auth.Signer + if signer != nil { + finalSigner = signer + } else { + finalSigner = client.signer + } + err = auth.Sign(request, finalSigner) if err != nil { return } + + // build request requestMethod := request.GetMethod() requestUrl := request.BuildUrl() body := request.GetBodyReader() diff --git a/sdk/requests/http_request.go b/sdk/requests/http_request.go index 32f4404..82e31e3 100644 --- a/sdk/requests/http_request.go +++ b/sdk/requests/http_request.go @@ -1,6 +1,7 @@ package requests import ( + "fmt" "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" "io" "strings" @@ -16,22 +17,28 @@ func (request *HttpRequest) init() { } func (request *HttpRequest) BuildUrl() string { - return "" + url := fmt.Sprintf("%s://%s", strings.ToLower(request.Scheme), request.Domain) + if len(request.Port) > 0 { + url = fmt.Sprintf("%s:%s", url, request.Port) + } + return url + request.BuildQueries() } func (request *HttpRequest) BuildQueries() string { - return "" + path := strings.TrimLeft(strings.TrimSpace(request.GetActionName()), "/") + request.queries = "/" + path + "?" + utils.GetUrlFormedMap(request.QueryParams) + return request.queries } func (request *HttpRequest) GetActionName() string { return request.actionName } -func (request *HttpRequest) InitWithApiInfo(product, version, action string) { +func (request *HttpRequest) InitWithApiInfo(domain, version, urlPath string) { request.init() - request.product = product + request.SetDomain(domain) request.version = version - request.actionName = action + request.actionName = urlPath } func (request *HttpRequest) GetBodyReader() io.Reader { diff --git a/sdk/requests/request.go b/sdk/requests/request.go index e5d73d0..70c46e2 100644 --- a/sdk/requests/request.go +++ b/sdk/requests/request.go @@ -48,6 +48,7 @@ type AcsRequest interface { GetScheme() string GetDomain() string GetActionName() string + GetAcceptFormat() string GetHeaders() map[string]string BuildUrl() string @@ -66,7 +67,6 @@ type AcsRequest interface { type baseRequest struct { Scheme string Method string - Host string Port string Domain string From string @@ -90,6 +90,10 @@ type baseRequest struct { stringToSign string } +func (request *baseRequest) GetAcceptFormat() string { + return request.AcceptFormat +} + func (request *baseRequest) GetHeaders() map[string]string { return request.Headers } @@ -168,7 +172,7 @@ func (request *baseRequest) addFormParam(key, val string) { func defaultBaseRequest() (request *baseRequest) { request = &baseRequest{ - Scheme: "", + Scheme: HTTP, AcceptFormat: "JSON", Method: GET, QueryParams: make(map[string]string), diff --git a/sdk/responses/response.go b/sdk/responses/response.go index 87de2a8..3df729f 100644 --- a/sdk/responses/response.go +++ b/sdk/responses/response.go @@ -1,6 +1,9 @@ package responses import ( + "encoding/json" + "errors" + "fmt" "io/ioutil" "net/http" ) @@ -21,6 +24,10 @@ type BaseResponse struct { httpContentString string httpContentBytes []byte originHttpResponse *http.Response + + Code int `json:"code"` + Status bool `json:"status"` + Msg string `json:"msg"` } func (baseResponse *BaseResponse) GetHttpStatus() int { @@ -74,6 +81,25 @@ func NewCommonResponse() (response *CommonResponse) { } } -func Unmarshal(response AcsResponse, httpResponse *http.Response, format string) { +func Unmarshal(response AcsResponse, httpResponse *http.Response, format string) (err error) { + err = response.parseFromHttpResponse(httpResponse) + if err != nil { + return + } + if !response.IsSuccess() { + err = errors.New(fmt.Sprintf("%d %s", response.GetHttpStatus(), response.GetHttpContentString())) + return + } + if _, isCommonResponse := response.(CommonResponse); isCommonResponse { + return + } + + if format != "xml" { + err = json.Unmarshal(response.GetHttpContentBytes(), response) + if err != nil { + return errors.New("json Unmarshal:" + err.Error()) + } + } + return } diff --git a/services/jedi/client.go b/services/jedi/client.go index 1d40b9b..44025e8 100644 --- a/services/jedi/client.go +++ b/services/jedi/client.go @@ -3,7 +3,7 @@ package jedi import "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" const ( - PRODUCT = "jedi" + HOST = "jedi.gaore.com" VERSION = "2020-08-04" ) diff --git a/services/jedi/send_sms.go b/services/jedi/send_sms.go index 122c4f5..7e3f7a9 100644 --- a/services/jedi/send_sms.go +++ b/services/jedi/send_sms.go @@ -7,21 +7,26 @@ import ( type SendSmsRequest struct { *requests.HttpRequest - User string `position:"Query" name:"User" default:""` - Code string `position:"Query" name:"Code" default:"-"` - Prams string `position:"Query" name:"Prams" default:"-"` + User string `position:"Query" name:"User" default:""` + Code string `position:"Query" name:"Code" default:"-"` + Params string `position:"Query" name:"Prams" default:"-"` +} + +type SendSmsResponseData struct { + Account string `json:"account"` + Createtime int64 `json:"createtime"` } type SendSmsResponse struct { *responses.BaseResponse - BizId string `json:"BizId"` + Data SendSmsResponseData `json:"data"` } func CreateSendSmsRequest() (req *SendSmsRequest) { req = &SendSmsRequest{ HttpRequest: &requests.HttpRequest{}, } - req.InitWithApiInfo(PRODUCT, VERSION, "/api/sms/send") + req.InitWithApiInfo(HOST, VERSION, "/api/sms/send") return }