func()

in alibabacloud-gateway-fc/golang/client/client.go [580:648]


func (client *Client) SignRequest(request *HttpRequest, credential credential.Credential) (_result map[string]interface{}, _err error) {
	httpRequest := &HttpRequest{
		Method:      request.Method,
		Path:        request.Path,
		Headers:     request.Headers,
		Body:        request.Body,
		ReqBodyType: request.ReqBodyType,
	}
	httpRequest.Headers["date"] = util.GetDateUTCString()
	httpRequest.Headers["accept"] = tea.String("application/json")
	httpRequest.Headers["content-type"] = tea.String("application/json")
	if !tea.BoolValue(util.IsUnset(request.Body)) {
		if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("json"))) {
			httpRequest.Headers["content-type"] = tea.String("application/json")
		} else if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("form"))) {
			httpRequest.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
		} else if tea.BoolValue(util.EqualString(request.ReqBodyType, tea.String("binary"))) {
			httpRequest.Headers["content-type"] = tea.String("application/octet-stream")
		}

	}

	accessKeyId, _err := credential.GetAccessKeyId()
	if _err != nil {
		return _result, _err
	}

	accessKeySecret, _err := credential.GetAccessKeySecret()
	if _err != nil {
		return _result, _err
	}

	securityToken, _err := credential.GetSecurityToken()
	if _err != nil {
		return _result, _err
	}

	if !tea.BoolValue(util.Empty(securityToken)) {
		httpRequest.Headers["x-fc-security-token"] = securityToken
	}

	resource := request.Path
	contentMd5 := httpRequest.Headers["content-md5"]
	if tea.BoolValue(util.IsUnset(contentMd5)) {
		contentMd5 = tea.String("")
	}

	contentType := httpRequest.Headers["content-type"]
	if tea.BoolValue(util.IsUnset(contentType)) {
		contentType = tea.String("")
	}

	stringToSign := tea.String("")
	canonicalizedResource, _err := client.BuildCanonicalizedResource(resource)
	if _err != nil {
		return _result, _err
	}

	canonicalizedHeaders, _err := client.BuildCanonicalizedHeaders(httpRequest.Headers)
	if _err != nil {
		return _result, _err
	}

	stringToSign = tea.String(tea.StringValue(request.Method) + "\n" + tea.StringValue(util.ToJSONString(contentMd5)) + "\n" + tea.StringValue(util.ToJSONString(contentType)) + "\n" + tea.StringValue(util.ToJSONString(httpRequest.Headers["date"])) + "\n" + tea.StringValue(canonicalizedHeaders) + tea.StringValue(canonicalizedResource))
	signature := encodeutil.Base64EncodeToString(signatureutil.HmacSHA256Sign(stringToSign, accessKeySecret))
	httpRequest.Headers["Authorization"] = tea.String("FC " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(signature))
	_result = httpRequest.Headers
	return _result, _err
}