in alibabacloud-gateway-fc/golang/client/client.go [580:648]
func (client *Client) SignRequest(request *HttpRequest, credential credential.Credential) (_result map[string]interface{}, _err error) {
httpRequest := &HttpRequest{
Method: request.Method,
Path: request.Path,
Headers: request.Headers,
Body: request.Body,
ReqBodyType: request.ReqBodyType,
}
httpRequest.Headers["date"] = util.GetDateUTCString()
httpRequest.Headers["accept"] = tea.String("application/json")
httpRequest.Headers["content-type"] = tea.String("application/json")
if !tea.BoolValue(util.IsUnset(request.Body)) {
if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("json"))) {
httpRequest.Headers["content-type"] = tea.String("application/json")
} else if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("form"))) {
httpRequest.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
} else if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("binary"))) {
httpRequest.Headers["content-type"] = tea.String("application/octet-stream")
}
}
accessKeyId, _err := credential.GetAccessKeyId()
if _err != nil {
return _result, _err
}
accessKeySecret, _err := credential.GetAccessKeySecret()
if _err != nil {
return _result, _err
}
securityToken, _err := credential.GetSecurityToken()
if _err != nil {
return _result, _err
}
if !tea.BoolValue(util.Empty(securityToken)) {
httpRequest.Headers["x-fc-security-token"] = securityToken
}
resource := request.Path
contentMd5 := httpRequest.Headers["content-md5"]
if tea.BoolValue(util.IsUnset(contentMd5)) {
contentMd5 = tea.String("")
}
contentType := httpRequest.Headers["content-type"]
if tea.BoolValue(util.IsUnset(contentType)) {
contentType = tea.String("")
}
stringToSign := tea.String("")
canonicalizedResource, _err := client.BuildCanonicalizedResource(resource)
if _err != nil {
return _result, _err
}
canonicalizedHeaders, _err := client.BuildCanonicalizedHeaders(httpRequest.Headers)
if _err != nil {
return _result, _err
}
stringToSign = tea.String(tea.StringValue(request.Method) + "\n" + tea.StringValue(util.ToJSONString(contentMd5)) + "\n" + tea.StringValue(util.ToJSONString(contentType)) + "\n" + tea.StringValue(util.ToJSONString(httpRequest.Headers["date"])) + "\n" + tea.StringValue(canonicalizedHeaders) + tea.StringValue(canonicalizedResource))
signature := encodeutil.Base64EncodeToString(signatureutil.HmacSHA256Sign(stringToSign, accessKeySecret))
httpRequest.Headers["Authorization"] = tea.String("FC " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(signature))
_result = httpRequest.Headers
return _result, _err
}