using System; using System.Collections.Generic; using System.IO; using InABox.API; using InABox.Core; namespace PRSServer { public class DatabaseServerLookupGenerator : LookupGenerator { public DatabaseServerLookupGenerator(Server[] items) : base(items) { } protected override void DoGenerateLookups() { foreach (var server in Items) { if (server.Type == ServerType.Database) { AddValue(server.Key, server.Name); } } } } public class DatabaseServerProperties : ServerProperties { public DatabaseServerProperties() { FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PRS", "prs.dbs"); Port = 8000; GoogleAPIKey = ""; JobPrefix = ""; PurchaseOrderPrefix = ""; SMSProviderProperties = new Dictionary(); PasswordExpiryTime = 90; SessionExpiryTime = 120; ColorScheme = "#FF6495ED"; } [FileNameEditor("Database Files (*.dbs)|*.dbs", AllowView = false, RequireExisting = false)] [EditorSequence(1)] public string FileName { get; set; } [EditorSequence(2)] public int Port { get; set; } [EditorSequence(3)] public int RPCPort { get; set; } [EditorSequence(4)] public string GoogleAPIKey { get; set; } [CodeEditor(Editable = Editable.Enabled)] [EditorSequence(5)] public string JobPrefix { get; set; } [CodeEditor(Editable = Editable.Enabled)] [EditorSequence(6)] public string PurchaseOrderPrefix { get; set; } [EditorSequence(7)] public int PasswordExpiryTime { get; set; } [EditorSequence(8)] [Caption("Login Expiry Time (mins)")] public int SessionExpiryTime { get; set; } [NullEditor] public Dictionary? SMSProviderProperties { get; set; } [EditorSequence(9)] [FileNameEditor("Certificate Files (*.pfx)|*.pfx")] public string? CertificateFile { get; set; } [EditorSequence(10)] public string? CertificateExpirationSubscriber { get; set; } [EditorSequence(11)] [ColorEditor] public string ColorScheme { get; set; } [EmbeddedImageEditor(MaximumHeight = 450, MaximumWidth = 450)] [EditorSequence(12)] public byte[]? Logo { get; set; } [EditorSequence(13)] public ServerEmailType EmailType { get; set; } [NullEditor] public string EmailProperties { get; set; } = ""; public override ServerType Type() { return ServerType.Database; } public static string GetPipeName(string serviceName, bool newstyle) => newstyle ? $"{serviceName}_RPC" : $"{serviceName}_IPC"; public BaseObject GetEmailProperties() { return EmailType switch { ServerEmailType.IMAP => Serialization.Deserialize(EmailProperties) ?? new ServerEmailIMAPProperties(), ServerEmailType.Exchange => Serialization.Deserialize(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; } } } }