Skip to content

Commit 5feaf0e

Browse files
Merge pull request #17 from Mastercard/feature/updating-restsharp
Feature/updating restsharp
2 parents 5ba0645 + fb70cc2 commit 5feaf0e

File tree

9 files changed

+139
-83
lines changed

9 files changed

+139
-83
lines changed

.github/workflows/sonar.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@ jobs:
2222
github.event.pull_request.head.repo.full_name == github.repository ||
2323
github.event_name != 'pull_request_target') }}
2424
run: echo "Unsecure PR, must be labelled with the 'safe' label, then run the workflow again" && exit 1
25-
- name: Setup .NET Core
26-
uses: actions/setup-dotnet@v1
25+
- name: Setup .NET 6
26+
uses: actions/setup-dotnet@v1.9.0
2727
with:
28-
dotnet-version: 2.1.700
28+
dotnet-version: 3.1
2929
- name: Setup java
3030
uses: actions/setup-java@v1
3131
with:
3232
java-version: '11'
3333
- name: Test
3434
env:
35-
NETCORE2_TEST_PROJECT: >-
36-
Mastercard.Developer.OAuth1Signer.Tests/NetCore2/Mastercard.Developer.OAuth1Signer.Tests.NetCore2.csproj
35+
NETCORE3_TEST_PROJECT: >-
36+
Mastercard.Developer.OAuth1Signer.Tests/NetCore3/Mastercard.Developer.OAuth1Signer.Tests.NetCore3.csproj
3737
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
3838
SONAR_TOKEN: '${{ secrets.SONAR_TOKEN }}'
3939
run: >
@@ -48,14 +48,14 @@ jobs:
4848
/o:"mastercard" \
4949
/d:sonar.host.url="https://sonarcloud.io" \
5050
/d:sonar.login="$SONAR_TOKEN" \
51-
/d:sonar.cs.vstest.reportsPaths="./Mastercard.Developer.OAuth1Signer.Tests/NetCore2/bin/tests.trx" \
52-
/d:sonar.cs.opencover.reportsPaths="./Mastercard.Developer.OAuth1Signer.Tests/NetCore2/bin/coverage.xml"
51+
/d:sonar.cs.vstest.reportsPaths="./Mastercard.Developer.OAuth1Signer.Tests/NetCore3/bin/tests.trx" \
52+
/d:sonar.cs.opencover.reportsPaths="./Mastercard.Developer.OAuth1Signer.Tests/NetCore3/bin/coverage.xml"
5353
54-
dotnet test $NETCORE2_TEST_PROJECT -c Release
55-
-l:"trx;LogFileName=tests.trx" -r:"bin/" /p:CollectCoverage=true
54+
dotnet test $NETCORE3_TEST_PROJECT -c Release
55+
-l:"trx;LogFileName=tests.trx" -r:"./Mastercard.Developer.OAuth1Signer.Tests/NetCore3/bin/" /p:CollectCoverage=true
5656
/p:CoverletOutputFormat="opencover"
5757
/p:CoverletOutput="bin/coverage.xml"
5858
59-
dotnet publish $NETCORE2_TEST_PROJECT -c Release
59+
dotnet publish $NETCORE3_TEST_PROJECT -c Release
6060
6161
dotnet sonarscanner end /d:sonar.login="$SONAR_TOKEN"

.github/workflows/test.yml

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,34 @@ jobs:
3838
mono: none
3939
TEST_PROJECT: $NETCORE3_TEST_PROJECT
4040
steps:
41-
- uses: actions/checkout@v2
42-
- name: Setup .NET Core
43-
uses: actions/setup-dotnet@v1
41+
- name: Checkout code
42+
uses: actions/checkout@v2
43+
- name: Setup .NET 6
44+
uses: actions/[email protected]
45+
with:
46+
dotnet-version: 6.0.x
47+
- name: Build using .NET 6
48+
run: >
49+
export PATH="$PATH:$HOME/.dotnet/tools"
50+
51+
dotnet build ${{ env.NETCORE2_TEST_PROJECT }} -c Release
52+
53+
dotnet build ${{ env.NETCORE3_TEST_PROJECT }} -c Release
54+
- name: Setup .NET [Core] ${{ matrix.dotnet }}
55+
uses: actions/[email protected]
4456
with:
4557
dotnet-version: '${{ matrix.dotnet }}'
46-
- name: Test
58+
- name: List .NET SDKs
59+
run: >
60+
dotnet --list-sdks
61+
- name: Run tests using .NET [Core] ${{ matrix.dotnet }}
4762
run: >
4863
export PATH="$PATH:$HOME/.dotnet/tools"
49-
64+
5065
dotnet test ${{ matrix.TEST_PROJECT }} -c Release
5166
-l:"trx;LogFileName=tests.trx" -r:"bin/" /p:CollectCoverage=true
5267
/p:CoverletOutputFormat="opencover"
5368
/p:CoverletOutput="bin/coverage.xml"
54-
69+
- name: Local publish
70+
run: >
5571
dotnet publish ${{ matrix.TEST_PROJECT }} -c Release

Mastercard.Developer.OAuth1Signer.RestSharpV2/Authenticators/RestSharpOAuth1Authenticator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ public RestSharpOAuth1Authenticator(string consumerKey, RSA signingKey, Uri base
2626
Signer = new RestSharpSigner(consumerKey, signingKey);
2727
}
2828

29-
public Task PreAuthenticate(IRestClient client, IRestRequest request, ICredentials credentials) => Task.Run(() => Signer.Sign(BaseUri, request));
29+
public Task PreAuthenticate(RestClient client, RestRequest request, ICredentials credentials) => Task.Run(() => Signer.Sign(BaseUri, request));
3030

3131
public Task PreAuthenticate(HttpClient client, HttpRequestMessage request, ICredentials credentials) => throw new NotImplementedException();
3232

33-
public bool CanPreAuthenticate(IRestClient client, IRestRequest request, ICredentials credentials) => true;
33+
public bool CanPreAuthenticate(RestClient client, RestRequest request, ICredentials credentials) => true;
3434

3535
public bool CanPreAuthenticate(HttpClient client, HttpRequestMessage request, ICredentials credentials) => false;
3636

3737
public bool CanHandleChallenge(HttpClient client, HttpRequestMessage request, ICredentials credentials, HttpResponseMessage response) => false;
3838

3939
public Task HandleChallenge(HttpClient client, HttpRequestMessage request, ICredentials credentials, HttpResponseMessage response) => throw new NotImplementedException();
4040

41-
public void Authenticate(IRestClient client, IRestRequest request)
41+
ValueTask IAuthenticator.Authenticate(RestClient client, RestRequest request)
4242
{
4343
throw new NotImplementedException();
4444
}

Mastercard.Developer.OAuth1Signer.RestSharpV2/Mastercard.Developer.OAuth1Signer.RestSharpV2.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
</ItemGroup>
3535

3636
<ItemGroup>
37-
<PackageReference Include="RestSharp" Version="106.11.4" /> <!-- Minimum version, inclusive -->
37+
<PackageReference Include="RestSharp" Version="108.0.3" /> <!-- Minimum version, inclusive -->
3838
</ItemGroup>
3939

4040
<ItemGroup>

Mastercard.Developer.OAuth1Signer.RestSharpV2/Signers/RestSharpSigner.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Linq;
33
using System.Security.Cryptography;
44
using System.Text;
5+
using System.Text.Json;
56
using Mastercard.Developer.OAuth1Signer.Core;
67
using Mastercard.Developer.OAuth1Signer.Core.Signers;
78
using RestSharp;
@@ -23,7 +24,7 @@ public RestSharpSigner(string consumerKey, RSA signingKey, Encoding encoding) :
2324
{
2425
}
2526

26-
public void Sign(Uri baseUri, IRestRequest request)
27+
public void Sign(Uri baseUri, RestRequest request)
2728
{
2829
if (baseUri == null) throw new ArgumentNullException(nameof(baseUri));
2930
if (request == null) throw new ArgumentNullException(nameof(request));
@@ -41,7 +42,7 @@ public void Sign(Uri baseUri, IRestRequest request)
4142

4243
// Add query params
4344
var parameterString = new StringBuilder();
44-
foreach (var requestParameter in request.Parameters.Where(p => p.Type == ParameterType.QueryString))
45+
foreach (var requestParameter in request.Parameters.Where(p => p is QueryParameter))
4546
{
4647
parameterString
4748
.Append(parameterString.Length > 0 ? "&" : string.Empty)
@@ -56,17 +57,17 @@ public void Sign(Uri baseUri, IRestRequest request)
5657

5758
// Fix URL segments
5859
fullUri = request.Parameters
59-
.Where(p => p.Type == ParameterType.UrlSegment)
60+
.Where(p => p is UrlSegmentParameter)
6061
.Aggregate(fullUri, (current, requestParameter) => current.Replace($"{{{requestParameter.Name}}}", Uri.EscapeDataString(requestParameter.Value?.ToString()) ?? string.Empty));
6162

6263
// Read the body
63-
var bodyParam = request.Parameters.FirstOrDefault(param => param.Type == ParameterType.RequestBody);
64+
var bodyParam = request.Parameters.FirstOrDefault(param => param is BodyParameter);
6465

6566
// Serialize the body if required
6667
var payload = bodyParam?.Value ?? string.Empty;
6768
if (!(payload is string))
6869
{
69-
payload = request.JsonSerializer.Serialize(payload);
70+
payload = JsonSerializer.Serialize(payload);
7071
}
7172

7273
// Generate the header and add it to the request
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net5.0</TargetFramework>
5+
<IsPackable>false</IsPackable>
6+
<Authors>Mastercard</Authors>
7+
<Company>Mastercard</Company>
8+
<!-- See: https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/strong-naming -->
9+
<SignAssembly>true</SignAssembly>
10+
<AssemblyOriginatorKeyFile>../../Identity.snk</AssemblyOriginatorKeyFile>
11+
<AssemblyVersion>1.0.0.0</AssemblyVersion>
12+
<FileVersion>1.0.0.0</FileVersion>
13+
</PropertyGroup>
14+
15+
<ItemGroup>
16+
<Compile Include="..\NetCore2\Authenticators\RestSharpOAuth1AuthenticatorTest.cs">
17+
<Link>Authenticators\RestSharpOAuth1AuthenticatorTest.cs</Link>
18+
</Compile>
19+
<Compile Include="..\NetCore2\Authenticators\RestSharpV2OAuth1AuthenticatorTest.cs">
20+
<Link>Authenticators\RestSharpV2OAuth1AuthenticatorTest.cs</Link>
21+
</Compile>
22+
<Compile Include="..\NetCore2\OAuthTest.cs">
23+
<Link>OAuthTest.cs</Link>
24+
</Compile>
25+
<Compile Include="..\NetCore2\Signers\NetHttpClientSignerTest.cs">
26+
<Link>Signers\NetHttpClientSignerTest.cs</Link>
27+
</Compile>
28+
<Compile Include="..\NetCore2\Signers\RestSharpSignerTest.cs">
29+
<Link>Signers\RestSharpSignerTest.cs</Link>
30+
</Compile>
31+
<Compile Include="..\NetCore2\Signers\RestSharpV2SignerTest.cs">
32+
<Link>Signers\RestSharpV2SignerTest.cs</Link>
33+
</Compile>
34+
<Compile Include="..\NetCore2\Test\TestUtils.cs">
35+
<Link>Test\TestUtils.cs</Link>
36+
</Compile>
37+
<Compile Include="..\NetCore2\Utils\AuthenticationUtilsTest.cs">
38+
<Link>Utils\AuthenticationUtilsTest.cs</Link>
39+
</Compile>
40+
<Compile Include="..\NetCore2\Utils\SecurityUtilsTest.cs">
41+
<Link>Utils\SecurityUtilsTest.cs</Link>
42+
</Compile>
43+
</ItemGroup>
44+
45+
<ItemGroup>
46+
<EmbeddedResource Include="..\NetCore2\_Resources\test_key_container.p12">
47+
<Link>_Resources\test_key_container.p12</Link>
48+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
49+
</EmbeddedResource>
50+
</ItemGroup>
51+
52+
<ItemGroup>
53+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
54+
<PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
55+
<PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
56+
<PackageReference Include="coverlet.collector" Version="1.3.0" />
57+
</ItemGroup>
58+
59+
<ItemGroup>
60+
<ProjectReference Include="..\..\Mastercard.Developer.OAuth1Signer.Core\Mastercard.Developer.OAuth1Signer.Core.csproj" />
61+
<ProjectReference Include="..\..\Mastercard.Developer.OAuth1Signer.RestSharpV2\Mastercard.Developer.OAuth1Signer.RestSharpV2.csproj" />
62+
<ProjectReference Include="..\..\Mastercard.Developer.OAuth1Signer.RestSharp\Mastercard.Developer.OAuth1Signer.RestSharp.csproj" />
63+
</ItemGroup>
64+
65+
</Project>

Mastercard.Developer.OAuth1Signer.Tests/NetCore2/Authenticators/RestSharpV2OAuth1AuthenticatorTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public void TestPreAuthenticate_ShouldSignRequest()
1818
var baseUri = new Uri("https://api.mastercard.com/");
1919
var request = new RestRequest
2020
{
21-
Method = Method.GET,
21+
Method = Method.Get,
2222
Resource = "/service"
2323
};
2424

@@ -28,8 +28,8 @@ public void TestPreAuthenticate_ShouldSignRequest()
2828
task.Wait();
2929

3030
// THEN
31-
var authorizationHeaders = request.Parameters.FindAll(param => param.Name == "Authorization" && param.Type == ParameterType.HttpHeader);
32-
Assert.AreEqual(1, authorizationHeaders.Count);
31+
var authorizationHeader = request.Parameters.TryFind("Authorization");
32+
Assert.IsNotNull(authorizationHeader);
3333
}
3434
}
3535
}

Mastercard.Developer.OAuth1Signer.Tests/NetCore2/Signers/RestSharpV2SignerTest.cs

Lines changed: 22 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -18,70 +18,40 @@ public void TestSign_ShouldAddOAuth1HeaderToPostRequest()
1818
var baseUri = new Uri("https://api.mastercard.com/");
1919
var request = new RestRequest
2020
{
21-
Method = Method.POST,
22-
Resource = "/service/{param1}",
23-
Parameters =
24-
{
25-
new Parameter("param1", "value", ParameterType.UrlSegment),
26-
new Parameter("param2", "with spaces", ParameterType.QueryString),
27-
new Parameter("param3", "encoded#symbol", ParameterType.QueryString),
28-
new Parameter("param4", "{\"foo\":\"bår\"}", ParameterType.RequestBody)
29-
}
21+
Method = Method.Post,
22+
Resource = "/service/{param1}"
3023
};
3124

25+
request.AddUrlSegment("param1", "value");
26+
request.AddQueryParameter("param2", "with spaces");
27+
request.AddQueryParameter("param3", "with spaces");
28+
request.AddJsonBody("param4", "{\"foo\":\"bår\"}");
29+
3230
// WHEN
3331
var instanceUnderTest = new RestSharpSigner(consumerKey, signingKey);
3432
instanceUnderTest.Sign(baseUri, request);
3533

3634
// THEN
37-
var authorizationHeaders = request.Parameters.FindAll(param => param.Name == "Authorization" && param.Type == ParameterType.HttpHeader);
38-
var authorizationHeaderValue = authorizationHeaders[0].Value as string;
35+
var authorizationHeader = request.Parameters.TryFind("Authorization");
36+
var authorizationHeaderValue = authorizationHeader.Value as string;
3937
Assert.IsNotNull(authorizationHeaderValue);
4038
}
4139

42-
[TestMethod]
43-
public void TestSign_ShouldAddOAuth1HeaderToGetRequest_WhenParameterNameIsNull()
44-
{
45-
// GIVEN
46-
var signingKey = TestUtils.GetTestSigningKey();
47-
const string consumerKey = "Some key";
48-
var baseUri = new Uri("https://api.mastercard.com/");
49-
var param1 = new Parameter("name", "value", ParameterType.QueryString);
50-
param1.Name = null;
51-
var request = new RestRequest
52-
{
53-
Method = Method.GET,
54-
Resource = "/service/{param1}",
55-
Parameters =
56-
{
57-
param1
58-
}
59-
};
60-
61-
// WHEN
62-
var instanceUnderTest = new RestSharpSigner(consumerKey, signingKey);
63-
Assert.ThrowsException<InvalidOperationException>(() => instanceUnderTest.Sign(baseUri, request));
64-
}
65-
6640
[TestMethod]
6741
public void TestSign_ShouldAddOAuth1HeaderToGetRequest_WhenParameterValueIsNull()
6842
{
6943
// GIVEN
7044
var signingKey = TestUtils.GetTestSigningKey();
7145
const string consumerKey = "Some key";
7246
var baseUri = new Uri("https://api.mastercard.com/");
73-
var param1 = new Parameter("name", "value", ParameterType.QueryString);
74-
param1.Value = null;
7547
var request = new RestRequest
7648
{
77-
Method = Method.GET,
78-
Resource = "/service/{param1}",
79-
Parameters =
80-
{
81-
param1
82-
}
49+
Method = Method.Get,
50+
Resource = "/service/{param1}"
8351
};
8452

53+
request.AddQueryParameter("name", null);
54+
8555
// WHEN
8656
var instanceUnderTest = new RestSharpSigner(consumerKey, signingKey);
8757
Assert.ThrowsException<InvalidOperationException>(() => instanceUnderTest.Sign(baseUri, request));
@@ -96,7 +66,7 @@ public void TestSign_ShouldAddOAuth1HeaderToGetRequest()
9666
var baseUri = new Uri("https://api.mastercard.com/");
9767
var request = new RestRequest
9868
{
99-
Method = Method.GET,
69+
Method = Method.Get,
10070
Resource = "/service"
10171
};
10272

@@ -105,8 +75,8 @@ public void TestSign_ShouldAddOAuth1HeaderToGetRequest()
10575
instanceUnderTest.Sign(baseUri, request);
10676

10777
// THEN
108-
var authorizationHeaders = request.Parameters.FindAll(param => param.Name == "Authorization" && param.Type == ParameterType.HttpHeader);
109-
var authorizationHeaderValue = authorizationHeaders[0].Value as string;
78+
var authorizationHeader = request.Parameters.TryFind("Authorization");
79+
var authorizationHeaderValue = authorizationHeader.Value as string;
11080
Assert.IsNotNull(authorizationHeaderValue);
11181
}
11282

@@ -117,24 +87,21 @@ public void TestSign_ShouldAddOAuthHeaderWhenUrlSegmentParamHasSpecialChars()
11787
var signingKey = TestUtils.GetTestSigningKey();
11888
const string consumerKey = "Some key";
11989
var baseUri = new Uri("https://api.mastercard.com/");
120-
var param1 = new Parameter("name", "matest.buyer5.pay@track", ParameterType.UrlSegment);
12190
var request = new RestRequest
12291
{
123-
Method = Method.GET,
124-
Resource = "/service/{name}",
125-
Parameters =
126-
{
127-
param1
128-
}
92+
Method = Method.Get,
93+
Resource = "/service/{name}"
12994
};
13095

96+
request.AddUrlSegment("name", "matest.buyer5.pay@track");
97+
13198
// WHEN
13299
var instanceUnderTest = new RestSharpSigner(consumerKey, signingKey);
133100
instanceUnderTest.Sign(baseUri, request);
134101

135102
// THEN
136-
var authorizationHeaders = request.Parameters.FindAll(param => param.Name == "Authorization" && param.Type == ParameterType.HttpHeader);
137-
var authorizationHeaderValue = authorizationHeaders[0].Value as string;
103+
var authorizationHeader = request.Parameters.TryFind("Authorization");
104+
var authorizationHeaderValue = authorizationHeader.Value as string;
138105
Assert.IsNotNull(authorizationHeaderValue);
139106
}
140107
}

0 commit comments

Comments
 (0)