Skip to content

Commit 53f2f54

Browse files
Merge pull request #16 from Mastercard/feature/updating-restsharp
Updating RestSharp Version
2 parents 111c0f8 + 8266c31 commit 53f2f54

8 files changed

+92
-89
lines changed

Mastercard.Developer.ClientEncryption.RestSharpV2/Interceptors/RestSharpEncryptionInterceptor.cs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using System;
22
using System.Linq;
3+
using System.Text.Json;
34
using System.Reflection;
45
using Mastercard.Developer.ClientEncryption.Core.Encryption;
5-
using Newtonsoft.Json;
6+
using Header = RestSharp.HeaderParameter;
67
using RestSharp;
8+
using System.Collections.ObjectModel;
9+
using System.Collections.Generic;
710

811
namespace Mastercard.Developer.ClientEncryption.RestSharpV2.Interceptors
912
{
@@ -30,7 +33,7 @@ public static RestSharpEncryptionInterceptor From(EncryptionConfig config)
3033
/// Encrypt RestSharp request payloads.
3134
/// </summary>
3235
/// <param name="request">A RestSharp request object</param>
33-
public void InterceptRequest(IRestRequest request)
36+
public void InterceptRequest(RestRequest request)
3437
{
3538
if (request == null) throw new ArgumentNullException(nameof(request));
3639

@@ -50,14 +53,15 @@ public void InterceptRequest(IRestRequest request)
5053
var payload = bodyParam.Value;
5154
if (!(payload is string))
5255
{
53-
payload = request.JsonSerializer.Serialize(payload);
56+
payload = JsonSerializer.Serialize(payload);
5457
}
5558

5659
// Encrypt fields & update headers
5760
string encryptedPayload = EncryptPayload(request, payload.ToString());
5861

5962
// Update body and content length
60-
bodyParam.Value = JsonConvert.DeserializeObject(encryptedPayload);
63+
request.RemoveParameter(bodyParam);
64+
request.AddBody(encryptedPayload);
6165
UpdateRequestHeader(request, "Content-Length", encryptedPayload.Length);
6266
}
6367
catch (EncryptionException)
@@ -74,7 +78,7 @@ public void InterceptRequest(IRestRequest request)
7478
/// Decrypt RestSharp response payloads.
7579
/// </summary>
7680
/// <param name="response">A RestSharp response object</param>
77-
public void InterceptResponse(IRestResponse response)
81+
public void InterceptResponse(RestResponse response)
7882
{
7983
if (response == null) throw new ArgumentNullException(nameof(response));
8084

@@ -109,17 +113,17 @@ public void InterceptResponse(IRestResponse response)
109113
/// <param name="request">A RestSharp request object</param>
110114
/// <param name="payload">The payload to be encrypted</param>
111115
/// <returns>The encrypted payload</returns>
112-
internal abstract string EncryptPayload(IRestRequest request, string payload);
116+
internal abstract string EncryptPayload(RestRequest request, string payload);
113117

114118
/// <summary>
115119
/// Decrypt a RestSharp response payload
116120
/// </summary>
117121
/// <param name="response">A RestSharp response object</param>
118122
/// <param name="encryptedPayload">The encrypted payload to be decrypted</param>
119123
/// <returns>The decrypted payload</returns>
120-
internal abstract string DecryptPayload(IRestResponse response, string encryptedPayload);
124+
internal abstract string DecryptPayload(RestResponse response, string encryptedPayload);
121125

122-
internal static void UpdateResponseHeader(IRestResponse response, string name, object value)
126+
internal static void UpdateResponseHeader(RestResponse response, string name, object value)
123127
{
124128
if (string.IsNullOrEmpty(name))
125129
{
@@ -128,21 +132,24 @@ internal static void UpdateResponseHeader(IRestResponse response, string name, o
128132
}
129133

130134
// Scan
131-
foreach (Parameter p in response.Headers)
135+
List<Header> updatedHeaders = response.Headers.ToList();
136+
foreach (Header p in response.Headers)
132137
{
133138
if (p.Name.Equals(name))
134139
{
135-
p.Value = value;
140+
updatedHeaders.Remove(p);
141+
updatedHeaders.Add(new Header(name, value.ToString()));
142+
response.Headers = updatedHeaders;
136143
return;
137144
}
138145
}
139146

140147
// If we get here, there is no such header, so add one
141-
var header = new Parameter(name, value.ToString(), ParameterType.HttpHeader);
142-
response.Headers.Add(header);
148+
updatedHeaders.Add(new Header(name, value.ToString()));
149+
response.Headers = updatedHeaders;
143150
}
144151

145-
internal static void UpdateRequestHeader(IRestRequest request, string name, object value)
152+
internal static void UpdateRequestHeader(RestRequest request, string name, object value)
146153
{
147154
if (string.IsNullOrEmpty(name))
148155
{
@@ -153,7 +160,7 @@ internal static void UpdateRequestHeader(IRestRequest request, string name, obje
153160
request.AddHeader(name, value.ToString());
154161
}
155162

156-
internal static string ReadAndRemoveHeader(IRestResponse response, string name)
163+
internal static string ReadAndRemoveHeader(RestResponse response, string name)
157164
{
158165
var header = response.Headers.ToList().Find(h => h.Name == name);
159166
if (string.IsNullOrEmpty(name) || header == null)
@@ -162,15 +169,8 @@ internal static string ReadAndRemoveHeader(IRestResponse response, string name)
162169
return null;
163170
}
164171

165-
// The "Headers" collection has been made read only, but we try to remove
166-
// the header from the response anyway.
167-
var headersField = response.GetType().GetTypeInfo().GetDeclaredField("<Headers>k__BackingField");
168-
if (headersField != null)
169-
{
170-
var updatedHeaders = response.Headers.ToList().FindAll(h => h.Name != name);
171-
headersField.SetValue(response, updatedHeaders);
172-
}
173-
172+
var updatedHeaders = response.Headers.ToList().FindAll(h => h.Name != name);
173+
response.Headers = updatedHeaders;
174174
return header.Value?.ToString() ?? string.Empty;
175175
}
176176
}

Mastercard.Developer.ClientEncryption.RestSharpV2/Interceptors/RestSharpFieldLevelEncryptionInterceptor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public RestSharpFieldLevelEncryptionInterceptor(FieldLevelEncryptionConfig confi
2525
/// <param name="request">A RestSharp request object</param>
2626
/// <param name="payload">The payload to be encrypted</param>
2727
/// <returns>The encrypted payload</returns>
28-
internal override string EncryptPayload(IRestRequest request, string payload)
28+
internal override string EncryptPayload(RestRequest request, string payload)
2929
{
3030
// Encrypt fields & update headers
3131
string encryptedPayload;
@@ -54,7 +54,7 @@ internal override string EncryptPayload(IRestRequest request, string payload)
5454
/// <param name="response">A RestSharp response object</param>
5555
/// <param name="encryptedPayload">The encrypted payload to be decrypted</param>
5656
/// <returns>The decrypted payload</returns>
57-
internal override string DecryptPayload(IRestResponse response, string encryptedPayload)
57+
internal override string DecryptPayload(RestResponse response, string encryptedPayload)
5858
{
5959
// Decrypt fields & update headers
6060
string decryptedPayload;

Mastercard.Developer.ClientEncryption.RestSharpV2/Interceptors/RestSharpJweEncryptionInterceptor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public RestSharpJweEncryptionInterceptor(JweConfig config)
2626
/// <param name="request">A RestSharp request object</param>
2727
/// <param name="payload">The payload to be encrypted</param>
2828
/// <returns>The encrypted payload</returns>
29-
internal override string EncryptPayload(IRestRequest request, string payload)
29+
internal override string EncryptPayload(RestRequest request, string payload)
3030
{
3131
return JweEncryption.EncryptPayload(payload, _config);
3232
}
@@ -37,7 +37,7 @@ internal override string EncryptPayload(IRestRequest request, string payload)
3737
/// <param name="response">A RestSharp response object</param>
3838
/// <param name="encryptedPayload">The encrypted payload to be decrypted</param>
3939
/// <returns>The decrypted payload</returns>
40-
internal override string DecryptPayload(IRestResponse response, string encryptedPayload)
40+
internal override string DecryptPayload(RestResponse response, string encryptedPayload)
4141
{
4242
return JweEncryption.DecryptPayload(encryptedPayload, _config);
4343
}

Mastercard.Developer.ClientEncryption.RestSharpV2/Mastercard.Developer.ClientEncryption.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.12.0" />
37+
<PackageReference Include="RestSharp" Version="108.0.3" />
3838
</ItemGroup>
3939

4040
<ItemGroup>

Mastercard.Developer.ClientEncryption.Tests/NetCore2/Interceptors/RestResponseDouble.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,41 @@
22
using System.Collections.Generic;
33
using System.Net;
44
using RestSharp;
5-
using IRestRequest = RestSharp.IRestRequest;
6-
using IRestResponse = RestSharp.IRestResponse;
7-
using Parameter = RestSharp.Parameter;
5+
using RestRequest = RestSharp.RestRequest;
6+
using RestResponse = RestSharp.RestResponse;
87

98
namespace Mastercard.Developer.ClientEncryption.Tests.NetCore.Interceptors
109
{
11-
internal class RestResponseDouble : IRestResponse
10+
internal class RestResponseDouble : RestResponse
1211
{
13-
public IRestRequest Request { get; set; } = null;
14-
public Uri ResponseUri { get; set; } = null;
15-
public string Server { get; set; }
16-
public byte[] RawBytes { get; set; } = null;
17-
public string ContentType { get; set; } = null;
18-
public long ContentLength { get; set; }
19-
public string ContentEncoding { get; set; }
20-
public IList<RestResponseCookie> Cookies { get; } = null;
21-
public IList<Parameter> Headers { get; }
22-
public ResponseStatus ResponseStatus { get; set; }
23-
public string ErrorMessage { get; set; }
24-
public Exception ErrorException { get; set; }
12+
public new RestRequest Request { get; set; } = null;
13+
public new Uri ResponseUri { get; set; } = null;
14+
public new string Server { get; set; }
15+
public new byte[] RawBytes { get; set; } = null;
16+
public new string ContentType { get; set; } = null;
17+
public new long ContentLength { get; set; }
18+
public new string ContentEncoding { get; set; }
19+
public new IList<HeaderParameter> Headers { get; }
20+
public new ResponseStatus ResponseStatus { get; set; }
21+
public new string ErrorMessage { get; set; }
22+
public new Exception ErrorException { get; set; }
2523
public Version ProtocolVersion { get; set; }
26-
public HttpStatusCode StatusCode { get; set; } = HttpStatusCode.OK;
27-
public bool IsSuccessful => true;
24+
public new HttpStatusCode StatusCode { get; set; } = HttpStatusCode.OK;
25+
public new bool IsSuccessful => true;
2826

29-
public string StatusDescription { get; set; } = null;
27+
public new string StatusDescription { get; set; } = null;
3028

3129
private Lazy<string> _content;
3230

33-
public RestResponseDouble(IList<Parameter> headers, string content)
31+
public RestResponseDouble(IList<HeaderParameter> headers, string content)
3432
{
3533
Headers = headers;
3634
Content = content;
35+
base.Headers = (IReadOnlyCollection<HeaderParameter>)headers;
36+
base.Content = content;
3737
}
3838

39-
public string Content
39+
public new string Content
4040
{
4141
get => _content.Value;
4242
set => _content = new Lazy<string>(() => value);

Mastercard.Developer.ClientEncryption.Tests/NetCore2/Interceptors/RestSharpV2CbcJweEncryptionInterceptorTest.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
using Mastercard.Developer.ClientEncryption.Tests.NetCore.Test;
55
using Microsoft.VisualStudio.TestTools.UnitTesting;
66
using Method = RestSharp.Method;
7-
using Parameter = RestSharp.Parameter;
7+
using Header = RestSharp.HeaderParameter;
88
using ParameterType = RestSharp.ParameterType;
99
using RestRequest = RestSharp.RestRequest;
10-
using IRestResponse = RestSharp.IRestResponse;
10+
using RestSharp;
1111

1212
namespace Mastercard.Developer.ClientEncryption.Tests.NetCore.Interceptors
1313
{
@@ -36,7 +36,7 @@ public void TestIntercept_ShouldDoNothing_WhenNoPayload()
3636
// WHEN
3737
var request = new RestRequest
3838
{
39-
Method = Method.GET,
39+
Method = Method.Get,
4040
Resource = "/service"
4141
};
4242

@@ -65,7 +65,7 @@ public void TestInterceptResponse_ShouldDecryptWithA128CBC_HS256Encryption()
6565
TestUtils.AssertPayloadEquals("{\"foo\":\"bar\"}", payload);
6666
var contentLengthHeaderParam = response.Headers.FirstOrDefault(param => param.Type == ParameterType.HttpHeader);
6767
Assert.IsNotNull(contentLengthHeaderParam);
68-
Assert.AreEqual(payload.Length, contentLengthHeaderParam.Value);
68+
Assert.AreEqual(payload.Length.ToString(), contentLengthHeaderParam.Value);
6969
}
7070

7171
[TestMethod]
@@ -114,9 +114,9 @@ public void TestInterceptResponse_ShouldThrowException_WhenDecryptionFails()
114114
fixture.InterceptResponse(response);
115115
}
116116

117-
internal static IRestResponse RestResponseWithContentLength(string content)
117+
internal static RestResponse RestResponseWithContentLength(string content)
118118
{
119-
Parameter[] headers = { new Parameter("Content-Length", content.Length, ParameterType.HttpHeader) };
119+
Header[] headers = { new Header("Content-Length", content.Length.ToString()) };
120120
return new RestResponseDouble(headers, content);
121121
}
122122
}

0 commit comments

Comments
 (0)