WebSocketDatabaseProxyEngine.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using InABox.Rpc;
  4. using PRSServices;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace PRSServer;
  11. internal class WebSocketDatabaseProxyEngine : DatabaseProxyEngine<WebSocketDatabaseProxyProperties>
  12. {
  13. private RpcSocketProxyServer ProxyServer;
  14. private CertificateManager CertificateManager;
  15. protected override void RunProxy()
  16. {
  17. Logger.Send(LogType.Information, "", "Starting Listener on port " + Properties.ListenPort);
  18. CertificateManager = new CertificateManager(CertificateFileName());
  19. CertificateManager.UpdateCertificate += CertificateManager_UpdateCertificate;
  20. CertificateManager.CertificateExpiring += CertificateManager_CertificateExpiring;
  21. CertificateManager.CertificateExpired += CertificateManager_CertificateExpired;
  22. try
  23. {
  24. var certificate = CertificateManager.GetCertificate();
  25. ProxyServer = new RpcSocketProxyServer(Properties.ListenPort, ServerTransport, certificate);
  26. ProxyServer.Start();
  27. }
  28. catch (Exception eListen)
  29. {
  30. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  31. }
  32. }
  33. private void CertificateManager_CertificateExpired()
  34. {
  35. Logger.Send(LogType.Information, "", "Expiry of certificate reached; restarting HTTPS listener...");
  36. ProxyServer.Stop();
  37. ProxyServer = new RpcSocketProxyServer(Properties.ListenPort, ServerTransport, CertificateManager.GetCertificate());
  38. ProxyServer.Start();
  39. }
  40. private void CertificateManager_CertificateExpiring(DateTime expiry)
  41. {
  42. var message = expiry.Date == DateTime.Now.Date
  43. ? $"HTTPS Certificate for Database Engine will expire today at {expiry.TimeOfDay:hh\\:mm}"
  44. : $"HTTPS Certificate for Database Engine will expire in {(expiry - DateTime.Now).Days} at {expiry:dd/MM/yyyy hh:mm}";
  45. Logger.Send(LogType.Information, "DATABASE", message);
  46. }
  47. private void CertificateManager_UpdateCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
  48. {
  49. Logger.Send(LogType.Information, "DATABASE", "HTTPS Certificate with greater expiry date found; restarting HTTPS listener...");
  50. ProxyServer.Stop();
  51. ProxyServer = new RpcSocketProxyServer(Properties.ListenPort, ServerTransport, certificate);
  52. ProxyServer.Start();
  53. }
  54. private string CertificateFileName() =>
  55. !string.IsNullOrWhiteSpace(Properties.CertificateFile)
  56. ? Properties.CertificateFile
  57. : CertificateEngine.CertificateFile;
  58. public override void Stop()
  59. {
  60. ProxyServer.Stop();
  61. }
  62. }