in alibabacloud-gateway-pop/golang/client/client.go [67:175]
func (client *Client) ModifyRequest(context *spi.InterceptorContext, attributeMap *spi.AttributeMap) (_err error) {
request := context.Request
config := context.Configuration
date := openapiutil.GetTimestamp()
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": date,
"x-acs-signature-nonce": util.GetNonce(),
"accept": tea.String("application/json"),
}, request.Headers)
signatureAlgorithm := util.DefaultString(request.SignatureAlgorithm, client.Sha256)
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")
}
}
}
if tea.BoolValue(util.EqualString(signatureAlgorithm, client.Sm3)) {
request.Headers["x-acs-content-sm3"] = hashedRequestPayload
} else {
request.Headers["x-acs-content-sha256"] = hashedRequestPayload
}
if !tea.BoolValue(util.EqualString(request.AuthType, tea.String("Anonymous"))) {
credential := request.Credential
if tea.BoolValue(util.IsUnset(credential)) {
_err = tea.NewSDKError(map[string]interface{}{
"code": "ParameterMissing",
"message": "'config.credential' can not be unset",
})
return _err
}
credentialModel, _err := credential.GetCredential()
if _err != nil {
return _err
}
if !tea.BoolValue(util.Empty(credentialModel.ProviderName)) {
request.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName
}
authType := credentialModel.Type
if tea.BoolValue(util.EqualString(authType, tea.String("bearer"))) {
bearerToken := credential.GetBearerToken()
request.Headers["x-acs-bearer-token"] = bearerToken
request.Headers["x-acs-signature-type"] = tea.String("BEARERTOKEN")
request.Headers["Authorization"] = tea.String("Bearer " + tea.StringValue(bearerToken))
} else if tea.BoolValue(util.EqualString(authType, tea.String("id_token"))) {
idToken := credentialModel.SecurityToken
request.Headers["x-acs-zero-trust-idtoken"] = idToken
} else {
accessKeyId := credentialModel.AccessKeyId
accessKeySecret := credentialModel.AccessKeySecret
securityToken := credentialModel.SecurityToken
if !tea.BoolValue(util.Empty(securityToken)) {
request.Headers["x-acs-accesskey-id"] = accessKeyId
request.Headers["x-acs-security-token"] = securityToken
}
dateNew := string_.SubString(date, tea.Int(0), tea.Int(10))
dateNew = string_.Replace(dateNew, tea.String("-"), tea.String(""), nil)
region := client.GetRegion(request.ProductId, config.Endpoint, config.RegionId)
signingkey, _err := client.GetSigningkey(signatureAlgorithm, accessKeySecret, request.ProductId, region, dateNew)
if _err != nil {
return _err
}
request.Headers["Authorization"], _err = client.GetAuthorization(request.Pathname, request.Method, request.Query, request.Headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew)
if _err != nil {
return _err
}
}
}
return _err
}