Skip to content

Commit 19e2d87

Browse files
committed
Limit EncryptedServiceClient to work with IJsonServiceClient's
1 parent 462a99c commit 19e2d87

6 files changed

Lines changed: 36 additions & 17 deletions

File tree

src/ServiceStack.Client/EncryptedServiceClient.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System;
77
using System.Collections.Generic;
88
using System.Security.Cryptography;
9-
using ServiceStack.Auth;
109
using ServiceStack.Text;
1110

1211
namespace ServiceStack
@@ -30,12 +29,12 @@ public class EncryptedServiceClient : IEncryptedClient
3029
public int Version { get; set; }
3130
public string SessionId { get; set; }
3231
public RSAParameters PublicKey { get; set; }
33-
public IServiceClient Client { get; set; }
32+
public IJsonServiceClient Client { get; set; }
3433

35-
public EncryptedServiceClient(IServiceClient client, string publicKeyXml)
34+
public EncryptedServiceClient(IJsonServiceClient client, string publicKeyXml)
3635
: this(client, publicKeyXml.ToPublicRSAParameters()) {}
3736

38-
public EncryptedServiceClient(IServiceClient client, RSAParameters publicKey)
37+
public EncryptedServiceClient(IJsonServiceClient client, RSAParameters publicKey)
3938
{
4039
Client = client;
4140
Client.ClearCookies();
@@ -58,7 +57,7 @@ public TResponse Send<TResponse>(string httpMethod, object request)
5857
var encResponse = Client.Send(encryptedMessage);
5958

6059
var responseJson = AesUtils.Decrypt(encResponse.EncryptedBody, aes.Key, aes.IV);
61-
var response = responseJson.FromJson<TResponse>();
60+
var response = JsonServiceClient.FromJson<TResponse>(responseJson);
6261

6362
return response;
6463
}
@@ -85,7 +84,7 @@ public List<TResponse> SendAll<TResponse>(IEnumerable<IReturn<TResponse>> reques
8584
var encResponse = Client.Send(encryptedMessage);
8685

8786
var responseJson = AesUtils.Decrypt(encResponse.EncryptedBody, aes.Key, aes.IV);
88-
var response = responseJson.FromJson<List<TResponse>>();
87+
var response = JsonServiceClient.FromJson<List<TResponse>>(responseJson);
8988

9089
return response;
9190
}
@@ -109,7 +108,7 @@ public EncryptedMessage CreateEncryptedMessage(object request, string operationN
109108

110109
var timestamp = DateTime.UtcNow.ToUnixTime();
111110

112-
var requestBody = timestamp + " " + verb + " " + operationName + " " + request.ToJson();
111+
var requestBody = timestamp + " " + verb + " " + operationName + " " + JsonServiceClient.ToJson(request);
113112

114113
var encryptedMessage = new EncryptedMessage
115114
{
@@ -148,7 +147,7 @@ public WebServiceException DecryptedException(WebServiceException ex, SymmetricA
148147
if (encResponse != null)
149148
{
150149
var responseJson = AesUtils.Decrypt(encResponse.EncryptedBody, aes.Key, aes.IV);
151-
var errorResponse = responseJson.FromJson<ErrorResponse>();
150+
var errorResponse = JsonServiceClient.FromJson<ErrorResponse>(responseJson);
152151
ex.ResponseDto = errorResponse;
153152
}
154153

@@ -158,15 +157,15 @@ public WebServiceException DecryptedException(WebServiceException ex, SymmetricA
158157

159158
public static partial class ServiceClientExtensions
160159
{
161-
public static IEncryptedClient GetEncryptedClient(this IServiceClient client, string serverPublicKeyXml)
160+
public static IEncryptedClient GetEncryptedClient(this IJsonServiceClient client, string serverPublicKeyXml)
162161
{
163162
if (string.IsNullOrEmpty(serverPublicKeyXml))
164163
throw new ArgumentNullException("serverPublicKeyXml");
165164

166165
return new EncryptedServiceClient(client, serverPublicKeyXml);
167166
}
168167

169-
public static IEncryptedClient GetEncryptedClient(this IServiceClient client, RSAParameters publicKey)
168+
public static IEncryptedClient GetEncryptedClient(this IJsonServiceClient client, RSAParameters publicKey)
170169
{
171170
return new EncryptedServiceClient(client, publicKey);
172171
}

src/ServiceStack.Client/JsonServiceClient.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace ServiceStack
88
{
99
public class JsonServiceClient
10-
: ServiceClientBase
10+
: ServiceClientBase, IJsonServiceClient
1111
{
1212
public override string Format
1313
{
@@ -55,5 +55,21 @@ internal static JsonObject ParseObject(string json)
5555
return JsonObject.Parse(json);
5656
}
5757
}
58+
59+
internal static T FromJson<T>(string json)
60+
{
61+
using (__requestAccess())
62+
{
63+
return json.FromJson<T>();
64+
}
65+
}
66+
67+
internal static string ToJson<T>(T o)
68+
{
69+
using (__requestAccess())
70+
{
71+
return o.ToJson();
72+
}
73+
}
5874
}
5975
}

src/ServiceStack.HttpClient/JsonHttpClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
namespace ServiceStack
2121
{
22-
public class JsonHttpClient : IServiceClient
22+
public class JsonHttpClient : IServiceClient, IJsonServiceClient
2323
{
2424
public static ILog log = LogManager.GetLogger(typeof(JsonHttpClient));
2525

src/ServiceStack.Interfaces/IEncryptedClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace ServiceStack
66
public interface IEncryptedClient : IReplyClient, IHasSessionId, IHasVersion
77
{
88
string ServerPublicKeyXml { get; }
9-
IServiceClient Client { get; }
9+
IJsonServiceClient Client { get; }
1010

1111
TResponse Send<TResponse>(string httpMethod, object request);
1212
TResponse Send<TResponse>(string httpMethod, IReturn<TResponse> request);

src/ServiceStack.Interfaces/IServiceClient.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@ namespace ServiceStack
33
public interface IServiceClient : IServiceClientAsync, IOneWayClient, IRestClient, IReplyClient, IHasSessionId, IHasVersion
44
{
55
}
6+
7+
public interface IJsonServiceClient : IServiceClient
8+
{
9+
}
610
}

tests/ServiceStack.WebHost.Endpoints.Tests/UseCases/EncryptedMessagesTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ public override void Configure(Container container)
3636

3737
public class JsonServiceClientEncryptedMessagesTests : EncryptedMessagesTests
3838
{
39-
protected override IServiceClient CreateClient()
39+
protected override IJsonServiceClient CreateClient()
4040
{
4141
return new JsonServiceClient(Config.AbsoluteBaseUri);
4242
}
4343
}
4444

4545
public class JsonHttpClientEncryptedMessagesTests : EncryptedMessagesTests
4646
{
47-
protected override IServiceClient CreateClient()
47+
protected override IJsonServiceClient CreateClient()
4848
{
4949
return new JsonHttpClient(Config.AbsoluteBaseUri);
5050
}
@@ -67,7 +67,7 @@ public void TestFixtureTearDown()
6767
appHost.Dispose();
6868
}
6969

70-
protected abstract IServiceClient CreateClient();
70+
protected abstract IJsonServiceClient CreateClient();
7171

7272
[Test]
7373
public void Can_Send_Encrypted_Message()
@@ -179,7 +179,7 @@ public void Does_throw_on_replayed_messages()
179179
public void Can_Send_Encrypted_Message_with_ServiceClients()
180180
{
181181
var client = CreateClient();
182-
IEncryptedClient encryptedClient = client.GetEncryptedClient(client.Get<string>("/publickey"));
182+
IEncryptedClient encryptedClient = client.GetEncryptedClient(client.Get(new GetPublicKey()));
183183

184184
var response = encryptedClient.Send(new HelloSecure { Name = "World" });
185185

0 commit comments

Comments
 (0)