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}"); } } }