Files
monorepo/LCU.API.Internal.FTP/LCU.Api.Internal.FTP/Services/QueueFtpService.cs
T
2026-03-24 15:28:37 -05:00

181 lines
6.9 KiB
C#

using System;
using Newtonsoft.Json;
using Serilog;
using MassTransit;
using LCU.Api.Internal.FTP.Configuration;
using LCU.Api.Internal.FTPLib.Models.Enums;
using LCU.Api.Internal.FTPLib.Models;
using LCU.Library.Internal.Exceptions;
using LCU.Library.Internal.LcuMassTransitModels;
namespace LCU.Api.Internal.FTP.Services;
public class QueueFtpService : IQueueFtpService
{
private readonly IQueueSshFtpService _queueSshFtpService;
private readonly ISendEndpoint _sendEndpoint;
public QueueFtpService(IQueueSshFtpService queueSshFtpService,
IBusControl busControl,
ReceiveEndpointConfiguration receiveEndpointsConfiguration)
{
_queueSshFtpService = queueSshFtpService;
_sendEndpoint = busControl.GetSendEndpoint(receiveEndpointsConfiguration.ReceiveEndpointUri).Result;
}
[Obsolete("01/04/2022 - After the SftpController endpoints that call this method are no longer in use this can be removed.")]
public void QueueSftp(SftpRequest request)
{
try
{
//If it has localfiledata then we need to use sshftp to accommodate old endpoints.
if (request.LocalFileData != null && request.LocalFileData.Length > 0)
{
var sshFtpRequest = new SshFtpRequest()
{
Protocol = request.Protocol,
HostName = request.HostName,
PortNumber = request.PortNumber,
UserName = request.UserName,
Password = request.Password,
RemoteFilePath = request.RemoteFilePath,
LocalFileData = request.LocalFileData
};
_queueSshFtpService.QueueSshFtpRequest(sshFtpRequest);
return;
}
var winScpUploadFileRequest = new SftpUploadFileRequest()
{
SessionInformation = new SessionInformation()
{
Protocol = request.Protocol,
HostName = request.HostName,
PortNumber = request.PortNumber,
UserName = request.UserName,
Password = request.Password,
SshHostKeyFingerprint = request.SshHostKeyFingerprint
},
LocalFilePath = request.LocalFilePath,
LocalFileName = null,
RemoteFilePath = request.RemoteFilePath,
DynamicNameSetting = null,
ResponseItems = request.ResponseItems
};
var queueRequest = new QueueRequest()
{
Request = JsonConvert.SerializeObject(winScpUploadFileRequest),
FtpType = FtpType.WinScpSftpUpload
};
_sendEndpoint.Send(queueRequest);
Log.Debug($"Queued The Following Sftp Request {request}");
}
catch (Exception ex)
{
Log.Error(ex, $"Failed to Queue Sftp Request. Request: {request}");
throw new ServiceException($"Failed to Queue Sftp Request. Request: {request}");
}
}
[Obsolete("01/04/2022 - After the SftpController endpoints that call this method are no longer in use this can be removed.")]
public void QueueSftpDynamicFileRequest(SftpDynamicFileRequest request)
{
try
{
var winScpUploadFileRequest = new SftpUploadFileRequest()
{
SessionInformation = new SessionInformation()
{
Protocol = request.Protocol,
HostName = request.HostName,
PortNumber = request.PortNumber,
UserName = request.UserName,
Password = request.Password,
SshHostKeyFingerprint = request.SshHostKeyFingerprint
},
LocalFilePath = request.LocalFilePath,
LocalFileName = request.LocalFileName,
RemoteFilePath = request.RemoteFilePath,
DynamicNameSetting = request.DynamicNameSetting,
ResponseItems = request.ResponseItems
};
var queueRequest = new QueueRequest()
{
Request = JsonConvert.SerializeObject(winScpUploadFileRequest),
FtpType = FtpType.WinScpSftpUpload
};
_sendEndpoint.Send(queueRequest);
Log.Debug($"Queued The Following Sftp Request to host {request.HostName}");
}
catch (Exception ex)
{
Log.Error(ex, $"Failed to Queue Sftp dynamic file request. " +
$"Host: {request.HostName}");
throw new ServiceException($"Failed to Queue Sftp dynamic file request. " +
$"Host: {request.HostName}");
}
}
public void QueueSftpUploadRequest(SftpUploadFileRequest request)
{
try
{
var queueRequest = new QueueRequest()
{
Request = JsonConvert.SerializeObject(request),
FtpType = FtpType.WinScpSftpUpload
};
_sendEndpoint.Send(queueRequest);
Log.Debug($"Queued sftp upload request to " +
$"host {request.SessionInformation.HostName}");
}
catch (Exception exception)
{
Log.Error(exception, $"Failed to Queue Sftp Upload Request. " +
$"Host: {request.SessionInformation.HostName}");
throw new ServiceException($"Failed to Queue Sftp Upload Request. " +
$"Host: {request.SessionInformation.HostName}");
}
}
public void QueueSftpDownloadRequest(SftpDownloadFileRequest request)
{
try
{
var queueRequest = new QueueRequest()
{
Request = JsonConvert.SerializeObject(request),
FtpType = FtpType.WinScpSftpDownload
};
_sendEndpoint.Send(queueRequest);
Log.Debug($"Queued sftp download request from " +
$"host {request.SessionInformation.HostName}");
}
catch (Exception exception)
{
Log.Error(exception, $"Failed to Queue Sftp Download Request. " +
$"Host: {request.SessionInformation.HostName}");
throw new ServiceException($"Failed to Queue Sftp Download Request. " +
$"Host: {request.SessionInformation.HostName}");
}
}
public void QueueFtpRequest(QueueRequest queueRequest)
{
try
{
_sendEndpoint.Send(queueRequest);
}
catch (Exception ex)
{
Log.Error(ex, $"Failed to Queue ftp request. FtpType: {queueRequest.FtpType}");
throw new ServiceException($"Failed to Queue ftp request. FtpType: {queueRequest.FtpType}");
}
}
}