181 lines
6.9 KiB
C#
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}");
|
|
}
|
|
}
|
|
} |