alibabacloud-gateway-pop/csharp/core/Client.cs (661 lines of code) (raw):
// This file is auto-generated, don't edit it. Thanks.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Tea;
using Tea.Utils;
namespace AlibabaCloud.GatewayPop
{
public class Client : AlibabaCloud.GatewaySpi.Client
{
protected string _endpointSuffix;
protected string _signatureTypePrefix;
protected string _signPrefix;
protected string _sha256;
protected string _sm3;
public Client(): base()
{
// CLOUD4-
this._signatureTypePrefix = "ACS4-";
// cloud_v4
this._signPrefix = "aliyun_v4";
this._endpointSuffix = "aliyuncs.com";
this._sha256 = "" + _signatureTypePrefix + "HMAC-SHA256";
this._sm3 = "" + _signatureTypePrefix + "HMAC-SM3";
}
public void ModifyConfiguration(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
Dictionary<string, string> attributes = attributeMap.Key;
if (!AlibabaCloud.TeaUtil.Common.IsUnset(attributes))
{
this._signatureTypePrefix = attributes.Get("signatureTypePrefix");
this._signPrefix = attributes.Get("signPrefix");
this._endpointSuffix = attributes.Get("endpointSuffix");
this._sha256 = "" + _signatureTypePrefix + "HMAC-SHA256";
this._sm3 = "" + _signatureTypePrefix + "HMAC-SM3";
}
config.Endpoint = GetEndpoint(request.ProductId, config.RegionId, config.EndpointRule, config.Network, config.Suffix, config.EndpointMap, config.Endpoint);
}
public async Task ModifyConfigurationAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
Dictionary<string, string> attributes = attributeMap.Key;
if (!AlibabaCloud.TeaUtil.Common.IsUnset(attributes))
{
this._signatureTypePrefix = attributes.Get("signatureTypePrefix");
this._signPrefix = attributes.Get("signPrefix");
this._endpointSuffix = attributes.Get("endpointSuffix");
this._sha256 = "" + _signatureTypePrefix + "HMAC-SHA256";
this._sm3 = "" + _signatureTypePrefix + "HMAC-SM3";
}
config.Endpoint = GetEndpoint(request.ProductId, config.RegionId, config.EndpointRule, config.Network, config.Suffix, config.EndpointMap, config.Endpoint);
}
public void ModifyRequest(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
string date = AlibabaCloud.OpenApiUtil.Client.GetTimestamp();
request.Headers = TeaConverter.merge<string>
(
new Dictionary<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", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"accept", "application/json"},
},
request.Headers
);
string signatureAlgorithm = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureAlgorithm, _sha256);
string hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(""), signatureAlgorithm));
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Stream))
{
byte[] tmp = AlibabaCloud.TeaUtil.Common.ReadAsBytes(request.Stream);
hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(tmp, signatureAlgorithm));
request.Stream = TeaCore.BytesReadable(tmp);
request.Headers["content-type"] = "application/octet-stream";
}
else
{
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
if (AlibabaCloud.TeaUtil.Common.EqualString(request.ReqBodyType, "json"))
{
string jsonObj = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body);
hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(jsonObj), signatureAlgorithm));
request.Stream = TeaCore.BytesReadable(jsonObj);
request.Headers["content-type"] = "application/json; charset=utf-8";
}
else
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
string formObj = AlibabaCloud.OpenApiUtil.Client.ToForm(m);
hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(formObj), signatureAlgorithm));
request.Stream = TeaCore.BytesReadable(formObj);
request.Headers["content-type"] = "application/x-www-form-urlencoded";
}
}
}
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
request.Headers["x-acs-content-sm3"] = hashedRequestPayload;
}
else
{
request.Headers["x-acs-content-sha256"] = hashedRequestPayload;
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(request.AuthType, "Anonymous"))
{
Aliyun.Credentials.Client credential = request.Credential;
if (AlibabaCloud.TeaUtil.Common.IsUnset(credential))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "ParameterMissing"},
{"message", "'config.credential' can not be unset"},
});
}
Aliyun.Credentials.Models.CredentialModel credentialModel = credential.GetCredential();
if (!AlibabaCloud.TeaUtil.Common.Empty(credentialModel.ProviderName))
{
request.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName;
}
string authType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer"))
{
string bearerToken = credential.GetBearerToken();
request.Headers["x-acs-bearer-token"] = bearerToken;
request.Headers["x-acs-signature-type"] = "BEARERTOKEN";
request.Headers["Authorization"] = "Bearer " + bearerToken;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "id_token"))
{
string idToken = credentialModel.SecurityToken;
request.Headers["x-acs-zero-trust-idtoken"] = idToken;
}
else
{
string accessKeyId = credentialModel.AccessKeyId;
string accessKeySecret = credentialModel.AccessKeySecret;
string securityToken = credentialModel.SecurityToken;
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
{
request.Headers["x-acs-accesskey-id"] = accessKeyId;
request.Headers["x-acs-security-token"] = securityToken;
}
string dateNew = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 10);
dateNew = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateNew, "-", "", null);
string region = GetRegion(request.ProductId, config.Endpoint, config.RegionId);
byte[] signingkey = GetSigningkey(signatureAlgorithm, accessKeySecret, request.ProductId, region, dateNew);
request.Headers["Authorization"] = GetAuthorization(request.Pathname, request.Method, request.Query, request.Headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew);
}
}
}
public async Task ModifyRequestAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
string date = AlibabaCloud.OpenApiUtil.Client.GetTimestamp();
request.Headers = TeaConverter.merge<string>
(
new Dictionary<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", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"accept", "application/json"},
},
request.Headers
);
string signatureAlgorithm = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureAlgorithm, _sha256);
string hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(""), signatureAlgorithm));
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Stream))
{
byte[] tmp = AlibabaCloud.TeaUtil.Common.ReadAsBytes(request.Stream);
hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(tmp, signatureAlgorithm));
request.Stream = TeaCore.BytesReadable(tmp);
request.Headers["content-type"] = "application/octet-stream";
}
else
{
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
if (AlibabaCloud.TeaUtil.Common.EqualString(request.ReqBodyType, "json"))
{
string jsonObj = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body);
hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(jsonObj), signatureAlgorithm));
request.Stream = TeaCore.BytesReadable(jsonObj);
request.Headers["content-type"] = "application/json; charset=utf-8";
}
else
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
string formObj = AlibabaCloud.OpenApiUtil.Client.ToForm(m);
hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(formObj), signatureAlgorithm));
request.Stream = TeaCore.BytesReadable(formObj);
request.Headers["content-type"] = "application/x-www-form-urlencoded";
}
}
}
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
request.Headers["x-acs-content-sm3"] = hashedRequestPayload;
}
else
{
request.Headers["x-acs-content-sha256"] = hashedRequestPayload;
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(request.AuthType, "Anonymous"))
{
Aliyun.Credentials.Client credential = request.Credential;
if (AlibabaCloud.TeaUtil.Common.IsUnset(credential))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "ParameterMissing"},
{"message", "'config.credential' can not be unset"},
});
}
Aliyun.Credentials.Models.CredentialModel credentialModel = await credential.GetCredentialAsync();
if (!AlibabaCloud.TeaUtil.Common.Empty(credentialModel.ProviderName))
{
request.Headers["x-acs-credentials-provider"] = credentialModel.ProviderName;
}
string authType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer"))
{
string bearerToken = credential.GetBearerToken();
request.Headers["x-acs-bearer-token"] = bearerToken;
request.Headers["x-acs-signature-type"] = "BEARERTOKEN";
request.Headers["Authorization"] = "Bearer " + bearerToken;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "id_token"))
{
string idToken = credentialModel.SecurityToken;
request.Headers["x-acs-zero-trust-idtoken"] = idToken;
}
else
{
string accessKeyId = credentialModel.AccessKeyId;
string accessKeySecret = credentialModel.AccessKeySecret;
string securityToken = credentialModel.SecurityToken;
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
{
request.Headers["x-acs-accesskey-id"] = accessKeyId;
request.Headers["x-acs-security-token"] = securityToken;
}
string dateNew = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 10);
dateNew = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateNew, "-", "", null);
string region = GetRegion(request.ProductId, config.Endpoint, config.RegionId);
byte[] signingkey = await GetSigningkeyAsync(signatureAlgorithm, accessKeySecret, request.ProductId, region, dateNew);
request.Headers["Authorization"] = await GetAuthorizationAsync(request.Pathname, request.Method, request.Query, request.Headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew);
}
}
}
public void ModifyResponse(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse response = context.Response;
if (AlibabaCloud.TeaUtil.Common.Is4xx(response.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body);
Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
object requestId = DefaultAny(err.Get("RequestId"), err.Get("requestId"));
if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Headers.Get("x-acs-request-id")))
{
requestId = response.Headers.Get("x-acs-request-id");
}
err["statusCode"] = response.StatusCode;
throw new TeaException(new Dictionary<string, object>
{
{"code", "" + DefaultAny(err.Get("Code"), err.Get("code"))},
{"message", "code: " + response.StatusCode + ", " + DefaultAny(err.Get("Message"), err.Get("message")) + " request id: " + requestId},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualNumber(response.StatusCode, 204))
{
AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "binary"))
{
response.DeserializedBody = response.Body;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "byte"))
{
byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(response.Body);
response.DeserializedBody = byt;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "string"))
{
string str = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body);
response.DeserializedBody = str;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json"))
{
object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body);
Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj);
response.DeserializedBody = res;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body);
response.DeserializedBody = arr;
}
else
{
response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body);
}
}
public async Task ModifyResponseAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse response = context.Response;
if (AlibabaCloud.TeaUtil.Common.Is4xx(response.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body);
Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
object requestId = DefaultAny(err.Get("RequestId"), err.Get("requestId"));
if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Headers.Get("x-acs-request-id")))
{
requestId = response.Headers.Get("x-acs-request-id");
}
err["statusCode"] = response.StatusCode;
throw new TeaException(new Dictionary<string, object>
{
{"code", "" + DefaultAny(err.Get("Code"), err.Get("code"))},
{"message", "code: " + response.StatusCode + ", " + DefaultAny(err.Get("Message"), err.Get("message")) + " request id: " + requestId},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualNumber(response.StatusCode, 204))
{
AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "binary"))
{
response.DeserializedBody = response.Body;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "byte"))
{
byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(response.Body);
response.DeserializedBody = byt;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "string"))
{
string str = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body);
response.DeserializedBody = str;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json"))
{
object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body);
Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj);
response.DeserializedBody = res;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body);
response.DeserializedBody = arr;
}
else
{
response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body);
}
}
public string GetEndpoint(string productId, string regionId, string endpointRule, string network, string suffix, Dictionary<string, string> endpointMap, string endpoint)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint))
{
return endpoint;
}
if (!AlibabaCloud.TeaUtil.Common.IsUnset(endpointMap) && !AlibabaCloud.TeaUtil.Common.Empty(endpointMap.Get(regionId)))
{
return endpointMap.Get(regionId);
}
return AlibabaCloud.EndpointUtil.Common.GetEndpointRules(productId, regionId, endpointRule, network, suffix);
}
public object DefaultAny(object inputValue, object defaultValue)
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(inputValue))
{
return defaultValue;
}
return inputValue;
}
public string GetAuthorization(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, string ak, byte[] signingkey, string product, string region, string date)
{
string signature = GetSignature(pathname, method, query, headers, signatureAlgorithm, payload, signingkey);
List<string> signedHeaders = GetSignedHeaders(headers);
string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";");
return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/" + _signPrefix + "_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
}
public async Task<string> GetAuthorizationAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, string ak, byte[] signingkey, string product, string region, string date)
{
string signature = await GetSignatureAsync(pathname, method, query, headers, signatureAlgorithm, payload, signingkey);
List<string> signedHeaders = await GetSignedHeadersAsync(headers);
string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";");
return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/" + _signPrefix + "_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
}
public string GetSignature(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, byte[] signingkey)
{
string canonicalURI = "/";
if (!AlibabaCloud.TeaUtil.Common.Empty(pathname))
{
canonicalURI = pathname;
}
string stringToSign = "";
string canonicalizedResource = BuildCanonicalizedResource(query);
string canonicalizedHeaders = BuildCanonicalizedHeaders(headers);
List<string> signedHeaders = GetSignedHeaders(headers);
string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";");
stringToSign = "" + method + "\n" + canonicalURI + "\n" + canonicalizedResource + "\n" + canonicalizedHeaders + "\n" + signedHeadersStr + "\n" + payload;
string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(stringToSign), signatureAlgorithm));
stringToSign = "" + signatureAlgorithm + "\n" + hex;
byte[] signature = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(stringToSign, signingkey);
}
return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature);
}
public async Task<string> GetSignatureAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, byte[] signingkey)
{
string canonicalURI = "/";
if (!AlibabaCloud.TeaUtil.Common.Empty(pathname))
{
canonicalURI = pathname;
}
string stringToSign = "";
string canonicalizedResource = await BuildCanonicalizedResourceAsync(query);
string canonicalizedHeaders = await BuildCanonicalizedHeadersAsync(headers);
List<string> signedHeaders = await GetSignedHeadersAsync(headers);
string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";");
stringToSign = "" + method + "\n" + canonicalURI + "\n" + canonicalizedResource + "\n" + canonicalizedHeaders + "\n" + signedHeadersStr + "\n" + payload;
string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(stringToSign), signatureAlgorithm));
stringToSign = "" + signatureAlgorithm + "\n" + hex;
byte[] signature = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(stringToSign, signingkey);
}
return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature);
}
public byte[] GetSigningkey(string signatureAlgorithm, string secret, string product, string region, string date)
{
string sc1 = "" + _signPrefix + secret;
byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(date, sc1);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3Sign(date, sc1);
}
byte[] sc3 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(region, sc2);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(region, sc2);
}
byte[] sc4 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(product, sc3);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(product, sc3);
}
byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("" + _signPrefix + "_request", sc4);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("" + _signPrefix + "_request", sc4);
}
return hmac;
}
public async Task<byte[]> GetSigningkeyAsync(string signatureAlgorithm, string secret, string product, string region, string date)
{
string sc1 = "" + _signPrefix + secret;
byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(date, sc1);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3Sign(date, sc1);
}
byte[] sc3 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(region, sc2);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(region, sc2);
}
byte[] sc4 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(product, sc3);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(product, sc3);
}
byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("" + _signPrefix + "_request", sc4);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("" + _signPrefix + "_request", sc4);
}
return hmac;
}
public string GetRegion(string product, string endpoint, string regionId)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(regionId))
{
return regionId;
}
string region = "center";
if (AlibabaCloud.TeaUtil.Common.Empty(product) || AlibabaCloud.TeaUtil.Common.Empty(endpoint))
{
return region;
}
List<string> strs = AlibabaCloud.DarabonbaString.StringUtil.Split(endpoint, ":", null);
string withoutPort = strs[0];
string preRegion = AlibabaCloud.DarabonbaString.StringUtil.Replace(withoutPort, "." + _endpointSuffix, "", null);
List<string> nodes = AlibabaCloud.DarabonbaString.StringUtil.Split(preRegion, ".", null);
if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(nodes), 2))
{
region = nodes[1];
}
return region;
}
public string BuildCanonicalizedResource(Dictionary<string, string> query)
{
string canonicalizedResource = "";
if (!AlibabaCloud.TeaUtil.Common.IsUnset(query))
{
List<string> queryArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query);
List<string> sortedQueryArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryArray);
string separator = "";
foreach (var key in sortedQueryArray) {
canonicalizedResource = "" + canonicalizedResource + separator + AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(key);
if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(key)))
{
canonicalizedResource = "" + canonicalizedResource + "=" + AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(query.Get(key));
}
separator = "&";
}
}
return canonicalizedResource;
}
public async Task<string> BuildCanonicalizedResourceAsync(Dictionary<string, string> query)
{
string canonicalizedResource = "";
if (!AlibabaCloud.TeaUtil.Common.IsUnset(query))
{
List<string> queryArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query);
List<string> sortedQueryArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryArray);
string separator = "";
foreach (var key in sortedQueryArray) {
canonicalizedResource = "" + canonicalizedResource + separator + AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(key);
if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(key)))
{
canonicalizedResource = "" + canonicalizedResource + "=" + AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(query.Get(key));
}
separator = "&";
}
}
return canonicalizedResource;
}
public string BuildCanonicalizedHeaders(Dictionary<string, string> headers)
{
string canonicalizedHeaders = "";
List<string> sortedHeaders = GetSignedHeaders(headers);
foreach (var header in sortedHeaders) {
canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + AlibabaCloud.DarabonbaString.StringUtil.Trim(headers.Get(header)) + "\n";
}
return canonicalizedHeaders;
}
public async Task<string> BuildCanonicalizedHeadersAsync(Dictionary<string, string> headers)
{
string canonicalizedHeaders = "";
List<string> sortedHeaders = await GetSignedHeadersAsync(headers);
foreach (var header in sortedHeaders) {
canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + AlibabaCloud.DarabonbaString.StringUtil.Trim(headers.Get(header)) + "\n";
}
return canonicalizedHeaders;
}
public List<string> GetSignedHeaders(Dictionary<string, string> headers)
{
List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers);
List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray);
string tmp = "";
string separator = "";
foreach (var key in sortedHeadersArray) {
string lowerKey = AlibabaCloud.DarabonbaString.StringUtil.ToLower(key);
if (AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-acs-") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "host") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-type"))
{
if (!AlibabaCloud.DarabonbaString.StringUtil.Contains(tmp, lowerKey))
{
tmp = "" + tmp + separator + lowerKey;
separator = ";";
}
}
}
return AlibabaCloud.DarabonbaString.StringUtil.Split(tmp, ";", null);
}
public async Task<List<string>> GetSignedHeadersAsync(Dictionary<string, string> headers)
{
List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers);
List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray);
string tmp = "";
string separator = "";
foreach (var key in sortedHeadersArray) {
string lowerKey = AlibabaCloud.DarabonbaString.StringUtil.ToLower(key);
if (AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-acs-") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "host") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-type"))
{
if (!AlibabaCloud.DarabonbaString.StringUtil.Contains(tmp, lowerKey))
{
tmp = "" + tmp + separator + lowerKey;
separator = ";";
}
}
}
return AlibabaCloud.DarabonbaString.StringUtil.Split(tmp, ";", null);
}
}
}