|
@@ -12,6 +12,7 @@ using InABox.Core;
|
|
|
using InABox.Database;
|
|
|
using InABox.Database.SQLite;
|
|
|
using InABox.IPC;
|
|
|
+using InABox.Rpc;
|
|
|
using InABox.Server;
|
|
|
using InABox.Wpf.Reports;
|
|
|
using PRS.Shared;
|
|
@@ -26,9 +27,9 @@ namespace PRSServer
|
|
|
private string PipeName;
|
|
|
private IPCServer? PipeServer;
|
|
|
|
|
|
- //private IRPCServer? _pipeserver;
|
|
|
- //private IRPCServer? _socketserver;
|
|
|
-
|
|
|
+ //private IRpcServer? _pipeserver;
|
|
|
+ private IRpcServer? _socketserver;
|
|
|
+
|
|
|
public override void Configure(Server server)
|
|
|
{
|
|
|
base.Configure(server);
|
|
@@ -45,7 +46,7 @@ namespace PRSServer
|
|
|
{
|
|
|
if (RestListener.Certificate != null)
|
|
|
result.Add(new PortStatus(Properties.Port, PortType.Database, PortState.Secure));
|
|
|
- else
|
|
|
+ else
|
|
|
result.Add(new PortStatus(Properties.Port, PortType.Database, PortState.Available));
|
|
|
}
|
|
|
if (Properties.WebSocketPort != 0)
|
|
@@ -55,12 +56,12 @@ namespace PRSServer
|
|
|
|
|
|
private void ConfigureSMSProviders()
|
|
|
{
|
|
|
- if(Properties.SMSProviderProperties == null) return;
|
|
|
- if(Properties.SMSProviderProperties.Count == 0)
|
|
|
+ if (Properties.SMSProviderProperties == null) return;
|
|
|
+ if (Properties.SMSProviderProperties.Count == 0)
|
|
|
{
|
|
|
Logger.Send(LogType.Information, "", "No SMS Providers to initialise");
|
|
|
}
|
|
|
- foreach(var (type, properties) in Properties.SMSProviderProperties)
|
|
|
+ foreach (var (type, properties) in Properties.SMSProviderProperties)
|
|
|
{
|
|
|
var provider = SMSProviderProperties.ToProperties(type, properties);
|
|
|
switch (provider)
|
|
@@ -132,9 +133,9 @@ namespace PRSServer
|
|
|
)).Rows.Select(x => x.ToObject<Notification>());
|
|
|
}
|
|
|
|
|
|
- private void ConfigureNotifier()
|
|
|
+ private void ConfigurePusher()
|
|
|
{
|
|
|
- Notify.AddPollHandler(PollNotifications);
|
|
|
+ PushManager.AddPollHandler(PollNotifications);
|
|
|
}
|
|
|
|
|
|
public override void Run()
|
|
@@ -201,39 +202,59 @@ namespace PRSServer
|
|
|
CredentialsCache.LoadSessionCache();
|
|
|
CredentialsCache.SetSessionExpiryTime(TimeSpan.FromMinutes(Properties.SessionExpiryTime));
|
|
|
|
|
|
- Logger.Send(LogType.Information, "", string.Format("Starting Rest Listener: Port={0}", Properties.Port));
|
|
|
- if (Properties.WebSocketPort != 0)
|
|
|
- {
|
|
|
- // Put a log saying to start the web socket listener.
|
|
|
- Logger.Send(LogType.Information, "", string.Format("Starting Web Socket Listener: Port={0}", Properties.WebSocketPort));
|
|
|
- }
|
|
|
- // This should be out of the if-statement, since the listener needs to be initialised, even if the web socket port is 0.
|
|
|
- RestListener.Init(Properties.WebSocketPort);
|
|
|
+ // if (Properties.WebSocketPort != 0)
|
|
|
+ // {
|
|
|
+ // // Put a log saying to start the web socket listener.
|
|
|
+ // Logger.Send(LogType.Information, "", string.Format("Starting Web Socket Listener: Port={0}", Properties.WebSocketPort));
|
|
|
+ // }
|
|
|
+ // // This should be out of the if-statement, since the listener needs to be initialised, even if the web socket port is 0.
|
|
|
+
|
|
|
+ Logger.Send(LogType.Information, "", string.Format("Starting Rest Listener: Port={0}", 0));
|
|
|
|
|
|
+ RestListener.Init(0); //this used to be Properties.WebSocketPort, however we are temporarily using this port to configure the RPCSocket connection
|
|
|
InitialisePort();
|
|
|
RestListener.Start();
|
|
|
- // _socketserver = new RPCServer<RPCServerSocketTransport>(() => new RPCServerSocketTransport(Properties.Port));
|
|
|
- // _socketserver.OnLog += (type, userid, message) => Logger.Send(type, userid, $"[S] {message}");
|
|
|
- // _socketserver.Start();
|
|
|
- Logger.Send(LogType.Information, "", string.Format("Rest Server Started listening on port {0}", Properties.Port));
|
|
|
-
|
|
|
+
|
|
|
+ Logger.Send(LogType.Information, "", string.Format("Rest Listener Started: Port={0}", 0));
|
|
|
+
|
|
|
+ //TODO remove this (only being used for temporary site app to connect to)
|
|
|
+ if (Properties.WebSocketPort == 0)
|
|
|
+ Properties.WebSocketPort = 8050;
|
|
|
+
|
|
|
+ if (Properties.WebSocketPort != 0)
|
|
|
+ {
|
|
|
+ Logger.Send(LogType.Information, "", string.Format("Starting Socket Listener from Properties.WebSocketPort: Port={0}", Properties.WebSocketPort));
|
|
|
+ var sockettransport = new RpcServerSocketTransport(Properties.WebSocketPort, CertificateFileName());
|
|
|
+ _socketserver = new RpcServer<RpcServerSocketTransport>(sockettransport);
|
|
|
+ _socketserver.OnLog += (type, userid, message, parameters) => Logger.Send(type, userid, $"[S] {message}", parameters);
|
|
|
+ _socketserver.Start();
|
|
|
+ PushManager.AddPusher(sockettransport);
|
|
|
+ Logger.Send(LogType.Information, "", string.Format("Socket Listener Started from Properties.WebSocketPort: Port={0}", Properties.WebSocketPort));
|
|
|
+ }
|
|
|
|
|
|
Logger.Send(LogType.Information, "", $"Starting Pipe Listener with pipe name {PipeName}");
|
|
|
- // _pipeserver = new RPCServer<RPCServerPipeTransport>(() => new RPCServerPipeTransport(PipeName));
|
|
|
- // _pipeserver.OnLog += (type, userid, message) => Logger.Send(type, userid, $"[P] {message}");
|
|
|
- // _pipeserver.Start();
|
|
|
+
|
|
|
PipeServer = new IPCServer(PipeName);
|
|
|
PipeServer.Start();
|
|
|
|
|
|
Logger.Send(LogType.Information, "", "Pipe Listener started");
|
|
|
|
|
|
- ConfigureNotifier();
|
|
|
+ //var pipetransport = new RpcServerPipeTransport(PipeName);
|
|
|
+ //_pipeserver = new RpcServer<RpcServerPipeTransport>(pipetransport);
|
|
|
+ //_pipeserver.OnLog += (type, userid, message, parameters) => Logger.Send(type, userid, $"[P] {message}", parameters);
|
|
|
+ //_pipeserver.Start();
|
|
|
+ //PushManager.AddPusher(pipetransport);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ ConfigurePusher();
|
|
|
+
|
|
|
}
|
|
|
|
|
|
#region Certificate Management
|
|
|
|
|
|
- private string CertificateFileName() =>
|
|
|
- !string.IsNullOrWhiteSpace(Properties.CertificateFile)
|
|
|
+ private string CertificateFileName() =>
|
|
|
+ !string.IsNullOrWhiteSpace(Properties.CertificateFile)
|
|
|
? Properties.CertificateFile
|
|
|
: CertificateEngine.CertificateFile;
|
|
|
|
|
@@ -271,7 +292,7 @@ namespace PRSServer
|
|
|
else
|
|
|
{
|
|
|
// Once every day, check certificate expiry
|
|
|
- if(CertificateRefreshTimer == null)
|
|
|
+ if (CertificateRefreshTimer == null)
|
|
|
{
|
|
|
CertificateRefreshTimer = new Timer(1000 * 60 * 60 * 24);
|
|
|
CertificateRefreshTimer.Elapsed += CertificateTimer_Elapsed;
|
|
@@ -298,7 +319,7 @@ namespace PRSServer
|
|
|
var employee = DbFactory.Provider.Query(
|
|
|
new Filter<Employee>(x => x.UserLink.UserID).IsEqualTo(Properties.CertificateExpirationSubscriber),
|
|
|
new Columns<Employee>(x => x.ID, x => x.UserLink.ID, x => x.UserLink.UserID)).Rows.FirstOrDefault()?.ToObject<Employee>();
|
|
|
- if(employee != null)
|
|
|
+ if (employee != null)
|
|
|
{
|
|
|
var notification = new Notification();
|
|
|
notification.Employee.ID = employee.ID;
|
|
@@ -323,7 +344,7 @@ namespace PRSServer
|
|
|
cert = new X509Certificate2(CertificateFileName());
|
|
|
}
|
|
|
|
|
|
- if(cert != null && cert.NotAfter > RestListener.Certificate.NotAfter && cert.NotAfter > DateTime.Now)
|
|
|
+ if (cert != null && cert.NotAfter > RestListener.Certificate.NotAfter && cert.NotAfter > DateTime.Now)
|
|
|
{
|
|
|
Logger.Send(LogType.Information, "DATABASE", "HTTPS Certificate with greater expiry date found; restarting HTTPS listener...");
|
|
|
RestartListener();
|
|
@@ -331,7 +352,7 @@ namespace PRSServer
|
|
|
|
|
|
var expiry = RestListener.Certificate.NotAfter;
|
|
|
var untilExpiry = expiry - DateTime.Now;
|
|
|
- if(untilExpiry.TotalDays <= 7)
|
|
|
+ if (untilExpiry.TotalDays <= 7)
|
|
|
{
|
|
|
SendCertificateExpiryNotification(expiry);
|
|
|
if (untilExpiry.TotalDays <= 1)
|
|
@@ -416,13 +437,16 @@ namespace PRSServer
|
|
|
{
|
|
|
Logger.Send(LogType.Information, "", "Stopping..");
|
|
|
|
|
|
+ _socketserver?.Stop();
|
|
|
+ _socketserver = null;
|
|
|
+
|
|
|
//_pipeserver?.Stop();
|
|
|
//_pipeserver = null;
|
|
|
PipeServer?.Dispose();
|
|
|
|
|
|
RestListener.Stop();
|
|
|
CredentialsCache.SaveSessionCache();
|
|
|
-
|
|
|
+
|
|
|
CertificateRefreshTimer?.Stop();
|
|
|
CertificateHaltTimer?.Stop();
|
|
|
}
|