@@ -0,0 +1,21 @@ | |||||
package credentials | |||||
type BaseCredential struct { | |||||
AccessKeyId string `json:"access_key_id" yaml:"access_key_id"` | |||||
AccessKeySecret string `json:"access_key_secret" yaml:"access_key_secret"` | |||||
AccessKeyFrom string `json:"access_key_from" yaml:"access_key_from"` | |||||
} | |||||
type AccessKeyCredential struct { | |||||
AccessKeyId string `json:"access_key_id" yaml:"access_key_id"` | |||||
AccessKeySecret string `json:"access_key_secret" yaml:"access_key_secret"` | |||||
AccessKeyFrom string `json:"access_key_from" yaml:"access_key_from"` | |||||
} | |||||
func (baseCred *BaseCredential) ToAccessKeyCredential() *AccessKeyCredential { | |||||
return &AccessKeyCredential{ | |||||
AccessKeyId: baseCred.AccessKeyId, | |||||
AccessKeySecret: baseCred.AccessKeySecret, | |||||
AccessKeyFrom: baseCred.AccessKeyFrom, | |||||
} | |||||
} |
@@ -1,21 +0,0 @@ | |||||
package credentials | |||||
type BaseCredential struct { | |||||
AccessKeyId string | |||||
AccessKeySecret string | |||||
AccessKeyFrom string | |||||
} | |||||
type AccessKeyCredential struct { | |||||
AccessKeyId string | |||||
AccessKeySecret string | |||||
AccessKeyFrom string | |||||
} | |||||
func (baseCred *BaseCredential) ToAccessKeyCredential() *AccessKeyCredential { | |||||
return &AccessKeyCredential{ | |||||
AccessKeyId: baseCred.AccessKeyId, | |||||
AccessKeySecret: baseCred.AccessKeySecret, | |||||
AccessKeyFrom: baseCred.AccessKeyFrom, | |||||
} | |||||
} |
@@ -0,0 +1,15 @@ | |||||
package credentials | |||||
type StdTokenCredential struct { | |||||
AccessKeyId string `json:"access_key_id" yaml:"access_key_id"` | |||||
AccessKeySecret string `json:"access_key_secret" yaml:"access_key_secret"` | |||||
AccessKeyFrom string `json:"access_key_from" yaml:"access_key_from"` | |||||
} | |||||
func NewStsTokenCredential(accessKeyId, accessKeySecret, accessFrom string) *StdTokenCredential { | |||||
return &StdTokenCredential{ | |||||
AccessKeyId: accessKeyId, | |||||
AccessKeySecret: accessKeySecret, | |||||
AccessKeyFrom: accessFrom, | |||||
} | |||||
} |
@@ -26,6 +26,9 @@ func signRpcRequest(request requests.AcsRequest, signer Signer) (err error) { | |||||
request.SetStringToSign(stringToSign) | request.SetStringToSign(stringToSign) | ||||
signature := signer.Sign(stringToSign, "&") | signature := signer.Sign(stringToSign, "&") | ||||
request.GetQueryParams()["sign"] = signature | request.GetQueryParams()["sign"] = signature | ||||
debug("GrSdk sign: %s", signature) | |||||
debug("GrSdk sign string: %s", stringToSign) | |||||
debug("GrSdk sign: \r\n") | |||||
return | return | ||||
} | } | ||||
@@ -106,7 +109,7 @@ func unsignRpcRequest(request *http.Request, signer Signer) (err error) { | |||||
stringToSign = strings.Replace(stringToSign, "%7E", "~", -1) | stringToSign = strings.Replace(stringToSign, "%7E", "~", -1) | ||||
stringToSign = url.QueryEscape(stringToSign) | stringToSign = url.QueryEscape(stringToSign) | ||||
stringToSign = request.Method + "&%2F&" + stringToSign | stringToSign = request.Method + "&%2F&" + stringToSign | ||||
debug("grsdk singstring %s", stringToSign) | |||||
debug("GrSdk sign: %s", stringToSign) | |||||
if timestamp, err := strconv.ParseInt(signParams["access_time"], 10, 64); err != nil { | if timestamp, err := strconv.ParseInt(signParams["access_time"], 10, 64); err != nil { | ||||
return err | return err | ||||
@@ -22,6 +22,8 @@ func NewSignerWithCredential(credential Credential, commonApi func(request *requ | |||||
signer = signers.NewAccessKeySigner(instance) | signer = signers.NewAccessKeySigner(instance) | ||||
case *credentials.BaseCredential: | case *credentials.BaseCredential: | ||||
signer = signers.NewAccessKeySigner(instance.ToAccessKeyCredential()) | signer = signers.NewAccessKeySigner(instance.ToAccessKeyCredential()) | ||||
case *credentials.StdTokenCredential: | |||||
signer = signers.NewStsTokenSigner(instance) | |||||
default: | default: | ||||
err = errors.New("UnsupportedCredentialErrorCode = SDK.UnsupportedCredential") | err = errors.New("UnsupportedCredentialErrorCode = SDK.UnsupportedCredential") | ||||
} | } | ||||
@@ -0,0 +1,41 @@ | |||||
package signers | |||||
import ( | |||||
"crypto/md5" | |||||
"fmt" | |||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/credentials" | |||||
) | |||||
type StsTokenSigner struct { | |||||
credential *credentials.StdTokenCredential | |||||
} | |||||
func (signer *StsTokenSigner) GetAccessKeyId() (string, error) { | |||||
return signer.credential.AccessKeyId, nil | |||||
} | |||||
func (signer *StsTokenSigner) GetAccessKeyFrom() (string, error) { | |||||
return signer.credential.AccessKeyFrom, nil | |||||
} | |||||
func (*StsTokenSigner) GetName() string { | |||||
return "MD5" | |||||
} | |||||
func (signer *StsTokenSigner) Sign(stringToSign, secretSuffix string) string { | |||||
secret := signer.credential.AccessKeySecret + secretSuffix | |||||
return Md5(stringToSign, secret) | |||||
} | |||||
func NewStsTokenSigner(credential *credentials.StdTokenCredential) *StsTokenSigner { | |||||
return &StsTokenSigner{ | |||||
credential: credential, | |||||
} | |||||
} | |||||
func Md5(source, secret string) string { | |||||
data := []byte(fmt.Sprintf("%s##%s", secret, source)) | |||||
has := md5.Sum(data) | |||||
md5str := fmt.Sprintf("%x", has) | |||||
return md5str | |||||
} |
@@ -1,6 +1,7 @@ | |||||
package sdk | package sdk | ||||
import ( | import ( | ||||
"bytes" | |||||
"context" | "context" | ||||
"crypto/tls" | "crypto/tls" | ||||
"fmt" | "fmt" | ||||
@@ -11,6 +12,7 @@ import ( | |||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" | "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils" | ||||
"net" | "net" | ||||
"net/http" | "net/http" | ||||
"net/http/httputil" | |||||
"net/url" | "net/url" | ||||
"os" | "os" | ||||
"regexp" | "regexp" | ||||
@@ -91,6 +93,16 @@ func (client *Client) InitWithAccessKey(accessKeyId, accessKeySecret, accessKeyF | |||||
return client.InitWithOptions(config, credential) | return client.InitWithOptions(config, credential) | ||||
} | } | ||||
func (client *Client) InitWithStsToken(accessKeyId, accessKeySecret, accessKeyFrom string) (err error) { | |||||
config := client.InitWithConfig() | |||||
credential := &credentials.StdTokenCredential{ | |||||
AccessKeyId: accessKeyId, | |||||
AccessKeySecret: accessKeySecret, | |||||
AccessKeyFrom: accessKeyFrom, | |||||
} | |||||
return client.InitWithOptions(config, credential) | |||||
} | |||||
func (client *Client) InitWithOptions(config *Config, credential auth.Credential) (err error) { | func (client *Client) InitWithOptions(config *Config, credential auth.Credential) (err error) { | ||||
client.httpClient = &http.Client{} | client.httpClient = &http.Client{} | ||||
client.config = config | client.config = config | ||||
@@ -227,8 +239,10 @@ func (client *Client) DoActionWithSigner(request requests.AcsRequest, response r | |||||
client.httpClient.Transport = trans | client.httpClient.Transport = trans | ||||
} | } | ||||
var httpResponse *http.Response | |||||
dump, err := httputil.DumpRequest(httpRequest, true) | |||||
debug("client %s", bytes.NewBuffer(dump).String()) | |||||
var httpResponse *http.Response | |||||
httpResponse, err = hookDo(client.httpClient.Do)(httpRequest) | httpResponse, err = hookDo(client.httpClient.Do)(httpRequest) | ||||
if err != nil { | if err != nil { | ||||
return | return | ||||
@@ -285,8 +299,6 @@ func (client *Client) buildRequestWithSigner(request requests.AcsRequest, signer | |||||
userAgent := DefaultUserAgent | userAgent := DefaultUserAgent | ||||
httpRequest.Header.Set("User-Agent", userAgent) | httpRequest.Header.Set("User-Agent", userAgent) | ||||
debug("%s", request.GetStringToSign()) | |||||
debug("%s", httpRequest.Method) | |||||
return | return | ||||
} | } | ||||
@@ -202,8 +202,8 @@ func defaultBaseRequest() (request *baseRequest) { | |||||
Method: GET, | Method: GET, | ||||
QueryParams: make(map[string]string), | QueryParams: make(map[string]string), | ||||
Headers: map[string]string{ | Headers: map[string]string{ | ||||
"gr-sdk-client": "golang/1.14", | |||||
"gr-sdk-invoke-type": "normal", | |||||
"Gr-Sdk-Client": "golang/1.14", | |||||
"Gr-Sdk-Invoke-Type": "normal", | |||||
"Accept-Encoding": Json, | "Accept-Encoding": Json, | ||||
}, | }, | ||||
FormParams: make(map[string]string), | FormParams: make(map[string]string), | ||||
@@ -7,10 +7,9 @@ import ( | |||||
type SendSmsRequest struct { | type SendSmsRequest struct { | ||||
*requests.RpcRequest | *requests.RpcRequest | ||||
User string `position:"Query" field:"user" default:"" ` | |||||
Code string `position:"Query" field:"code" default:"" ` | |||||
Params string `position:"Query" field:"params" default:"" ` | |||||
TestBody string `position:"Body" field:"test_body" default:"2121" ` | |||||
User string `position:"Query" field:"user" default:"" ` | |||||
Code string `position:"Query" field:"code" default:"" ` | |||||
Params string `position:"Query" field:"params" default:"" ` | |||||
} | } | ||||
type SendSmsResponseData struct { | type SendSmsResponseData struct { | ||||
@@ -7,15 +7,16 @@ import ( | |||||
type DemoTestRequest struct { | type DemoTestRequest struct { | ||||
*requests.RpcRequest | *requests.RpcRequest | ||||
Param1 string `position:"Query" field:"param_1" default:"" ` | |||||
Param2 int `position:"Query" field:"param_2" default:"10086" ` | |||||
Param3 bool `position:"Query" field:"param_3" default:"false" ` | |||||
Param1 string `position:"Query" field:"param_1" default:"" ` | |||||
Param2 int `position:"Query" field:"param_2" default:"10086" ` | |||||
Param3 bool `position:"Query" field:"param_3" default:"false" ` | |||||
ParamBody string `position:"Body" field:"param_body" default:"foobar" ` | |||||
} | } | ||||
func CreateDemoTestRequest() (req *DemoTestRequest) { | func CreateDemoTestRequest() (req *DemoTestRequest) { | ||||
req = &DemoTestRequest{RpcRequest: &requests.RpcRequest{}} | req = &DemoTestRequest{RpcRequest: &requests.RpcRequest{}} | ||||
req.InitWithApiInfo(HOST, VERSION, "/api/sms/Index") | req.InitWithApiInfo(HOST, VERSION, "/api/sms/Index") | ||||
req.Method = requests.GET | |||||
req.Method = requests.POST | |||||
return | return | ||||
} | } | ||||