alibabacloud-gateway-sls/csharp/core/Client.cs (938 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.GatewaySls { public class Client : AlibabaCloud.GatewaySpi.Client { protected Dictionary<string, List<string>> _respBodyDecompressType; protected Dictionary<string, List<string>> _reqBodyCompressType; public Client(): base() { this._respBodyDecompressType = new Dictionary<string, List<string>> { {"PullLogs", new List<string> { "zstd", "lz4", "gzip" }}, {"GetLogsV2", new List<string> { "zstd", "lz4", "gzip" }}, {"PreviewSPL", new List<string> { "lz4" }}, }; this._reqBodyCompressType = new Dictionary<string, List<string>> { {"PutLogs", new List<string> { "zstd", "lz4", "deflate" }}, {"PreviewSPL", new List<string> { "lz4" }}, }; } public void ModifyConfiguration(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; config.Endpoint = GetEndpoint(config.RegionId, config.Network, config.Endpoint); } #pragma warning disable 1998 public async Task ModifyConfigurationAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; config.Endpoint = await GetEndpointAsync(config.RegionId, config.Network, config.Endpoint); } public void ModifyRequest(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; Dictionary<string, string> hostMap = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.HostMap)) { hostMap = request.HostMap; } string project = hostMap.Get("project"); AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; Aliyun.Credentials.Client credential = request.Credential; Aliyun.Credentials.Models.CredentialModel credentialModel = credential.GetCredential(); string accessKeyId = credentialModel.AccessKeyId; string accessKeySecret = credentialModel.AccessKeySecret; string securityToken = credentialModel.SecurityToken; if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken)) { request.Headers["x-acs-security-token"] = securityToken; } string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1"); string finalCompressType = GetFinalRequestCompressType(request.Action, request.Headers); string contentHash = ""; // get body bytes byte[] bodyBytes = null; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "json") || AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData")) { request.Headers["content-type"] = "application/json"; string bodyStr = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body); bodyBytes = AlibabaCloud.TeaUtil.Common.ToBytes(bodyStr); } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "binary")) { // content-type: application/octet-stream bodyBytes = AlibabaCloud.TeaUtil.Common.AssertAsBytes(request.Body); } } // get body raw size string bodyRawSize = "0"; string rawSizeRef = request.Headers.Get("x-log-bodyrawsize"); // for php bug, Argument #1 ($value) could not be passed by reference if (!AlibabaCloud.TeaUtil.Common.IsUnset(rawSizeRef)) { bodyRawSize = rawSizeRef; } else if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { bodyRawSize = "" + AlibabaCloud.GatewaySls_Util.Client.BytesLength(bodyBytes); } // compress if needed, and set body and hash if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (!AlibabaCloud.TeaUtil.Common.Empty(finalCompressType)) { byte[] compressed = AlibabaCloud.GatewaySls_Util.Client.Compress(bodyBytes, finalCompressType); bodyBytes = compressed; } contentHash = MakeContentHash(bodyBytes, signatureVersion); request.Stream = TeaCore.BytesReadable(bodyBytes); } string host = GetHost(config.Network, project, config.Endpoint); request.Headers = TeaConverter.merge<string> ( new Dictionary<string, string>() { {"accept", "application/json"}, {"host", host}, {"user-agent", request.UserAgent}, {"x-log-apiversion", "0.6.0"}, }, request.Headers ); request.Headers["x-log-bodyrawsize"] = bodyRawSize; SetDefaultAcceptEncoding(request.Action, request.Headers); BuildRequest(context); // move param in path to query if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { if (AlibabaCloud.TeaUtil.Common.Empty(contentHash)) { contentHash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; } string date = GetDateISO8601(); request.Headers["x-log-date"] = date; request.Headers["x-log-content-sha256"] = contentHash; request.Headers["authorization"] = GetAuthorizationV4(context, date, contentHash, accessKeyId, accessKeySecret); return ; } if (!AlibabaCloud.TeaUtil.Common.Empty(accessKeyId)) { request.Headers["x-log-signaturemethod"] = "hmac-sha256"; } request.Headers["date"] = AlibabaCloud.TeaUtil.Common.GetDateUTCString(); request.Headers["content-md5"] = contentHash; request.Headers["authorization"] = GetAuthorization(request.Pathname, request.Method, request.Query, request.Headers, accessKeyId, accessKeySecret); } public async Task ModifyRequestAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; Dictionary<string, string> hostMap = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.HostMap)) { hostMap = request.HostMap; } string project = hostMap.Get("project"); AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; Aliyun.Credentials.Client credential = request.Credential; Aliyun.Credentials.Models.CredentialModel credentialModel = await credential.GetCredentialAsync(); string accessKeyId = credentialModel.AccessKeyId; string accessKeySecret = credentialModel.AccessKeySecret; string securityToken = credentialModel.SecurityToken; if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken)) { request.Headers["x-acs-security-token"] = securityToken; } string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1"); string finalCompressType = await GetFinalRequestCompressTypeAsync(request.Action, request.Headers); string contentHash = ""; // get body bytes byte[] bodyBytes = null; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "json") || AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData")) { request.Headers["content-type"] = "application/json"; string bodyStr = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body); bodyBytes = AlibabaCloud.TeaUtil.Common.ToBytes(bodyStr); } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "binary")) { // content-type: application/octet-stream bodyBytes = AlibabaCloud.TeaUtil.Common.AssertAsBytes(request.Body); } } // get body raw size string bodyRawSize = "0"; string rawSizeRef = request.Headers.Get("x-log-bodyrawsize"); // for php bug, Argument #1 ($value) could not be passed by reference if (!AlibabaCloud.TeaUtil.Common.IsUnset(rawSizeRef)) { bodyRawSize = rawSizeRef; } else if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { bodyRawSize = "" + AlibabaCloud.GatewaySls_Util.Client.BytesLength(bodyBytes); } // compress if needed, and set body and hash if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (!AlibabaCloud.TeaUtil.Common.Empty(finalCompressType)) { byte[] compressed = AlibabaCloud.GatewaySls_Util.Client.Compress(bodyBytes, finalCompressType); bodyBytes = compressed; } contentHash = await MakeContentHashAsync(bodyBytes, signatureVersion); request.Stream = TeaCore.BytesReadable(bodyBytes); } string host = await GetHostAsync(config.Network, project, config.Endpoint); request.Headers = TeaConverter.merge<string> ( new Dictionary<string, string>() { {"accept", "application/json"}, {"host", host}, {"user-agent", request.UserAgent}, {"x-log-apiversion", "0.6.0"}, }, request.Headers ); request.Headers["x-log-bodyrawsize"] = bodyRawSize; await SetDefaultAcceptEncodingAsync(request.Action, request.Headers); await BuildRequestAsync(context); // move param in path to query if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { if (AlibabaCloud.TeaUtil.Common.Empty(contentHash)) { contentHash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; } string date = await GetDateISO8601Async(); request.Headers["x-log-date"] = date; request.Headers["x-log-content-sha256"] = contentHash; request.Headers["authorization"] = await GetAuthorizationV4Async(context, date, contentHash, accessKeyId, accessKeySecret); return ; } if (!AlibabaCloud.TeaUtil.Common.Empty(accessKeyId)) { request.Headers["x-log-signaturemethod"] = "hmac-sha256"; } request.Headers["date"] = AlibabaCloud.TeaUtil.Common.GetDateUTCString(); request.Headers["content-md5"] = contentHash; request.Headers["authorization"] = await GetAuthorizationAsync(request.Pathname, request.Method, request.Query, request.Headers, accessKeyId, accessKeySecret); } public string GetFinalRequestCompressType(string action, Dictionary<string, string> headers) { string compressType = headers.Get("x-log-compresstype"); string rawSize = headers.Get("x-log-bodyrawsize"); // for php bug, Argument #1 ($value) could not be passed by reference // 1. already compressed, has x-log-compresstype and x-log-bodyrawsize in header, we dont need compress here if (!AlibabaCloud.TeaUtil.Common.IsUnset(compressType) && !AlibabaCloud.TeaUtil.Common.IsUnset(rawSize)) { return ""; } // 2. not compressed, but has x-log-compresstype in header, we need compress here if (!AlibabaCloud.TeaUtil.Common.IsUnset(compressType)) { return compressType; } // 3. not compressed, in pre-defined api list, try use default supported compress type in order List<string> encodings = _reqBodyCompressType.Get(action); if (!AlibabaCloud.TeaUtil.Common.IsUnset(encodings)) { foreach (var encoding in encodings) { if (AlibabaCloud.GatewaySls_Util.Client.IsCompressorAvailable(encoding)) { headers["x-log-compresstype"] = encoding; // set header x-log-compresstype return encoding; } } } // 4. otherwise we dont need compress here return ""; } public async Task<string> GetFinalRequestCompressTypeAsync(string action, Dictionary<string, string> headers) { string compressType = headers.Get("x-log-compresstype"); string rawSize = headers.Get("x-log-bodyrawsize"); // for php bug, Argument #1 ($value) could not be passed by reference // 1. already compressed, has x-log-compresstype and x-log-bodyrawsize in header, we dont need compress here if (!AlibabaCloud.TeaUtil.Common.IsUnset(compressType) && !AlibabaCloud.TeaUtil.Common.IsUnset(rawSize)) { return ""; } // 2. not compressed, but has x-log-compresstype in header, we need compress here if (!AlibabaCloud.TeaUtil.Common.IsUnset(compressType)) { return compressType; } // 3. not compressed, in pre-defined api list, try use default supported compress type in order List<string> encodings = _reqBodyCompressType.Get(action); if (!AlibabaCloud.TeaUtil.Common.IsUnset(encodings)) { foreach (var encoding in encodings) { if (AlibabaCloud.GatewaySls_Util.Client.IsCompressorAvailable(encoding)) { headers["x-log-compresstype"] = encoding; // set header x-log-compresstype return encoding; } } } // 4. otherwise we dont need compress here return ""; } public void SetDefaultAcceptEncoding(string action, Dictionary<string, string> headers) { string acceptEncoding = headers.Get("Accept-Encoding"); // for php warning, dont rm this line if (!AlibabaCloud.TeaUtil.Common.IsUnset(acceptEncoding)) { return ; } List<string> encodings = _respBodyDecompressType.Get(action); if (!AlibabaCloud.TeaUtil.Common.IsUnset(encodings)) { foreach (var c in encodings) { if (AlibabaCloud.GatewaySls_Util.Client.IsDecompressorAvailable(c)) { headers["Accept-Encoding"] = c; return ; } } } } public async Task SetDefaultAcceptEncodingAsync(string action, Dictionary<string, string> headers) { string acceptEncoding = headers.Get("Accept-Encoding"); // for php warning, dont rm this line if (!AlibabaCloud.TeaUtil.Common.IsUnset(acceptEncoding)) { return ; } List<string> encodings = _respBodyDecompressType.Get(action); if (!AlibabaCloud.TeaUtil.Common.IsUnset(encodings)) { foreach (var c in encodings) { if (AlibabaCloud.GatewaySls_Util.Client.IsDecompressorAvailable(c)) { headers["Accept-Encoding"] = c; return ; } } } } public string MakeContentHash(byte[] content, string signatureVersion) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { if (AlibabaCloud.TeaUtil.Common.IsUnset(content) || AlibabaCloud.TeaUtil.Common.EqualString("" + AlibabaCloud.GatewaySls_Util.Client.BytesLength(content), "0")) { return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; } return AlibabaCloud.DarabonbaString.StringUtil.ToLower(AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(content, "SLS4-HMAC-SHA256"))); } return AlibabaCloud.DarabonbaString.StringUtil.ToUpper(AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaSignatureUtil.Signer.MD5SignForBytes(content))); } public async Task<string> MakeContentHashAsync(byte[] content, string signatureVersion) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { if (AlibabaCloud.TeaUtil.Common.IsUnset(content) || AlibabaCloud.TeaUtil.Common.EqualString("" + AlibabaCloud.GatewaySls_Util.Client.BytesLength(content), "0")) { return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; } return AlibabaCloud.DarabonbaString.StringUtil.ToLower(AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(content, "SLS4-HMAC-SHA256"))); } return AlibabaCloud.DarabonbaString.StringUtil.ToUpper(AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaSignatureUtil.Signer.MD5SignForBytes(content))); } 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 error = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); Dictionary<string, object> resMap = AlibabaCloud.TeaUtil.Common.AssertAsMap(error); throw new TeaException(new Dictionary<string, object> { {"code", resMap.Get("errorCode")}, {"message", resMap.Get("errorMessage")}, {"accessDeniedDetail", resMap.Get("accessDeniedDetail")}, {"data", new Dictionary<string, object> { {"httpCode", response.StatusCode}, {"requestId", response.Headers.Get("x-log-requestid")}, {"statusCode", response.StatusCode}, }}, }); } if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Body)) { string bodyrawSize = response.Headers.Get("x-log-bodyrawsize"); string compressType = response.Headers.Get("x-log-compresstype"); Stream uncompressedData = response.Body; if (!AlibabaCloud.TeaUtil.Common.IsUnset(bodyrawSize) && !AlibabaCloud.TeaUtil.Common.IsUnset(compressType)) { uncompressedData = AlibabaCloud.GatewaySls_Util.Client.ReadAndUncompressBlock(response.Body, compressType, bodyrawSize); } if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "binary")) { response.DeserializedBody = uncompressedData; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "byte")) { byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(uncompressedData); response.DeserializedBody = byt; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "string")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(uncompressedData); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json")) { object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(uncompressedData); // var res = Util.assertAsMap(obj); response.DeserializedBody = obj; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "array")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsJSON(uncompressedData); } else { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(uncompressedData); } } } 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 error = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); Dictionary<string, object> resMap = AlibabaCloud.TeaUtil.Common.AssertAsMap(error); throw new TeaException(new Dictionary<string, object> { {"code", resMap.Get("errorCode")}, {"message", resMap.Get("errorMessage")}, {"accessDeniedDetail", resMap.Get("accessDeniedDetail")}, {"data", new Dictionary<string, object> { {"httpCode", response.StatusCode}, {"requestId", response.Headers.Get("x-log-requestid")}, {"statusCode", response.StatusCode}, }}, }); } if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Body)) { string bodyrawSize = response.Headers.Get("x-log-bodyrawsize"); string compressType = response.Headers.Get("x-log-compresstype"); Stream uncompressedData = response.Body; if (!AlibabaCloud.TeaUtil.Common.IsUnset(bodyrawSize) && !AlibabaCloud.TeaUtil.Common.IsUnset(compressType)) { uncompressedData = AlibabaCloud.GatewaySls_Util.Client.ReadAndUncompressBlock(response.Body, compressType, bodyrawSize); } if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "binary")) { response.DeserializedBody = uncompressedData; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "byte")) { byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(uncompressedData); response.DeserializedBody = byt; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "string")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(uncompressedData); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json")) { object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(uncompressedData); // var res = Util.assertAsMap(obj); response.DeserializedBody = obj; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "array")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsJSON(uncompressedData); } else { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(uncompressedData); } } } public string GetEndpoint(string regionId, string network, string endpoint) { if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { return endpoint; } if (AlibabaCloud.TeaUtil.Common.Empty(regionId)) { regionId = "cn-hangzhou"; } if (!AlibabaCloud.TeaUtil.Common.Empty(network)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "intranet")) { return "" + regionId + "-intranet.log.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "accelerate")) { return "log-global.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "share")) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(regionId, "cn-hangzhou-corp") || AlibabaCloud.DarabonbaString.StringUtil.Equals(regionId, "cn-shanghai-corp")) { return "" + regionId + ".sls.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(regionId, "cn-zhangbei-corp")) { return "zhangbei-corp-share.log.aliyuncs.com"; } return "" + regionId + "-share.log.aliyuncs.com"; } } return "" + regionId + ".log.aliyuncs.com"; } public async Task<string> GetEndpointAsync(string regionId, string network, string endpoint) { if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { return endpoint; } if (AlibabaCloud.TeaUtil.Common.Empty(regionId)) { regionId = "cn-hangzhou"; } if (!AlibabaCloud.TeaUtil.Common.Empty(network)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "intranet")) { return "" + regionId + "-intranet.log.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "accelerate")) { return "log-global.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "share")) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(regionId, "cn-hangzhou-corp") || AlibabaCloud.DarabonbaString.StringUtil.Equals(regionId, "cn-shanghai-corp")) { return "" + regionId + ".sls.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(regionId, "cn-zhangbei-corp")) { return "zhangbei-corp-share.log.aliyuncs.com"; } return "" + regionId + "-share.log.aliyuncs.com"; } } return "" + regionId + ".log.aliyuncs.com"; } public string GetHost(string network, string project, string endpoint) { if (AlibabaCloud.TeaUtil.Common.IsUnset(project)) { return endpoint; } return "" + project + "." + endpoint; } public async Task<string> GetHostAsync(string network, string project, string endpoint) { if (AlibabaCloud.TeaUtil.Common.IsUnset(project)) { return endpoint; } return "" + project + "." + endpoint; } public string GetAuthorization(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string ak, string secret) { string sign = GetSignature(pathname, method, query, headers, secret); return "LOG " + ak + ":" + sign; } public async Task<string> GetAuthorizationAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string ak, string secret) { string sign = await GetSignatureAsync(pathname, method, query, headers, secret); return "LOG " + ak + ":" + sign; } public string GetSignature(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { string resource = pathname; string stringToSign = ""; string canonicalizedResource = BuildCanonicalizedResource(resource, query); string canonicalizedHeaders = BuildCanonicalizedHeaders(headers); stringToSign = "" + method + "\n" + canonicalizedHeaders + canonicalizedResource; return AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(stringToSign, secret)); } public async Task<string> GetSignatureAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { string resource = pathname; string stringToSign = ""; string canonicalizedResource = await BuildCanonicalizedResourceAsync(resource, query); string canonicalizedHeaders = await BuildCanonicalizedHeadersAsync(headers); stringToSign = "" + method + "\n" + canonicalizedHeaders + canonicalizedResource; return AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(stringToSign, secret)); } public string BuildCanonicalizedResource(string pathname, Dictionary<string, string> query) { string canonicalizedResource = pathname; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query)) { List<string> queryList = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query); List<string> sortedParams = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryList); string separator = "?"; foreach (var paramName in sortedParams) { canonicalizedResource = "" + canonicalizedResource + separator + paramName; string paramValue = query.Get(paramName); if (!AlibabaCloud.TeaUtil.Common.IsUnset(paramValue)) { canonicalizedResource = "" + canonicalizedResource + "=" + paramValue; } separator = "&"; } } return canonicalizedResource; } public async Task<string> BuildCanonicalizedResourceAsync(string pathname, Dictionary<string, string> query) { string canonicalizedResource = pathname; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query)) { List<string> queryList = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query); List<string> sortedParams = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryList); string separator = "?"; foreach (var paramName in sortedParams) { canonicalizedResource = "" + canonicalizedResource + separator + paramName; string paramValue = query.Get(paramName); if (!AlibabaCloud.TeaUtil.Common.IsUnset(paramValue)) { canonicalizedResource = "" + canonicalizedResource + "=" + paramValue; } separator = "&"; } } return canonicalizedResource; } public string BuildCanonicalizedHeaders(Dictionary<string, string> headers) { string canonicalizedHeaders = ""; string contentType = headers.Get("content-type"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentType)) { contentType = ""; } string contentMd5 = headers.Get("content-md5"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentMd5)) { contentMd5 = ""; } canonicalizedHeaders = "" + canonicalizedHeaders + contentMd5 + "\n" + contentType + "\n" + headers.Get("date") + "\n"; List<string> keys = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeaders = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(keys); foreach (var header in sortedHeaders) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(AlibabaCloud.DarabonbaString.StringUtil.ToLower(header), "x-log-") || AlibabaCloud.DarabonbaString.StringUtil.Contains(AlibabaCloud.DarabonbaString.StringUtil.ToLower(header), "x-acs-")) { canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + headers.Get(header) + "\n"; } } return canonicalizedHeaders; } public async Task<string> BuildCanonicalizedHeadersAsync(Dictionary<string, string> headers) { string canonicalizedHeaders = ""; string contentType = headers.Get("content-type"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentType)) { contentType = ""; } string contentMd5 = headers.Get("content-md5"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentMd5)) { contentMd5 = ""; } canonicalizedHeaders = "" + canonicalizedHeaders + contentMd5 + "\n" + contentType + "\n" + headers.Get("date") + "\n"; List<string> keys = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeaders = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(keys); foreach (var header in sortedHeaders) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(AlibabaCloud.DarabonbaString.StringUtil.ToLower(header), "x-log-") || AlibabaCloud.DarabonbaString.StringUtil.Contains(AlibabaCloud.DarabonbaString.StringUtil.ToLower(header), "x-acs-")) { canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + headers.Get(header) + "\n"; } } return canonicalizedHeaders; } public void BuildRequest(AlibabaCloud.GatewaySpi.Models.InterceptorContext context) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; string resource = request.Pathname; if (!AlibabaCloud.TeaUtil.Common.Empty(resource)) { List<string> paths = AlibabaCloud.DarabonbaString.StringUtil.Split(resource, "?", 2); resource = paths[0]; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(paths), 2)) { List<string> params_ = AlibabaCloud.DarabonbaString.StringUtil.Split(paths[1], "&", null); foreach (var sub in params_) { List<string> item = AlibabaCloud.DarabonbaString.StringUtil.Split(sub, "=", null); string key = item[0]; string value = null; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(item), 2)) { value = item[1]; } request.Query[key] = value; } } } request.Pathname = resource; } public async Task BuildRequestAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; string resource = request.Pathname; if (!AlibabaCloud.TeaUtil.Common.Empty(resource)) { List<string> paths = AlibabaCloud.DarabonbaString.StringUtil.Split(resource, "?", 2); resource = paths[0]; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(paths), 2)) { List<string> params_ = AlibabaCloud.DarabonbaString.StringUtil.Split(paths[1], "&", null); foreach (var sub in params_) { List<string> item = AlibabaCloud.DarabonbaString.StringUtil.Split(sub, "=", null); string key = item[0]; string value = null; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(item), 2)) { value = item[1]; } request.Query[key] = value; } } } request.Pathname = resource; } public string GetAuthorizationV4(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, string date, string contentHash, string accessKeyId, string accessKeySecret) { string region = GetRegion(context); string headerStr = GetSignedHeaderStrV4(context.Request.Headers); string dateShort = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 8); dateShort = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateShort, "T", "", null); // for fix php sdk bug string scope = "" + dateShort + "/" + region + "/sls/aliyun_v4_request"; byte[] signingkey = GetSigningkeyV4("SLS4-HMAC-SHA256", accessKeySecret, region, dateShort); string signature = GetSignatureV4(context, "SLS4-HMAC-SHA256", headerStr, date, scope, contentHash, signingkey); return "" + "SLS4-HMAC-SHA256" + " Credential=" + accessKeyId + "/" + scope + ",Signature=" + signature; } public async Task<string> GetAuthorizationV4Async(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, string date, string contentHash, string accessKeyId, string accessKeySecret) { string region = await GetRegionAsync(context); string headerStr = await GetSignedHeaderStrV4Async(context.Request.Headers); string dateShort = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 8); dateShort = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateShort, "T", "", null); // for fix php sdk bug string scope = "" + dateShort + "/" + region + "/sls/aliyun_v4_request"; byte[] signingkey = await GetSigningkeyV4Async("SLS4-HMAC-SHA256", accessKeySecret, region, dateShort); string signature = await GetSignatureV4Async(context, "SLS4-HMAC-SHA256", headerStr, date, scope, contentHash, signingkey); return "" + "SLS4-HMAC-SHA256" + " Credential=" + accessKeyId + "/" + scope + ",Signature=" + signature; } public byte[] GetSigningkeyV4(string signatureAlgorithm, string secret, string region, string date) { string sc1 = "aliyun_v4" + secret; byte[] sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(date, sc1); byte[] sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(region, sc2); byte[] sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("sls", sc3); return AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4); } public async Task<byte[]> GetSigningkeyV4Async(string signatureAlgorithm, string secret, string region, string date) { string sc1 = "aliyun_v4" + secret; byte[] sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(date, sc1); byte[] sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(region, sc2); byte[] sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("sls", sc3); return AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4); } public string GetSignatureV4(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, string signatureAlgorithm, string signedHeaderStr, string date, string scope, string contentSha256, byte[] signingkey) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; string canonicalURI = "/"; if (!AlibabaCloud.TeaUtil.Common.Empty(request.Pathname)) { canonicalURI = request.Pathname; } string resources = BuildCanonicalizedResourceV4(request.Query); string headers = BuildCanonicalizedHeadersV4(request.Headers, signedHeaderStr); string stringToHash = "" + request.Method + "\n" + canonicalURI + "\n" + resources + "\n" + headers + "\n" + signedHeaderStr + "\n" + contentSha256; string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(stringToHash), signatureAlgorithm)); string stringToSign = "" + signatureAlgorithm + "\n" + date + "\n" + scope + "\n" + hex; byte[] signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey); return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature); } public async Task<string> GetSignatureV4Async(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, string signatureAlgorithm, string signedHeaderStr, string date, string scope, string contentSha256, byte[] signingkey) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; string canonicalURI = "/"; if (!AlibabaCloud.TeaUtil.Common.Empty(request.Pathname)) { canonicalURI = request.Pathname; } string resources = await BuildCanonicalizedResourceV4Async(request.Query); string headers = await BuildCanonicalizedHeadersV4Async(request.Headers, signedHeaderStr); string stringToHash = "" + request.Method + "\n" + canonicalURI + "\n" + resources + "\n" + headers + "\n" + signedHeaderStr + "\n" + contentSha256; string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(stringToHash), signatureAlgorithm)); string stringToSign = "" + signatureAlgorithm + "\n" + date + "\n" + scope + "\n" + hex; byte[] signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey); return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature); } public string BuildCanonicalizedResourceV4(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 + 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> BuildCanonicalizedResourceV4Async(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 + key; if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(key))) { canonicalizedResource = "" + canonicalizedResource + "=" + AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(query.Get(key)); } separator = "&"; } } return canonicalizedResource; } public string BuildCanonicalizedHeadersV4(Dictionary<string, string> headers, string signedHeaderStr) { string canonicalizedHeaders = ""; List<string> signedHeaders = AlibabaCloud.DarabonbaString.StringUtil.Split(signedHeaderStr, ";", null); foreach (var header in signedHeaders) { canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + AlibabaCloud.DarabonbaString.StringUtil.Trim(headers.Get(header)) + "\n"; } return canonicalizedHeaders; } public async Task<string> BuildCanonicalizedHeadersV4Async(Dictionary<string, string> headers, string signedHeaderStr) { string canonicalizedHeaders = ""; List<string> signedHeaders = AlibabaCloud.DarabonbaString.StringUtil.Split(signedHeaderStr, ";", null); foreach (var header in signedHeaders) { canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + AlibabaCloud.DarabonbaString.StringUtil.Trim(headers.Get(header)) + "\n"; } return canonicalizedHeaders; } public string GetSignedHeaderStrV4(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-log-") || AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-acs-") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "host") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-type")) { tmp = "" + tmp + separator + lowerKey; separator = ";"; } } return tmp; } public async Task<string> GetSignedHeaderStrV4Async(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-log-") || AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-acs-") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "host") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-type")) { tmp = "" + tmp + separator + lowerKey; separator = ";"; } } return tmp; } public string GetRegion(AlibabaCloud.GatewaySpi.Models.InterceptorContext context) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; if (!AlibabaCloud.TeaUtil.Common.IsUnset(config.RegionId) && !AlibabaCloud.TeaUtil.Common.Empty(config.RegionId)) { return config.RegionId; } // try parse region from endpoint // do not use String.subString, subString has bug in php implementation string region = AlibabaCloud.DarabonbaString.StringUtil.Replace(config.Endpoint, ".log.aliyuncs.com", "", null); region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, ".sls.aliyuncs.com", "", null); if (AlibabaCloud.DarabonbaString.StringUtil.Equals(region, config.Endpoint)) { throw new TeaException(new Dictionary<string, string> { {"code", "ClientConfigError"}, {"message", "The regionId configuration of sls client is missing."}, }); } region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, "-share", "", null); region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, "-intranet", "", null); region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, "-vpc", "", null); return region; } public async Task<string> GetRegionAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; if (!AlibabaCloud.TeaUtil.Common.IsUnset(config.RegionId) && !AlibabaCloud.TeaUtil.Common.Empty(config.RegionId)) { return config.RegionId; } // try parse region from endpoint // do not use String.subString, subString has bug in php implementation string region = AlibabaCloud.DarabonbaString.StringUtil.Replace(config.Endpoint, ".log.aliyuncs.com", "", null); region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, ".sls.aliyuncs.com", "", null); if (AlibabaCloud.DarabonbaString.StringUtil.Equals(region, config.Endpoint)) { throw new TeaException(new Dictionary<string, string> { {"code", "ClientConfigError"}, {"message", "The regionId configuration of sls client is missing."}, }); } region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, "-share", "", null); region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, "-intranet", "", null); region = AlibabaCloud.DarabonbaString.StringUtil.Replace(region, "-vpc", "", null); return region; } // format: YYYYMMDDTHHMMSSZ public string GetDateISO8601() { string date = AlibabaCloud.OpenApiUtil.Client.GetTimestamp(); // 2024-02-04T11:31:58Z date = AlibabaCloud.DarabonbaString.StringUtil.Replace(date, "-", "", null); return AlibabaCloud.DarabonbaString.StringUtil.Replace(date, ":", "", null); } // format: YYYYMMDDTHHMMSSZ public async Task<string> GetDateISO8601Async() { string date = AlibabaCloud.OpenApiUtil.Client.GetTimestamp(); // 2024-02-04T11:31:58Z date = AlibabaCloud.DarabonbaString.StringUtil.Replace(date, "-", "", null); return AlibabaCloud.DarabonbaString.StringUtil.Replace(date, ":", "", null); } #pragma warning restore 1998 } }