in alibabacloud-gateway-pds/golang/client/client.go [44:163]
func (client *Client) ModifyRequest(context *spi.InterceptorContext, attributeMap *spi.AttributeMap) (_err error) {
request := context.Request
config := context.Configuration
date := util.GetDateUTCString()
request.Headers = tea.Merge(map[string]*string{
"date": date,
"host": config.Endpoint,
"x-acs-version": request.Version,
"x-acs-action": request.Action,
"user-agent": request.UserAgent,
"x-acs-signature-nonce": util.GetNonce(),
"accept": tea.String("application/json"),
}, request.Headers)
signatureAlgorithm := util.DefaultString(request.SignatureAlgorithm, tea.String("ACS4-HMAC-SHA256"))
signatureVersion := util.DefaultString(request.SignatureVersion, tea.String("v1"))
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(string_.Equals(signatureVersion, tea.String("v4"))) {
if tea.BoolValue(util.EqualString(signatureAlgorithm, tea.String("ACS4-HMAC-SM3"))) {
request.Headers["x-acs-content-sm3"] = hashedRequestPayload
} else {
request.Headers["x-acs-content-sha256"] = hashedRequestPayload
}
} else {
request.Headers["x-acs-signature-method"] = tea.String("HMAC-SHA1")
request.Headers["x-acs-signature-version"] = tea.String("1.0")
}
if !tea.BoolValue(util.EqualString(request.AuthType, tea.String("Anonymous"))) && !tea.BoolValue(util.IsUnset(request.Credential)) {
credential := request.Credential
credentialModel, _err := credential.GetCredential()
if _err != nil {
return _err
}
authType := credentialModel.Type
if tea.BoolValue(util.EqualString(authType, tea.String("bearer"))) {
bearerToken := credentialModel.BearerToken
request.Headers["x-acs-bearer-token"] = bearerToken
request.Headers["Authorization"] = tea.String("Bearer " + tea.StringValue(bearerToken))
} else {
accessKeyId := credentialModel.AccessKeyId
accessKeySecret := credentialModel.AccessKeySecret
securityToken := credentialModel.SecurityToken
if !tea.BoolValue(util.Empty(securityToken)) {
request.Headers["x-acs-security-token"] = securityToken
}
headers := make(map[string]*string)
if !tea.BoolValue(util.IsUnset(request.Headers["content-type"])) {
headers = request.Headers
} else if tea.BoolValue(string_.Equals(request.ReqBodyType, tea.String("formData"))) && tea.BoolValue(string_.Equals(request.Action, tea.String("DownloadFile"))) && tea.BoolValue(string_.Equals(request.Pathname, tea.String("/v2/file/download"))) {
headersArray := map_.KeySet(request.Headers)
for _, key := range headersArray {
headers[tea.StringValue(key)] = request.Headers[tea.StringValue(key)]
}
headers["content-type"] = tea.String("application/x-www-form-urlencoded; charset=UTF-8")
} else {
headers = request.Headers
}
if tea.BoolValue(string_.Equals(signatureVersion, tea.String("v4"))) {
dateNew := string_.SubString(date, tea.Int(0), tea.Int(10))
region := client.GetRegion(config.Endpoint)
signingkey, _err := client.GetSigningkey(signatureAlgorithm, accessKeySecret, region, dateNew)
if _err != nil {
return _err
}
request.Headers["Authorization"], _err = client.GetAuthorizationV4(request.Pathname, request.Method, request.Query, headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew)
if _err != nil {
return _err
}
} else {
request.Headers["Authorization"], _err = client.GetAuthorization(request.Pathname, request.Method, request.Query, headers, accessKeyId, accessKeySecret)
if _err != nil {
return _err
}
}
}
}
return _err
}