/// <summary> /// Возвращает указаный порт или порт по умолчанию /// </summary> /// <param name="typeSunc">Тип синхронизации 'FTP/SFTP'</param> public int GetToPort(TypeSunc typeSunc) { if (port != 0) { return(port); } return(typeSunc == TypeSunc.FTP ? 21 : 22); }
/// <summary> /// Ошибка подключения /// </summary> /// <param name="_typeSunc">Тип синхронизации</param> /// <param name="_ftpConf">Конфигурация удаленого сервера 'ftp/sftp'</param> /// <param name="_webDavConf">Конфигурация удаленого сервера 'WebDav'</param> /// <param name="_response">Ответ клиента или ошибка try</param> public void Connect(TypeSunc _typeSunc, FTP _ftpConf, Models.SyncBackup.Tasks.WebDav _webDavConf, OneDrive oneDriveConf, object _response) { db.Add(new BaseItem() { MethodName = "Connect", Response = _response, ArgNameAndValue = new Connect() { ftpConf = _ftpConf, typeSunc = _typeSunc, webDavConf = _webDavConf, oneDriveConf = oneDriveConf } }); }
/// <summary> /// Создать подключение с удаленым сервером /// </summary> /// <param name="_typeSunc">Тип синхронизации</param> /// <param name="ftpConf">Конфигурация удаленого сервера 'ftp/sftp'</param> /// <param name="webDavConf">Конфигурация удаленого сервера 'WebDav'</param> /// <param name="oneDriveConf">Конфигурация удаленого сервера 'OneDrive'</param> /// <param name="report">Класс для создания отчета ошибок синхронизации</param> public RemoteServer(TypeSunc _typeSunc, FTP ftpConf, Models.SyncBackup.Tasks.WebDav webDavConf, OneDrive oneDriveConf, Report _report, out string NewRefreshTokenToOneDrive) { NewRefreshTokenToOneDrive = null; try { typeSunc = _typeSunc; report = _report; webDavConfToReport = webDavConf; switch (typeSunc) { case TypeSunc.SFTP: { sftp = new SftpClient(ftpConf.HostOrIP, ftpConf.GetToPort(_typeSunc), ftpConf.Login, ftpConf.Passwd); sftp.Connect(); break; } case TypeSunc.FTP: { try { // create an FTP client ftp = new FtpClient(ftpConf.HostOrIP, ftpConf.GetToPort(_typeSunc), ftpConf.Login, ftpConf.Passwd); // begin connecting to the server ftp.Connect(); } catch { ftp = new FtpClient(ftpConf.HostOrIP, ftpConf.GetToPort(_typeSunc), ftpConf.Login, ftpConf.Passwd); ftp.EncryptionMode = FtpEncryptionMode.Explicit; ftp.SslProtocols = SslProtocols.Tls; ftp.ValidateCertificate += new FtpSslValidation(OnValidateCertificate); ftp.Connect(); void OnValidateCertificate(FtpClient control, FtpSslValidationEventArgs e) { // add logic to test if certificate is valid here e.Accept = true; } } break; } case TypeSunc.WebDav: { webDav = new WebDavClient(new WebDavClientParams { BaseAddress = new Uri(webDavConf.url), Credentials = new NetworkCredential(webDavConf.Login, webDavConf.Passwd), PreAuthenticate = true, UseDefaultCredentials = false // Yandex.Disk на linux так работает }); break; } case TypeSunc.OneDrive: { /// <summary> /// Version 2.0.1.0 /// https://github.com/KoenZomers/OneDriveAPI /// </summary> oneDrive = new OneDriveGraphApi(oneDriveConf.ApplicationId); oneDrive.AuthenticateUsingRefreshToken(oneDriveConf.RefreshToken).Wait(); if (!string.IsNullOrWhiteSpace(oneDrive.AccessToken.RefreshToken)) { IsConnectedToOneDrive = true; NewRefreshTokenToOneDrive = oneDrive.AccessToken.RefreshToken; } break; } } } catch (Exception ex) { report.Connect(_typeSunc, ftpConf, webDavConf, oneDriveConf, ex.ToString()); ConnectionError = true; } }