LogoutUserHandler

master
Tudor Stanciu 2022-01-17 10:07:23 +02:00
parent a97c8d9971
commit 49de4cfdda
3 changed files with 77 additions and 0 deletions

View File

@ -0,0 +1,63 @@
using MediatR;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using NetworkResurrector.Agent.PublishedLanguage.Dto;
using NetworkResurrector.Agent.Wrapper.Services;
using NetworkResurrector.Api.Domain.Constants;
using NetworkResurrector.Api.Domain.Repositories;
using NetworkResurrector.Api.PublishedLanguage.Commands;
using NetworkResurrector.Api.PublishedLanguage.Events;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace NetworkResurrector.Api.Application.CommandHandlers
{
public class LogoutUserHandler : IRequestHandler<LogoutUser, UserLoggedOut>
{
private readonly ILogger<LogoutUserHandler> _logger;
private readonly INetworkRepository _repository;
private readonly IResurrectorAgentService _resurrectorAgentService;
private readonly IConfiguration _configuration;
public LogoutUserHandler(ILogger<LogoutUserHandler> logger, INetworkRepository repository, IResurrectorAgentService resurrectorAgentService, IConfiguration configuration)
{
_logger=logger;
_repository=repository;
_resurrectorAgentService=resurrectorAgentService;
_configuration=configuration;
}
public async Task<UserLoggedOut> Handle(LogoutUser command, CancellationToken cancellationToken)
{
_logger.LogDebug($"Start logging out the user connected on machine {command.MachineId}");
var machine = await _repository.GetMachine(command.MachineId);
var powerConfiguration = await _repository.GetPowerActionConfiguration(command.MachineId, PowerActions.LOGOUT);
//log activity
var ipAddressOrMachineName = machine.IPv4Address ?? machine.MachineName;
UserLoggedOut result;
switch (powerConfiguration.Performer.PerformerCode)
{
case PowerActionPerformers.NETWORK_RESURRECTOR_AGENT:
if (machine.Agent == null)
throw new Exception($"Cannot use network resurrector agent as logout performer for machine '{ipAddressOrMachineName}' because it is not configured.");
var owner = new ActionOwner(_configuration.GetValue<string>("Service:Code"));
var LogoutResultByAgent = await _resurrectorAgentService.Logout(ipAddressOrMachineName, machine.Agent.AgentPort, owner);
var status = LogoutResultByAgent.Success ? $"The user from machine '{ipAddressOrMachineName}' was successfully logged out." : $"The user from machine '{ipAddressOrMachineName}' could not be logged out.";
result = new UserLoggedOut(LogoutResultByAgent.Success, status);
break;
default:
throw new Exception($"Power action performer {powerConfiguration.Performer.PerformerCode} is not implemented.");
}
_logger.LogDebug($"Logging out the user from machine {command.MachineId} finished. Success: {result.Success}; Status: {result.Status}");
return result;
}
}
}

View File

@ -0,0 +1,10 @@
using NDB.Application.DataContracts;
using NetworkResurrector.Api.PublishedLanguage.Events;
namespace NetworkResurrector.Api.PublishedLanguage.Commands
{
public class LogoutUser : Command<UserLoggedOut>
{
public int MachineId { get; set; }
}
}

View File

@ -0,0 +1,4 @@
namespace NetworkResurrector.Api.PublishedLanguage.Events
{
public record UserLoggedOut(bool Success, string Status);
}