Ver código fonte

Added server email settings

Kenric Nugteren 5 meses atrás
pai
commit
0c361ff62c

+ 33 - 10
prs.classes/Server/Properties/DatabaseServerProperties.cs

@@ -36,7 +36,6 @@ namespace PRSServer
             SMSProviderProperties = new Dictionary<SMSProviderType, string>();
             PasswordExpiryTime = 90;
             SessionExpiryTime = 120;
-            CertificateFile = null;
             ColorScheme = "#FF6495ED";
         }
 
@@ -44,15 +43,12 @@ namespace PRSServer
         [EditorSequence(1)]
         public string FileName { get; set; }
 
-        [IntegerEditor]
         [EditorSequence(2)]
         public int Port { get; set; }
         
-        [IntegerEditor]
         [EditorSequence(3)]
         public int RPCPort { get; set; }
 
-        [TextBoxEditor]
         [EditorSequence(4)]
         public string GoogleAPIKey { get; set; }
 
@@ -65,11 +61,9 @@ namespace PRSServer
         public string PurchaseOrderPrefix { get; set; }
 
         [EditorSequence(7)]
-        [IntegerEditor]
         public int PasswordExpiryTime { get; set; }
 
         [EditorSequence(8)]
-        [IntegerEditor]
         [Caption("Login Expiry Time (mins)")]
         public int SessionExpiryTime { get; set; }
 
@@ -78,11 +72,10 @@ namespace PRSServer
 
         [EditorSequence(9)]
         [FileNameEditor("Certificate Files (*.pfx)|*.pfx")]
-        public string CertificateFile { get; set; }
+        public string? CertificateFile { get; set; }
 
         [EditorSequence(10)]
-        [TextBoxEditor]
-        public string CertificateExpirationSubscriber { get; set; }
+        public string? CertificateExpirationSubscriber { get; set; }
         
         [EditorSequence(11)]
         [ColorEditor]
@@ -90,7 +83,13 @@ namespace PRSServer
         
         [EmbeddedImageEditor(MaximumHeight = 450, MaximumWidth = 450)]
         [EditorSequence(12)]
-        public byte[] Logo { get; set; }
+        public byte[]? Logo { get; set; }
+
+        [EditorSequence(13)]
+        public ServerEmailType EmailType { get; set; }
+
+        [NullEditor]
+        public string EmailProperties { get; set; } = "";
         
         public override ServerType Type()
         {
@@ -101,5 +100,29 @@ namespace PRSServer
             newstyle 
                 ? $"{serviceName}_RPC"
                 : $"{serviceName}_IPC";
+
+        public BaseObject GetEmailProperties()
+        {
+            return EmailType switch
+            {
+                ServerEmailType.IMAP => Serialization.Deserialize<ServerEmailIMAPProperties>(EmailProperties)
+                                        ?? new ServerEmailIMAPProperties(),
+                ServerEmailType.Exchange => Serialization.Deserialize<ServerEmailExchangeProperties>(EmailProperties)
+                                        ?? new ServerEmailExchangeProperties(),
+                _ => throw new Exception($"Invalid email type {EmailType}"),
+            };
+        }
+        public void SetEmailProperties(BaseObject props)
+        {
+            EmailProperties = Serialization.Serialize(props);
+            if(props is ServerEmailIMAPProperties)
+            {
+                EmailType = ServerEmailType.IMAP;
+            }
+            else if(props is ServerEmailExchangeProperties)
+            {
+                EmailType = ServerEmailType.Exchange;
+            }
+        }
     }
 }

+ 45 - 0
prs.classes/Server/Properties/ServerEmailProperties.cs

@@ -0,0 +1,45 @@
+using InABox.Core;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace PRSServer
+{
+    public enum ServerEmailType
+    {
+        IMAP,
+        Exchange
+    }
+
+    public class ServerEmailExchangeProperties : BaseObject
+    {
+        [EditorSequence(1)]
+        public string Host { get; set; } = "";
+
+        [EditorSequence(2)]
+        public int Port { get; set; }
+
+        [EditorSequence(3)]
+        public string EmailAddress { get; set; } = "";
+
+        [PasswordEditor]
+        [EditorSequence(4)]
+        public string Password { get; set; } = "";
+    }
+
+    public class ServerEmailIMAPProperties : BaseObject
+    {
+        [EditorSequence(1)]
+        public string Host { get; set; } = "";
+
+        [EditorSequence(2)]
+        public int Port { get; set; }
+
+        [EditorSequence(3)]
+        public string EmailAddress { get; set; } = "";
+
+        [PasswordEditor]
+        [EditorSequence(4)]
+        public string Password { get; set; } = "";
+    }
+}

+ 2 - 6
prs.server/Engines/Database/DatabaseEngine.cs

@@ -312,14 +312,10 @@ public class DatabaseEngine : Engine<DatabaseServerProperties>
     }
 
     #endregion
-    
+
     #region Certificate Management
 
-    private string CertificateFileName() =>
-        !string.IsNullOrWhiteSpace(Properties.CertificateFile)
-        ? Properties.CertificateFile
-        : CertificateEngine.CertificateFile;
-    
+    private string CertificateFileName() => Properties.CertificateFile.NotWhiteSpaceOr(CertificateEngine.CertificateFile);
 
     private void SendCertificateExpiryNotification(DateTime expiry)
     {

+ 22 - 0
prs.server/Forms/ServerGrid.cs

@@ -713,6 +713,7 @@ public class ServerGrid : DynamicGrid<Server>
                 propertyEditor.UnloadEditorPages(true);
             };
         }
+        propertyEditor.OnFormCustomiseEditor += PropertyEditor_OnFormCustomiseEditor;
 
         propertyEditor.ReadOnly = !enabled;
 
@@ -722,6 +723,27 @@ public class ServerGrid : DynamicGrid<Server>
         return propertyEditor.ShowDialog() == true;
     }
 
+    private void PropertyEditor_OnFormCustomiseEditor(IDynamicEditorForm sender, object[] items, DynamicGridColumn column, BaseEditor editor)
+    {
+        var type = items[0].GetType();
+        if(type == typeof(DatabaseServerProperties) && column.ColumnName == nameof(DatabaseServerProperties.EmailType) && editor is EnumLookupEditor lookup)
+        {
+            var button = new EditorButton(items[0] as DatabaseServerProperties, "Edit", 50, (o, item) =>
+            {
+                if (item is not DatabaseServerProperties properties) return;
+
+                var props = properties.GetEmailProperties();
+                var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicItemsListGrid<>), props.GetType());
+                if (grid.EditItems([props]))
+                {
+                    properties.SetEmailProperties(props);
+                    sender.SetEditorValue(column.ColumnName, properties.EmailType);
+                }
+            }, false);
+            lookup.Buttons = [button];
+        }
+    }
+
     #endregion
 
     #region Service Start / Stop Actions