SSL Handshake Prompt for IMAP (#381)
* Fix an incorrect namespace for copy auth url request. * Implemented SSL handshake process for testing imap configuration. * Implemented SSL handshake process for testing imap configuration. * Replace certificate PathIcon with WinoFontIcon in XAML.
This commit is contained in:
@@ -22,6 +22,7 @@ namespace Wino.Server.Core
|
||||
nameof(SynchronizationExistenceCheckRequest) => App.Current.Services.GetService<SyncExistenceHandler>(),
|
||||
nameof(ServerTerminationModeChanged) => App.Current.Services.GetService<ServerTerminationModeHandler>(),
|
||||
nameof(TerminateServerRequested) => App.Current.Services.GetService<TerminateServerRequestHandler>(),
|
||||
nameof(ImapConnectivityTestRequested) => App.Current.Services.GetService<ImapConnectivityTestHandler>(),
|
||||
_ => throw new Exception($"Server handler for {typeName} is not registered."),
|
||||
};
|
||||
}
|
||||
@@ -38,6 +39,7 @@ namespace Wino.Server.Core
|
||||
serviceCollection.AddTransient<SyncExistenceHandler>();
|
||||
serviceCollection.AddTransient<ServerTerminationModeHandler>();
|
||||
serviceCollection.AddTransient<TerminateServerRequestHandler>();
|
||||
serviceCollection.AddTransient<ImapConnectivityTestHandler>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
50
Wino.Server/MessageHandlers/ImapConnectivityTestHandler.cs
Normal file
50
Wino.Server/MessageHandlers/ImapConnectivityTestHandler.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Wino.Core.Domain.Exceptions;
|
||||
using Wino.Core.Domain.Interfaces;
|
||||
using Wino.Core.Domain.Models.Connectivity;
|
||||
using Wino.Core.Domain.Models.Server;
|
||||
using Wino.Messaging.Server;
|
||||
using Wino.Server.Core;
|
||||
|
||||
namespace Wino.Server.MessageHandlers
|
||||
{
|
||||
public class ImapConnectivityTestHandler : ServerMessageHandler<ImapConnectivityTestRequested, ImapConnectivityTestResults>
|
||||
{
|
||||
private readonly IImapTestService _imapTestService;
|
||||
|
||||
public override WinoServerResponse<ImapConnectivityTestResults> FailureDefaultResponse(Exception ex)
|
||||
=> WinoServerResponse<ImapConnectivityTestResults>.CreateErrorResponse(ex.Message);
|
||||
|
||||
public ImapConnectivityTestHandler(IImapTestService imapTestService)
|
||||
{
|
||||
_imapTestService = imapTestService;
|
||||
}
|
||||
|
||||
protected override async Task<WinoServerResponse<ImapConnectivityTestResults>> HandleAsync(ImapConnectivityTestRequested message, CancellationToken cancellationToken = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _imapTestService.TestImapConnectionAsync(message.ServerInformation, message.IsSSLHandshakeAllowed);
|
||||
|
||||
return WinoServerResponse<ImapConnectivityTestResults>.CreateSuccessResponse(ImapConnectivityTestResults.Success());
|
||||
}
|
||||
catch (ImapTestSSLCertificateException sslTestException)
|
||||
{
|
||||
// User must confirm to continue ignoring the SSL certificate.
|
||||
return WinoServerResponse<ImapConnectivityTestResults>.CreateSuccessResponse(ImapConnectivityTestResults.CertificateUIRequired(sslTestException.Issuer, sslTestException.ExpirationDateString, sslTestException.ValidFromDateString));
|
||||
}
|
||||
catch (ImapClientPoolException clientPoolException)
|
||||
{
|
||||
// Connectivity failed with protocol log.
|
||||
return WinoServerResponse<ImapConnectivityTestResults>.CreateSuccessResponse(ImapConnectivityTestResults.Failure(clientPoolException, clientPoolException.ProtocolLog));
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
// Unknown error
|
||||
return WinoServerResponse<ImapConnectivityTestResults>.CreateSuccessResponse(ImapConnectivityTestResults.Failure(exception, string.Empty));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -315,7 +315,9 @@ namespace Wino.Server
|
||||
case nameof(ServerTerminationModeChanged):
|
||||
await ExecuteServerMessageSafeAsync(args, JsonSerializer.Deserialize<ServerTerminationModeChanged>(messageJson, _jsonSerializerOptions));
|
||||
break;
|
||||
|
||||
case nameof(ImapConnectivityTestRequested):
|
||||
await ExecuteServerMessageSafeAsync(args, JsonSerializer.Deserialize<ImapConnectivityTestRequested>(messageJson, _jsonSerializerOptions));
|
||||
break;
|
||||
case nameof(TerminateServerRequested):
|
||||
await ExecuteServerMessageSafeAsync(args, JsonSerializer.Deserialize<TerminateServerRequested>(messageJson, _jsonSerializerOptions));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user