Files
mRemoteNG/mRemoteV1/Tools/SecureTransfer.cs
2016-08-18 13:11:21 -04:00

122 lines
3.3 KiB
C#

using System;
using System.IO;
using mRemoteNG.App;
using Renci.SshNet;
using Renci.SshNet.Sftp;
using static System.IO.FileMode;
namespace mRemoteNG.Tools
{
internal class SecureTransfer
{
private readonly string Host;
private readonly string User;
private readonly string Password;
private readonly int Port;
public readonly SSHTransferProtocol Protocol;
public string SrcFile;
public string DstFile;
public ScpClient ScpClt;
public SftpClient SftpClt;
public SftpUploadAsyncResult asyncResult;
public AsyncCallback asyncCallback;
public SecureTransfer()
{
}
public SecureTransfer(string host, string user, string pass, int port, SSHTransferProtocol protocol)
{
Host = host;
User = user;
Password = pass;
Port = port;
Protocol = protocol;
}
public SecureTransfer(string host, string user, string pass, int port, SSHTransferProtocol protocol, string source, string dest)
{
Host = host;
User = user;
Password = pass;
Port = port;
Protocol = protocol;
SrcFile = source;
DstFile = dest;
}
public void Connect()
{
if(Protocol == SSHTransferProtocol.SCP)
{
ScpClt = new ScpClient(Host, Port, User, Password);
ScpClt.Connect();
}
if (Protocol == SSHTransferProtocol.SFTP)
{
SftpClt = new SftpClient(Host, Port, User, Password);
SftpClt.Connect();
}
}
public void Disconnect()
{
if (Protocol == SSHTransferProtocol.SCP)
{
ScpClt.Disconnect();
}
if (Protocol == SSHTransferProtocol.SFTP)
{
SftpClt.Disconnect();
}
}
public void Dispose()
{
if (Protocol == SSHTransferProtocol.SCP)
{
ScpClt.Dispose();
}
if (Protocol == SSHTransferProtocol.SFTP)
{
SftpClt.Dispose();
}
}
public void Upload()
{
if (Protocol == SSHTransferProtocol.SCP)
{
if (!ScpClt.IsConnected)
{
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSSHTransferFailed + Environment.NewLine + "SCP Not Connected!");
return;
}
ScpClt.Upload(new FileInfo(SrcFile), $"{DstFile}");
}
if (Protocol == SSHTransferProtocol.SFTP)
{
if (!SftpClt.IsConnected)
{
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSSHTransferFailed + Environment.NewLine + "SFTP Not Connected!");
return;
}
asyncResult = (SftpUploadAsyncResult)SftpClt.BeginUploadFile(new FileStream(SrcFile, Open), $"{DstFile}", asyncCallback);
}
}
public enum SSHTransferProtocol
{
SCP = 0,
SFTP = 1
}
}
}