using System; using System.Collections.Generic; using System.Text.Json.Serialization; using Wino.Core.Domain.Entities.Shared; namespace Wino.Core.Domain.Models.AutoDiscovery; public class AutoDiscoverySettings { [JsonPropertyName("domain")] public string Domain { get; set; } [JsonPropertyName("password")] public string Password { get; set; } [JsonPropertyName("settings")] public List Settings { get; set; } /// /// Gets whether this domain requires additional steps for password like app-specific password or sth. /// public bool IsPasswordSupportLinkAvailable => !string.IsNullOrEmpty(Password) && Uri.TryCreate(Password, UriKind.Absolute, out _); public AutoDiscoveryMinimalSettings UserMinimalSettings { get; set; } public CustomServerInformation ToServerInformation() { var imapSettings = GetImapSettings(); var smtpSettings = GetSmptpSettings(); if (imapSettings == null || smtpSettings == null) return null; string imapUrl = imapSettings.Address; string smtpUrl = smtpSettings.Address; string imapUsername = imapSettings.Username; string smtpUsername = smtpSettings.Username; int imapPort = imapSettings.Port; int smtpPort = smtpSettings.Port; var serverInfo = new CustomServerInformation { Id = Guid.NewGuid(), DisplayName = UserMinimalSettings.DisplayName, Address = UserMinimalSettings.Email, IncomingServerPassword = UserMinimalSettings.Password, OutgoingServerPassword = UserMinimalSettings.Password, IncomingAuthenticationMethod = Enums.ImapAuthenticationMethod.Auto, OutgoingAuthenticationMethod = Enums.ImapAuthenticationMethod.Auto, OutgoingServerSocketOption = Enums.ImapConnectionSecurity.Auto, IncomingServerSocketOption = Enums.ImapConnectionSecurity.Auto, IncomingServer = imapUrl, OutgoingServer = smtpUrl, IncomingServerPort = imapPort.ToString(), OutgoingServerPort = smtpPort.ToString(), IncomingServerType = Enums.CustomIncomingServerType.IMAP4, IncomingServerUsername = imapUsername, OutgoingServerUsername = smtpUsername, MaxConcurrentClients = 5 }; return serverInfo; } public AutoDiscoveryProviderSetting GetImapSettings() => Settings?.Find(a => a.Protocol == "IMAP"); public AutoDiscoveryProviderSetting GetSmptpSettings() => Settings?.Find(a => a.Protocol == "SMTP"); }