in alibabacloud-gateway-sls/golang/client/client.go [56:185]
func (client *Client) ModifyRequest(context *spi.InterceptorContext, attributeMap *spi.AttributeMap) (_err error) {
request := context.Request
hostMap := make(map[string]*string)
if !tea.BoolValue(util.IsUnset(request.HostMap)) {
hostMap = request.HostMap
}
project := hostMap["project"]
config := context.Configuration
credential := request.Credential
credentialModel, _err := credential.GetCredential()
if _err != nil {
return _err
}
accessKeyId := credentialModel.AccessKeyId
accessKeySecret := credentialModel.AccessKeySecret
securityToken := credentialModel.SecurityToken
if !tea.BoolValue(util.Empty(securityToken)) {
request.Headers["x-acs-security-token"] = securityToken
}
signatureVersion := util.DefaultString(request.SignatureVersion, tea.String("v1"))
finalCompressType, _err := client.GetFinalRequestCompressType(request.Action, request.Headers)
if _err != nil {
return _err
}
contentHash := tea.String("")
// get body bytes
var bodyBytes []byte
if !tea.BoolValue(util.IsUnset(request.Body)) {
if tea.BoolValue(string_.Equals(request.ReqBodyType, tea.String("json"))) || tea.BoolValue(string_.Equals(request.ReqBodyType, tea.String("formData"))) {
request.Headers["content-type"] = tea.String("application/json")
bodyStr := util.ToJSONString(request.Body)
bodyBytes = util.ToBytes(bodyStr)
} else if tea.BoolValue(string_.Equals(request.ReqBodyType, tea.String("binary"))) {
// content-type: application/octet-stream
bodyBytes, _err = util.AssertAsBytes(request.Body)
if _err != nil {
return _err
}
}
}
// get body raw size
bodyRawSize := tea.String("0")
rawSizeRef := request.Headers["x-log-bodyrawsize"]
// for php bug, Argument #1 ($value) could not be passed by reference
if !tea.BoolValue(util.IsUnset(rawSizeRef)) {
bodyRawSize = rawSizeRef
} else if !tea.BoolValue(util.IsUnset(request.Body)) {
bodyRawSize = tea.String(tea.ToString(tea.Int64Value(sls_util.BytesLength(bodyBytes))))
}
// compress if needed, and set body and hash
if !tea.BoolValue(util.IsUnset(request.Body)) {
if !tea.BoolValue(util.Empty(finalCompressType)) {
compressed, _err := sls_util.Compress(bodyBytes, finalCompressType)
if _err != nil {
return _err
}
bodyBytes = compressed
}
contentHash, _err = client.MakeContentHash(bodyBytes, signatureVersion)
if _err != nil {
return _err
}
request.Stream = tea.ToReader(bodyBytes)
}
host, _err := client.GetHost(config.Network, project, config.Endpoint)
if _err != nil {
return _err
}
request.Headers = tea.Merge(map[string]*string{
"accept": tea.String("application/json"),
"host": host,
"user-agent": request.UserAgent,
"x-log-apiversion": tea.String("0.6.0"),
}, request.Headers)
request.Headers["x-log-bodyrawsize"] = bodyRawSize
_err = client.SetDefaultAcceptEncoding(request.Action, request.Headers)
if _err != nil {
return _err
}
_err = client.BuildRequest(context)
if _err != nil {
return _err
}
// move param in path to query
if tea.BoolValue(string_.Equals(signatureVersion, tea.String("v4"))) {
if tea.BoolValue(util.Empty(contentHash)) {
contentHash = tea.String("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
}
date, _err := client.GetDateISO8601()
if _err != nil {
return _err
}
request.Headers["x-log-date"] = date
request.Headers["x-log-content-sha256"] = contentHash
request.Headers["authorization"], _err = client.GetAuthorizationV4(context, date, contentHash, accessKeyId, accessKeySecret)
if _err != nil {
return _err
}
return _err
}
if !tea.BoolValue(util.Empty(accessKeyId)) {
request.Headers["x-log-signaturemethod"] = tea.String("hmac-sha256")
}
request.Headers["date"] = util.GetDateUTCString()
request.Headers["content-md5"] = contentHash
request.Headers["authorization"], _err = client.GetAuthorization(request.Pathname, request.Method, request.Query, request.Headers, accessKeyId, accessKeySecret)
if _err != nil {
return _err
}
return _err
}