diff --git a/CrystalConnector/CrystalConnector.csproj b/CrystalConnector/CrystalConnector.csproj
index 75fdd48..b29c029 100644
--- a/CrystalConnector/CrystalConnector.csproj
+++ b/CrystalConnector/CrystalConnector.csproj
@@ -8,28 +8,28 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
- PreserveNewest
-
-
- PreserveNewest
-
+
+ PreserveNewest
+
+
+ PreserveNewest
+
diff --git a/CrystalConnector/Program.cs b/CrystalConnector/Program.cs
index 785f193..44fcd66 100644
--- a/CrystalConnector/Program.cs
+++ b/CrystalConnector/Program.cs
@@ -1,4 +1,6 @@
-using CrystalConnector;
+using System.Net;
+using System.Security.Cryptography.X509Certificates;
+using CrystalConnector;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -25,15 +27,6 @@ builder.ConfigureAppConfiguration((context, config) =>
builder.UseContentRoot(Environment.CurrentDirectory);
-builder.ConfigureWebHost(webHost =>
-{
- webHost.UseStartup();
-
- webHost.UseKestrel(kestrel =>
- {
- });
-});
-
builder.ConfigureLogging(logging =>
{
logging.ClearProviders()
@@ -41,6 +34,50 @@ builder.ConfigureLogging(logging =>
.AddNLog();
});
+builder.ConfigureWebHost(webHost =>
+{
+ webHost.UseStartup();
+
+ webHost.UseKestrel();
+
+ webHost.ConfigureKestrel((context, kestrel) =>
+ {
+ var config = context.Configuration;
+ foreach (var listener in config.GetSection("Server:Listener").GetChildren())
+ {
+ if (listener.GetValue("Enabled"))
+ {
+ var ipStr = listener.GetValue("IP");
+ if (!IPAddress.TryParse(ipStr, out var ip))
+ {
+ continue;
+ }
+
+ var port = listener.GetValue("Port");
+
+ var https = listener.GetSection("Https");
+ if (!https.GetValue("Enabled") || https.GetValue("Cert") == null)
+ {
+ kestrel.Listen(ip, port);
+ }
+ else
+ {
+ var cert = https.GetValue("Cert");
+ var password = https.GetValue("Password");
+
+ kestrel.Listen(ip, port, listenOptions =>
+ {
+ listenOptions.UseHttps(httpsOptions =>
+ {
+ httpsOptions.ServerCertificate = X509Certificate2.CreateFromEncryptedPemFile(cert!, password);
+ });
+ });
+ }
+ }
+ }
+ });
+});
+
using var host = builder.Build();
await host.RunAsync();
diff --git a/CrystalConnector/Startup.cs b/CrystalConnector/Startup.cs
index 4796ca8..2ea873d 100644
--- a/CrystalConnector/Startup.cs
+++ b/CrystalConnector/Startup.cs
@@ -1,12 +1,15 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using NLog;
namespace CrystalConnector;
public class Startup
{
- public IConfiguration Config { get; }
+ private IConfiguration Config { get; }
+
+ private Logger Logger { get; } = LogManager.GetCurrentClassLogger();
public Startup(IConfiguration config)
{
diff --git a/CrystalConnector/config.json b/CrystalConnector/config.json
index bdc18c6..af58a73 100644
--- a/CrystalConnector/config.json
+++ b/CrystalConnector/config.json
@@ -1,16 +1,16 @@
{
- "server": {
- "listen": [
- {
- "enabled": true,
- "ip": "0.0.0.0",
- "port": 33927,
- "https": {
- "enabled": false,
- "cert": "cert.pfx",
- "password": ""
- }
- }
- ]
- }
+ "Server": {
+ "Listener": [
+ {
+ "Enabled": true,
+ "IP": "0.0.0.0",
+ "Port": 33927,
+ "Https": {
+ "Enabled": false,
+ "Cert": "cert.pfx",
+ "Password": ""
+ }
+ }
+ ]
+ }
}
\ No newline at end of file