Skip to content

Commit 2341f78

Browse files
committed
Stateless JSON-RPC support implemented. Add the application setting API_JSONRPC_STATELESS [TRUE, FALSE]
1 parent ec93757 commit 2341f78

File tree

18 files changed

+145
-112
lines changed

18 files changed

+145
-112
lines changed

rls/API.Library.dll

1 KB
Binary file not shown.

rls/API.Library.dll.config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
<add key="API_JSONRPC_SUCCESS" value="success" />
2525
<!-- JSONRPC - Windows Authentication [ANONYMOUS, WINDOWS, ANY] -->
2626
<add key="API_JSONRPC_AUTHENTICATION_TYPE" value="ANY" />
27+
<!-- JSONRPC - Stateless [TRUE, FALSE] -->
28+
<add key="API_JSONRPC_STATELESS" value="FALSE" />
2729
<!-- JSONRPC - Mask parameters (comas separated, case insensitive) -->
2830
<add key="API_JSONRPC_MASK_PARAMETERS" value="" />
2931

rls/API.Library.pdb

0 Bytes
Binary file not shown.

src/API.Library/App.config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
<add key="API_JSONRPC_SUCCESS" value="success" />
2525
<!-- JSONRPC - Windows Authentication [ANONYMOUS, WINDOWS, ANY] -->
2626
<add key="API_JSONRPC_AUTHENTICATION_TYPE" value="ANY" />
27+
<!-- JSONRPC - Stateless [TRUE, FALSE] -->
28+
<add key="API_JSONRPC_STATELESS" value="FALSE" />
2729
<!-- JSONRPC - Mask parameters (comas separated, case insensitive) -->
2830
<add key="API_JSONRPC_MASK_PARAMETERS" value="" />
2931

src/API.Library/Entities/JSONRPC.cs

Lines changed: 108 additions & 100 deletions
Large diffs are not rendered by default.

src/API.Library/Entities/MemCacheD.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ private static bool Store(string key, MemCachedD_Value value, TimeSpan validFor,
333333
try
334334
{
335335
// The value must be serialised
336-
string serializedValue = JsonConvert.SerializeObject(value);
336+
string serializedValue = Utility.JsonSerialize_IgnoreLoopingReference(value);
337337

338338
bool isStored = false;
339339

@@ -557,7 +557,7 @@ private static MemCachedD_Value Get(string key)
557557
{
558558
Log.Instance.Info("Cache found: " + key);
559559
// The value must be deserialised
560-
dynamic cache = JsonConvert.DeserializeObject(cacheSerialised);
560+
dynamic cache = Utility.JsonDeserialize_IgnoreLoopingReference(cacheSerialised);
561561

562562
DateTime cacheDateTime = (DateTime)cache.datetime;
563563
DateTime cacheExpiresAt = (DateTime)cache.expiresAt;

src/API.Library/Entities/ReCAPTCHA.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json;
33
using Newtonsoft.Json.Linq;
44
using System;
5+
using System.Configuration;
56

67
namespace API
78
{
@@ -15,17 +16,17 @@ public static class ReCAPTCHA
1516
/// <summary>
1617
/// Flag to indicate if ReCAPTCHA is enabled
1718
/// </summary>
18-
private static readonly bool API_RECAPTCHA_ENABLED = Convert.ToBoolean(System.Web.Configuration.WebConfigurationManager.AppSettings["API_RECAPTCHA_ENABLED"]);
19+
private static readonly bool API_RECAPTCHA_ENABLED = Convert.ToBoolean(ConfigurationManager.AppSettings["API_RECAPTCHA_ENABLED"]);
1920

2021
/// <summary>
2122
/// URL
2223
/// </summary>
23-
private static readonly string API_RECAPTCHA_URL = System.Web.Configuration.WebConfigurationManager.AppSettings["API_RECAPTCHA_URL"];
24+
private static readonly string API_RECAPTCHA_URL = ConfigurationManager.AppSettings["API_RECAPTCHA_URL"];
2425

2526
/// <summary>
2627
/// private key
2728
/// </summary>
28-
private static readonly string API_RECAPTCHA_PRIVATE_KEY = System.Web.Configuration.WebConfigurationManager.AppSettings["API_RECAPTCHA_PRIVATE_KEY"];
29+
private static readonly string API_RECAPTCHA_PRIVATE_KEY = ConfigurationManager.AppSettings["API_RECAPTCHA_PRIVATE_KEY"];
2930

3031
#endregion
3132

@@ -65,7 +66,7 @@ public static bool Validate(string encodedResponse)
6566
// Validate the response against the server
6667
var client = new WebClient();
6768
var responseString = client.DownloadString(string.Format(API_RECAPTCHA_URL, API_RECAPTCHA_PRIVATE_KEY, encodedResponse));
68-
var responseObject = JsonConvert.DeserializeObject<JObject>(responseString);
69+
var responseObject = Utility.JsonDeserialize_IgnoreLoopingReference<JObject>(responseString);
6970
var responseSuccess = (string)responseObject["success"];
7071

7172
Log.Instance.Info("Server Response: " + responseString);

src/API.Library/Entities/Utility.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ private static string GetUserAgent()
150150
/// <returns></returns>
151151
public static string JsonSerialize_IgnoreLoopingReference(dynamic input)
152152
{
153-
return JsonConvert.SerializeObject(input, Formatting.None, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
153+
return JsonConvert.SerializeObject(input, Formatting.None, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None, ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
154154
}
155155

156156
/// <summary>
@@ -160,7 +160,17 @@ public static string JsonSerialize_IgnoreLoopingReference(dynamic input)
160160
/// <returns></returns>
161161
public static dynamic JsonDeserialize_IgnoreLoopingReference(string input)
162162
{
163-
return JsonConvert.DeserializeObject<dynamic>(input, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
163+
return JsonConvert.DeserializeObject<dynamic>(input, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None });
164+
}
165+
166+
/// <summary>
167+
/// Deserialize from JSON ignoring looping references
168+
/// </summary>
169+
/// <param name="input"></param>
170+
/// <returns></returns>
171+
public static dynamic JsonDeserialize_IgnoreLoopingReference<T>(string input)
172+
{
173+
return JsonConvert.DeserializeObject<T>(input, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None });
164174
}
165175

166176
/// <summary>

src/API.Library/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("3.0.2.0")]
36-
[assembly: AssemblyFileVersion("3.0.2.0")]
35+
[assembly: AssemblyVersion("3.0.3.0")]
36+
[assembly: AssemblyFileVersion("3.0.3.0")]
3737

3838
// Configure log4net using the Web.config file by default
3939
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

test/API.Test/API.Test.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@
7171
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
7272
</PropertyGroup>
7373
<ItemGroup>
74-
<Reference Include="API.Library, Version=3.0.2.0, Culture=neutral, processorArchitecture=MSIL">
74+
<Reference Include="API.Library, Version=3.0.3.0, Culture=neutral, processorArchitecture=MSIL">
7575
<SpecificVersion>False</SpecificVersion>
76-
<HintPath>..\packages\API.Library.3.0.2\API.Library.dll</HintPath>
76+
<HintPath>..\packages\API.Library.3.0.3\API.Library.dll</HintPath>
7777
</Reference>
7878
<Reference Include="Enyim.Caching, Version=2.16.0.0, Culture=neutral, PublicKeyToken=cec98615db04012e, processorArchitecture=MSIL">
7979
<HintPath>..\packages\EnyimMemcached.2.16.0\lib\net35\Enyim.Caching.dll</HintPath>

0 commit comments

Comments
 (0)