func()

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
}