diff --git a/DnsServerCore/WebServiceAppsApi.cs b/DnsServerCore/WebServiceAppsApi.cs
index d72b5801..04879045 100644
--- a/DnsServerCore/WebServiceAppsApi.cs
+++ b/DnsServerCore/WebServiceAppsApi.cs
@@ -19,12 +19,12 @@ along with this program. If not, see .
using DnsServerCore.ApplicationCommon;
using DnsServerCore.Dns.Applications;
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
+using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using TechnitiumLibrary;
@@ -92,22 +92,23 @@ namespace DnsServerCore
_dnsWebService.Log.Write("DNS Server has started automatic update check for DNS Apps.");
string storeAppsJsonData = await GetStoreAppsJsonData().WithTimeout(5000);
- dynamic jsonStoreAppsArray = JsonConvert.DeserializeObject(storeAppsJsonData);
+ using JsonDocument jsonDocument = JsonDocument.Parse(storeAppsJsonData);
+ JsonElement jsonStoreAppsArray = jsonDocument.RootElement;
foreach (DnsApplication application in _dnsWebService.DnsServer.DnsApplicationManager.Applications.Values)
{
- foreach (dynamic jsonStoreApp in jsonStoreAppsArray)
+ foreach (JsonElement jsonStoreApp in jsonStoreAppsArray.EnumerateArray())
{
- string name = jsonStoreApp.name.Value;
+ string name = jsonStoreApp.GetProperty("name").GetString();
if (name.Equals(application.Name))
{
string url = null;
Version storeAppVersion = null;
Version lastServerVersion = null;
- foreach (dynamic jsonVersion in jsonStoreApp.versions)
+ foreach (JsonElement jsonVersion in jsonStoreApp.GetProperty("versions").EnumerateArray())
{
- string strServerVersion = jsonVersion.serverVersion.Value;
+ string strServerVersion = jsonVersion.GetProperty("serverVersion").GetString();
Version requiredServerVersion = new Version(strServerVersion);
if (_dnsWebService.ServerVersion < requiredServerVersion)
@@ -116,8 +117,8 @@ namespace DnsServerCore
if ((lastServerVersion is not null) && (lastServerVersion > requiredServerVersion))
continue;
- string version = jsonVersion.version.Value;
- url = jsonVersion.url.Value;
+ string version = jsonVersion.GetProperty("version").GetString();
+ url = jsonVersion.GetProperty("url").GetString();
storeAppVersion = new Version(version);
lastServerVersion = requiredServerVersion;
@@ -219,24 +220,19 @@ namespace DnsServerCore
}
}
- private void WriteAppAsJson(JsonTextWriter jsonWriter, DnsApplication application, dynamic jsonStoreAppsArray)
+ private void WriteAppAsJson(Utf8JsonWriter jsonWriter, DnsApplication application, JsonElement jsonStoreAppsArray = default)
{
jsonWriter.WriteStartObject();
- jsonWriter.WritePropertyName("name");
- jsonWriter.WriteValue(application.Name);
-
- jsonWriter.WritePropertyName("description");
- jsonWriter.WriteValue(application.Description);
+ jsonWriter.WriteString("name", application.Name);
+ jsonWriter.WriteString("description", application.Description);
+ jsonWriter.WriteString("version", DnsWebService.GetCleanVersion(application.Version));
- jsonWriter.WritePropertyName("version");
- jsonWriter.WriteValue(DnsWebService.GetCleanVersion(application.Version));
-
- if (jsonStoreAppsArray != null)
+ if (jsonStoreAppsArray.ValueKind != JsonValueKind.Undefined)
{
- foreach (dynamic jsonStoreApp in jsonStoreAppsArray)
+ foreach (JsonElement jsonStoreApp in jsonStoreAppsArray.EnumerateArray())
{
- string name = jsonStoreApp.name.Value;
+ string name = jsonStoreApp.GetProperty("name").GetString();
if (name.Equals(application.Name))
{
string version = null;
@@ -244,9 +240,9 @@ namespace DnsServerCore
Version storeAppVersion = null;
Version lastServerVersion = null;
- foreach (dynamic jsonVersion in jsonStoreApp.versions)
+ foreach (JsonElement jsonVersion in jsonStoreApp.GetProperty("versions").EnumerateArray())
{
- string strServerVersion = jsonVersion.serverVersion.Value;
+ string strServerVersion = jsonVersion.GetProperty("serverVersion").GetString();
Version requiredServerVersion = new Version(strServerVersion);
if (_dnsWebService.ServerVersion < requiredServerVersion)
@@ -255,8 +251,8 @@ namespace DnsServerCore
if ((lastServerVersion is not null) && (lastServerVersion > requiredServerVersion))
continue;
- version = jsonVersion.version.Value;
- url = jsonVersion.url.Value;
+ version = jsonVersion.GetProperty("version").GetString();
+ url = jsonVersion.GetProperty("url").GetString();
storeAppVersion = new Version(version);
lastServerVersion = requiredServerVersion;
@@ -265,14 +261,9 @@ namespace DnsServerCore
if (storeAppVersion is null)
break; //no compatible update available
- jsonWriter.WritePropertyName("updateVersion");
- jsonWriter.WriteValue(version);
-
- jsonWriter.WritePropertyName("updateUrl");
- jsonWriter.WriteValue(url);
-
- jsonWriter.WritePropertyName("updateAvailable");
- jsonWriter.WriteValue(storeAppVersion > application.Version);
+ jsonWriter.WriteString("updateVersion", version);
+ jsonWriter.WriteString("updateUrl", url);
+ jsonWriter.WriteBoolean("updateAvailable", storeAppVersion > application.Version);
break;
}
}
@@ -286,37 +277,23 @@ namespace DnsServerCore
{
jsonWriter.WriteStartObject();
- jsonWriter.WritePropertyName("classPath");
- jsonWriter.WriteValue(dnsApp.Key);
-
- jsonWriter.WritePropertyName("description");
- jsonWriter.WriteValue(dnsApp.Value.Description);
+ jsonWriter.WriteString("classPath", dnsApp.Key);
+ jsonWriter.WriteString("description", dnsApp.Value.Description);
if (dnsApp.Value is IDnsAppRecordRequestHandler appRecordHandler)
{
- jsonWriter.WritePropertyName("isAppRecordRequestHandler");
- jsonWriter.WriteValue(true);
-
- jsonWriter.WritePropertyName("recordDataTemplate");
- jsonWriter.WriteValue(appRecordHandler.ApplicationRecordDataTemplate);
+ jsonWriter.WriteBoolean("isAppRecordRequestHandler", true);
+ jsonWriter.WriteString("recordDataTemplate", appRecordHandler.ApplicationRecordDataTemplate);
}
else
{
- jsonWriter.WritePropertyName("isAppRecordRequestHandler");
- jsonWriter.WriteValue(false);
+ jsonWriter.WriteBoolean("isAppRecordRequestHandler", false);
}
- jsonWriter.WritePropertyName("isRequestController");
- jsonWriter.WriteValue(dnsApp.Value is IDnsRequestController);
-
- jsonWriter.WritePropertyName("isAuthoritativeRequestHandler");
- jsonWriter.WriteValue(dnsApp.Value is IDnsAuthoritativeRequestHandler);
-
- jsonWriter.WritePropertyName("isQueryLogger");
- jsonWriter.WriteValue(dnsApp.Value is IDnsQueryLogger);
-
- jsonWriter.WritePropertyName("isPostProcessor");
- jsonWriter.WriteValue(dnsApp.Value is IDnsPostProcessor);
+ jsonWriter.WriteBoolean("isRequestController", dnsApp.Value is IDnsRequestController);
+ jsonWriter.WriteBoolean("isAuthoritativeRequestHandler", dnsApp.Value is IDnsAuthoritativeRequestHandler);
+ jsonWriter.WriteBoolean("isQueryLogger", dnsApp.Value is IDnsQueryLogger);
+ jsonWriter.WriteBoolean("isPostProcessor", dnsApp.Value is IDnsPostProcessor);
jsonWriter.WriteEndObject();
}
@@ -331,57 +308,68 @@ namespace DnsServerCore
#region public
- public async Task ListInstalledAppsAsync(JsonTextWriter jsonWriter)
+ public async Task ListInstalledAppsAsync(Utf8JsonWriter jsonWriter)
{
List apps = new List(_dnsWebService.DnsServer.DnsApplicationManager.Applications.Keys);
apps.Sort();
- dynamic jsonStoreAppsArray = null;
-
- if (apps.Count > 0)
+ JsonDocument jsonDocument = null;
+ try
{
- try
+ JsonElement jsonStoreAppsArray = default;
+
+ if (apps.Count > 0)
{
- string storeAppsJsonData = await GetStoreAppsJsonData().WithTimeout(5000);
- jsonStoreAppsArray = JsonConvert.DeserializeObject(storeAppsJsonData);
+ try
+ {
+ string storeAppsJsonData = await GetStoreAppsJsonData().WithTimeout(5000);
+ jsonDocument = JsonDocument.Parse(storeAppsJsonData);
+ jsonStoreAppsArray = jsonDocument.RootElement;
+ }
+ catch
+ { }
}
- catch
- { }
+
+ jsonWriter.WritePropertyName("apps");
+ jsonWriter.WriteStartArray();
+
+ foreach (string app in apps)
+ {
+ if (_dnsWebService.DnsServer.DnsApplicationManager.Applications.TryGetValue(app, out DnsApplication application))
+ WriteAppAsJson(jsonWriter, application, jsonStoreAppsArray);
+ }
+
+ jsonWriter.WriteEndArray();
}
-
- jsonWriter.WritePropertyName("apps");
- jsonWriter.WriteStartArray();
-
- foreach (string app in apps)
+ finally
{
- if (_dnsWebService.DnsServer.DnsApplicationManager.Applications.TryGetValue(app, out DnsApplication application))
- WriteAppAsJson(jsonWriter, application, jsonStoreAppsArray);
+ if (jsonDocument is not null)
+ jsonDocument.Dispose();
}
-
- jsonWriter.WriteEndArray();
}
- public async Task ListStoreApps(JsonTextWriter jsonWriter)
+ public async Task ListStoreApps(Utf8JsonWriter jsonWriter)
{
string storeAppsJsonData = await GetStoreAppsJsonData();
- dynamic jsonStoreAppsArray = JsonConvert.DeserializeObject(storeAppsJsonData);
+ using JsonDocument jsonDocument = JsonDocument.Parse(storeAppsJsonData);
+ JsonElement jsonStoreAppsArray = jsonDocument.RootElement;
jsonWriter.WritePropertyName("storeApps");
jsonWriter.WriteStartArray();
- foreach (dynamic jsonStoreApp in jsonStoreAppsArray)
+ foreach (JsonElement jsonStoreApp in jsonStoreAppsArray.EnumerateArray())
{
- string name = jsonStoreApp.name.Value;
- string description = jsonStoreApp.description.Value;
+ string name = jsonStoreApp.GetProperty("name").GetString();
+ string description = jsonStoreApp.GetProperty("description").GetString();
string version = null;
string url = null;
string size = null;
Version storeAppVersion = null;
Version lastServerVersion = null;
- foreach (dynamic jsonVersion in jsonStoreApp.versions)
+ foreach (JsonElement jsonVersion in jsonStoreApp.GetProperty("versions").EnumerateArray())
{
- string strServerVersion = jsonVersion.serverVersion.Value;
+ string strServerVersion = jsonVersion.GetProperty("serverVersion").GetString();
Version requiredServerVersion = new Version(strServerVersion);
if (_dnsWebService.ServerVersion < requiredServerVersion)
@@ -390,9 +378,9 @@ namespace DnsServerCore
if ((lastServerVersion is not null) && (lastServerVersion > requiredServerVersion))
continue;
- version = jsonVersion.version.Value;
- url = jsonVersion.url.Value;
- size = jsonVersion.size.Value;
+ version = jsonVersion.GetProperty("version").GetString();
+ url = jsonVersion.GetProperty("url").GetString();
+ size = jsonVersion.GetProperty("size").GetString();
storeAppVersion = new Version(version);
lastServerVersion = requiredServerVersion;
@@ -403,33 +391,20 @@ namespace DnsServerCore
jsonWriter.WriteStartObject();
- jsonWriter.WritePropertyName("name");
- jsonWriter.WriteValue(name);
-
- jsonWriter.WritePropertyName("description");
- jsonWriter.WriteValue(description);
-
- jsonWriter.WritePropertyName("version");
- jsonWriter.WriteValue(version);
-
- jsonWriter.WritePropertyName("url");
- jsonWriter.WriteValue(url);
-
- jsonWriter.WritePropertyName("size");
- jsonWriter.WriteValue(size);
+ jsonWriter.WriteString("name", name);
+ jsonWriter.WriteString("description", description);
+ jsonWriter.WriteString("version", version);
+ jsonWriter.WriteString("url", url);
+ jsonWriter.WriteString("size", size);
bool installed = _dnsWebService.DnsServer.DnsApplicationManager.Applications.TryGetValue(name, out DnsApplication installedApp);
- jsonWriter.WritePropertyName("installed");
- jsonWriter.WriteValue(installed);
+ jsonWriter.WriteBoolean("installed", installed);
if (installed)
{
- jsonWriter.WritePropertyName("installedVersion");
- jsonWriter.WriteValue(DnsWebService.GetCleanVersion(installedApp.Version));
-
- jsonWriter.WritePropertyName("updateAvailable");
- jsonWriter.WriteValue(storeAppVersion > installedApp.Version);
+ jsonWriter.WriteString("installedVersion", DnsWebService.GetCleanVersion(installedApp.Version));
+ jsonWriter.WriteBoolean("updateAvailable", storeAppVersion > installedApp.Version);
}
jsonWriter.WriteEndObject();
@@ -438,7 +413,7 @@ namespace DnsServerCore
jsonWriter.WriteEndArray();
}
- public async Task DownloadAndInstallAppAsync(HttpListenerRequest request, JsonTextWriter jsonWriter)
+ public async Task DownloadAndInstallAppAsync(HttpListenerRequest request, Utf8JsonWriter jsonWriter)
{
string name = request.QueryString["name"];
if (string.IsNullOrEmpty(name))
@@ -479,7 +454,7 @@ namespace DnsServerCore
_dnsWebService.Log.Write(DnsWebService.GetRequestRemoteEndPoint(request), "[" + _dnsWebService.GetSession(request).User.Username + "] DNS application '" + name + "' was installed successfully from: " + url);
jsonWriter.WritePropertyName("installedApp");
- WriteAppAsJson(jsonWriter, application, null);
+ WriteAppAsJson(jsonWriter, application);
}
}
finally
@@ -495,7 +470,7 @@ namespace DnsServerCore
}
}
- public async Task DownloadAndUpdateAppAsync(HttpListenerRequest request, JsonTextWriter jsonWriter)
+ public async Task DownloadAndUpdateAppAsync(HttpListenerRequest request, Utf8JsonWriter jsonWriter)
{
string name = request.QueryString["name"];
if (string.IsNullOrEmpty(name))
@@ -515,10 +490,10 @@ namespace DnsServerCore
_dnsWebService.Log.Write(DnsWebService.GetRequestRemoteEndPoint(request), "[" + _dnsWebService.GetSession(request).User.Username + "] DNS application '" + name + "' was updated successfully from: " + url);
jsonWriter.WritePropertyName("updatedApp");
- WriteAppAsJson(jsonWriter, application, null);
+ WriteAppAsJson(jsonWriter, application);
}
- public async Task InstallAppAsync(HttpListenerRequest request, JsonTextWriter jsonWriter)
+ public async Task InstallAppAsync(HttpListenerRequest request, Utf8JsonWriter jsonWriter)
{
string name = request.QueryString["name"];
if (string.IsNullOrEmpty(name))
@@ -564,7 +539,7 @@ namespace DnsServerCore
_dnsWebService.Log.Write(DnsWebService.GetRequestRemoteEndPoint(request), "[" + _dnsWebService.GetSession(request).User.Username + "] DNS application '" + name + "' was installed successfully.");
jsonWriter.WritePropertyName("installedApp");
- WriteAppAsJson(jsonWriter, application, null);
+ WriteAppAsJson(jsonWriter, application);
}
}
finally
@@ -580,7 +555,7 @@ namespace DnsServerCore
}
}
- public async Task UpdateAppAsync(HttpListenerRequest request, JsonTextWriter jsonWriter)
+ public async Task UpdateAppAsync(HttpListenerRequest request, Utf8JsonWriter jsonWriter)
{
string name = request.QueryString["name"];
if (string.IsNullOrEmpty(name))
@@ -626,7 +601,7 @@ namespace DnsServerCore
_dnsWebService.Log.Write(DnsWebService.GetRequestRemoteEndPoint(request), "[" + _dnsWebService.GetSession(request).User.Username + "] DNS application '" + name + "' was updated successfully.");
jsonWriter.WritePropertyName("updatedApp");
- WriteAppAsJson(jsonWriter, application, null);
+ WriteAppAsJson(jsonWriter, application);
}
}
finally
@@ -654,7 +629,7 @@ namespace DnsServerCore
_dnsWebService.Log.Write(DnsWebService.GetRequestRemoteEndPoint(request), "[" + _dnsWebService.GetSession(request).User.Username + "] DNS application '" + name + "' was uninstalled successfully.");
}
- public async Task GetAppConfigAsync(HttpListenerRequest request, JsonTextWriter jsonWriter)
+ public async Task GetAppConfigAsync(HttpListenerRequest request, Utf8JsonWriter jsonWriter)
{
string name = request.QueryString["name"];
if (string.IsNullOrEmpty(name))
@@ -667,8 +642,7 @@ namespace DnsServerCore
string config = await application.GetConfigAsync();
- jsonWriter.WritePropertyName("config");
- jsonWriter.WriteValue(config);
+ jsonWriter.WriteString("config", config);
}
public async Task SetAppConfigAsync(HttpListenerRequest request)