in alibabacloud-gateway-fc/golang/client/client.go [298:379]
func (client *Client) SignRequestForPop(context *spi.InterceptorContext) (_err error) {
request := context.Request
config := context.Configuration
request.Headers = tea.Merge(map[string]*string{
"host": config.Endpoint,
"x-acs-version": request.Version,
"x-acs-action": request.Action,
"user-agent": request.UserAgent,
"x-acs-date": openapiutil.GetTimestamp(),
"x-acs-signature-nonce": util.GetNonce(),
"accept": tea.String("application/json"),
}, request.Headers)
signatureAlgorithm := tea.String("ACS3-HMAC-SHA256")
if !tea.BoolValue(util.IsUnset(request.SignatureAlgorithm)) {
signatureAlgorithm = request.SignatureAlgorithm
}
hashedRequestPayload := encodeutil.HexEncode(encodeutil.Hash(util.ToBytes(tea.String("")), signatureAlgorithm))
if !tea.BoolValue(util.IsUnset(request.Stream)) {
tmp, _err := util.ReadAsBytes(request.Stream)
if _err != nil {
return _err
}
hashedRequestPayload = encodeutil.HexEncode(encodeutil.Hash(tmp, signatureAlgorithm))
request.Stream = tea.ToReader(tmp)
request.Headers["content-type"] = tea.String("application/octet-stream")
} else {
if !tea.BoolValue(util.IsUnset(request.Body)) {
if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("json"))) {
jsonObj := util.ToJSONString(request.Body)
hashedRequestPayload = encodeutil.HexEncode(encodeutil.Hash(util.ToBytes(jsonObj), signatureAlgorithm))
request.Stream = tea.ToReader(jsonObj)
request.Headers["content-type"] = tea.String("application/json; charset=utf-8")
} else {
m, _err := util.AssertAsMap(request.Body)
if _err != nil {
return _err
}
formObj := openapiutil.ToForm(m)
hashedRequestPayload = encodeutil.HexEncode(encodeutil.Hash(util.ToBytes(formObj), signatureAlgorithm))
request.Stream = tea.ToReader(formObj)
request.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
}
}
}
request.Headers["x-acs-content-sha256"] = hashedRequestPayload
if !tea.BoolValue(util.EqualString(request.AuthType, tea.String("Anonymous"))) {
credential := request.Credential
accessKeyId, _err := credential.GetAccessKeyId()
if _err != nil {
return _err
}
accessKeySecret, _err := credential.GetAccessKeySecret()
if _err != nil {
return _err
}
securityToken, _err := credential.GetSecurityToken()
if _err != nil {
return _err
}
if !tea.BoolValue(util.Empty(securityToken)) {
request.Headers["x-acs-accesskey-id"] = accessKeyId
request.Headers["x-acs-security-token"] = securityToken
}
request.Headers["Authorization"], _err = client.GetAuthorizationForPop(request.Pathname, request.Method, request.Query, request.Headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, accessKeySecret)
if _err != nil {
return _err
}
}
return _err
}