Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/pop_csharp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,22 @@
jobs:
build:

runs-on: ubuntu-latest
runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
uses: actions/setup-dotnet@v4
with:
dotnet-version: 2.2.207
dotnet-version: '8.x'
- name: install altcover
run: cd core/ && dotnet tool install --global altcover.visualizer --version 8.6.14
- name: Install dependencies
run: cd core/ && dotnet restore
- name: Build
run: cd core/ && dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test tests/ /p:AltCover=true
- name: CodeCov
run: bash <(curl -s https://codecov.io/bash) -cF csharp

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

2 changes: 1 addition & 1 deletion .github/workflows/pop_java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
matrix:
# test against latest update of each major Java version, as well as specific updates of LTS versions:
# 20, 21还不支持,报错是Source option 7 is no longer supported. Use 8 or later.
java: [7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19]
java: [8, 11, 17]
fail-fast: false

steps:
Expand Down
6 changes: 1 addition & 5 deletions .github/workflows/pop_python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: pip install pytest==6.2.5 coverage==5.5 importlib-metadata==1.7.0 zipp==2.2.1 typing-extensions==3.10.0.2 && python setup.py install
if: matrix.python-version == '3.7'
- name: Install dependencies
run: python -m pip install setuptools && python setup.py install && pip install pytest coverage
if: matrix.python-version != '3.7'
run: pip install setuptools urllib3==1.26.20 alibabacloud-tea coverage pytest alibabacloud-credentials==0.3.6 && python setup.py install
- name: Test with unittest
run: |
coverage run --source="./alibabacloud_tea_util" -m pytest tests/test_*
Expand Down
96 changes: 74 additions & 22 deletions alibabacloud-gateway-pop/csharp/core/Client.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,53 @@
{
public class Client : AlibabaCloud.GatewaySpi.Client
{
protected string _endpointSuffix;
protected string _signatureTypePrefix;
protected string _signPrefix;
protected string _sha256;
protected string _sm3;

public Client(): base()
{
this._sha256 = "ACS4-HMAC-SHA256";
this._sm3 = "ACS4-HMAC-SM3";
// 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)

Check warning on line 51 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

Check warning on line 51 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

Check warning on line 51 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
{
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);
}

Expand Down Expand Up @@ -106,26 +132,37 @@
{"message", "'config.credential' can not be unset"},
});
}
string authType = credential.GetType();
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();

Check warning on line 143 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

'Client.GetBearerToken()' is obsolete: 'Use GetCredential().BearerToken instead.'

Check warning on line 143 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

'Client.GetBearerToken()' is obsolete: 'Use GetCredential().BearerToken instead.'

Check warning on line 143 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

'Client.GetBearerToken()' is obsolete: 'Use GetCredential().BearerToken instead.'
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 = credential.GetAccessKeyId();
string accessKeySecret = credential.GetAccessKeySecret();
string securityToken = credential.GetSecurityToken();
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);
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);
}
Expand Down Expand Up @@ -200,26 +237,37 @@
{"message", "'config.credential' can not be unset"},
});
}
string authType = credential.GetType();
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();

Check warning on line 248 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

'Client.GetBearerToken()' is obsolete: 'Use GetCredential().BearerToken instead.'

Check warning on line 248 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

'Client.GetBearerToken()' is obsolete: 'Use GetCredential().BearerToken instead.'

Check warning on line 248 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

'Client.GetBearerToken()' is obsolete: 'Use GetCredential().BearerToken instead.'
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 = await credential.GetAccessKeyIdAsync();
string accessKeySecret = await credential.GetAccessKeySecretAsync();
string securityToken = await credential.GetSecurityTokenAsync();
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);
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);
}
Expand Down Expand Up @@ -284,7 +332,7 @@
}
}

public async Task ModifyResponseAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap)

Check warning on line 335 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

Check warning on line 335 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
{
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request;
AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse response = context.Response;
Expand Down Expand Up @@ -369,15 +417,15 @@
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 + "/aliyun_v4_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
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 + "/aliyun_v4_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature;
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)
Expand Down Expand Up @@ -436,7 +484,7 @@

public byte[] GetSigningkey(string signatureAlgorithm, string secret, string product, string region, string date)
{
string sc1 = "aliyun_v4" + secret;
string sc1 = "" + _signPrefix + secret;
byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
Expand Down Expand Up @@ -467,18 +515,18 @@
byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4);
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("" + _signPrefix + "_request", sc4);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("aliyun_v4_request", sc4);
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)

Check warning on line 527 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

Check warning on line 527 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
{
string sc1 = "aliyun_v4" + secret;
string sc1 = "" + _signPrefix + secret;
byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
Expand Down Expand Up @@ -509,25 +557,29 @@
byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes("");
if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sha256))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4);
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("" + _signPrefix + "_request", sc4);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, _sm3))
{
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("aliyun_v4_request", sc4);
hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("" + _signPrefix + "_request", sc4);
}
return hmac;
}

public string GetRegion(string product, string endpoint)
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, ".aliyuncs.com", "", null);
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))
{
Expand Down Expand Up @@ -557,7 +609,7 @@
return canonicalizedResource;
}

public async Task<string> BuildCanonicalizedResourceAsync(Dictionary<string, string> query)

Check warning on line 612 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

Check warning on line 612 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
{
string canonicalizedResource = "";
if (!AlibabaCloud.TeaUtil.Common.IsUnset(query))
Expand Down Expand Up @@ -621,7 +673,7 @@
return AlibabaCloud.DarabonbaString.StringUtil.Split(tmp, ";", null);
}

public async Task<List<string>> GetSignedHeadersAsync(Dictionary<string, string> headers)

Check warning on line 676 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

Check warning on line 676 in alibabacloud-gateway-pop/csharp/core/Client.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
{
List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers);
List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.0.5.0")]
[assembly: AssemblyFileVersion("0.0.5.0")]
[assembly: AssemblyVersion("0.0.6.0")]
[assembly: AssemblyFileVersion("0.0.6.0")]
4 changes: 2 additions & 2 deletions alibabacloud-gateway-pop/csharp/core/client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="AlibabaCloud.GatewaySpi" Version="0.0.3"/>
<PackageReference Include="Aliyun.Credentials" Version="1.4.2"/>
<PackageReference Include="Aliyun.Credentials" Version="1.5.0"/>
<PackageReference Include="AlibabaCloud.TeaUtil" Version="0.1.19"/>
<PackageReference Include="AlibabaCloud.OpenApiUtil" Version="1.1.2"/>
<PackageReference Include="AlibabaCloud.EndpointUtil" Version="0.1.1"/>
Expand All @@ -50,6 +50,6 @@
<PackageReference Include="AlibabaCloud.DarabonbaString" Version="1.0.3"/>
<PackageReference Include="AlibabaCloud.DarabonbaMap" Version="0.0.2"/>
<PackageReference Include="AlibabaCloud.DarabonbaArray" Version="0.1.0"/>
<PackageReference Include="Tea" Version="1.0.13"/>
<PackageReference Include="Tea" Version="1.1.3"/>
</ItemGroup>
</Project>
Loading
Loading