public override void LoadConfig(string configString)
 {
     Dictionary<string, string> config = BusinessObject.GetConfigValues(configString);
         FTPSettings = new FtpSettings();
         FTPSettings.ServerAddress = config["FTPServer"];
         FTPSettings.User = config["FTPUser"];
         FTPSettings.Password = config["FTPPassword"];
         FTPSettings.Directory = config["FTPDirectory"];
 }
Example #2
0
        private async Task UploadToFtp(
            FtpSettings settings,
            Stream stream,
            string folderName,
            string fileName,
            Progress progress)
        {
            using (var client = new RavenFtpClient(settings.Url, settings.Port, settings.UserName,
                                                   settings.Password, settings.CertificateAsBase64, settings.CertificateFileName, progress, TaskCancelToken.Token))
            {
                await client.UploadFile(folderName, fileName, stream);

                if (_logger.IsInfoEnabled)
                {
                    _logger.Info($"Successfully uploaded backup file '{fileName}' to an ftp server");
                }
            }
        }
        public async Task PublishFilesShouldSyncFiles()
        {
            var logger = Context.Logger;

            var(source, deployTargetDirectory, temp) = TestDataHelper.CopyTestData(logger);

            var ftpSettings = new FtpSettings(
                new FtpPath("/", FileSystemType.Directory),
                publicRootPath: new FtpPath("/", FileSystemType.Directory),
                isSecure: false);

            FtpHandler handler = await FtpHandler.Create(new Uri("ftp://127.0.0.1:30021"),
                                                         ftpSettings, new NetworkCredential("testuser", "testpw"), logger);

            var sourceDirectory   = new DirectoryInfo(source);
            var ruleConfiguration = new RuleConfiguration {
                AppOfflineEnabled = true
            };

            using var initialCancellationTokenSource =
                      new CancellationTokenSource(TimeSpan.FromSeconds(50));
            DeploySummary initialSummary = await handler.PublishAsync(ruleConfiguration,
                                                                      deployTargetDirectory,
                                                                      initialCancellationTokenSource.Token);

            logger.Information("Initial: {Initial}", initialSummary.ToDisplayValue());

            using var cancellationTokenSource =
                      new CancellationTokenSource(TimeSpan.FromSeconds(50));
            DeploySummary summary = await handler.PublishAsync(ruleConfiguration,
                                                               sourceDirectory,
                                                               cancellationTokenSource.Token);

            logger.Information("Result: {Result}", summary.ToDisplayValue());

            var fileSystemItems = await handler.ListDirectoryAsync(FtpPath.Root, cancellationTokenSource.Token);

            foreach (FtpPath fileSystemItem in fileSystemItems)
            {
                logger.Information("{Item}", fileSystemItem.Path);
            }

            temp.Dispose();
        }
Example #4
0
        private void UploadToFtp(FtpSettings settings, Stream stream, Progress progress)
        {
            using (var client = new RavenFtpClient(settings, progress, TaskCancelToken.Token))
            {
                client.UploadFile(_settings.FolderName, _settings.FileName, stream);

                if (_logger.IsInfoEnabled)
                {
                    _logger.Info($"{ReportSuccess(FtpName)} server");
                }

                if (_retentionPolicyParameters == null)
                {
                    return;
                }

                var runner = new FtpRetentionPolicyRunner(_retentionPolicyParameters, client);
                runner.Execute();
            }
        }
Example #5
0
        public IHttpActionResult PostFile(
            string url,
            bool useSsh,
            string username,
            string password,
            string subFolder,
            bool checkForFile,
            bool renameAfterUpload,
            ConnectMode connectMode,
            TransferType transferType,
            string localFilePath)
        {
            var settings = new FtpSettings();

            settings.Url               = url;
            settings.UseSsh            = useSsh;
            settings.Username          = username;
            settings.Password          = password;
            settings.SubFolder         = subFolder;
            settings.CheckForFile      = checkForFile;
            settings.RenameAfterUpload = renameAfterUpload;
            settings.ConnectMode       = connectMode;
            settings.TransferType      = transferType;

            var client = new Client();

            client.StatusChanged   += Client_StatusChanged;
            client.ProgressChanged += Client_ProgressChanged;

            var result = client.Upload(settings, localFilePath);

            if (client.ErrorMessage != null && client.ErrorMessage != string.Empty)
            {
                return(InternalServerError(new System.Exception(client.ErrorMessage)));
            }

            return(Ok(result));
        }
Example #6
0
        /// <summary>
        /// Gets the directory listing from the endpoint.
        /// </summary>
        /// <param name="settings">Ftp Settinfs.</param>
        /// <returns>Returns a list of files and directories.</returns>
        public List <string> GetDirectoryContents(FtpSettings settings)
        {
            this.RaiseLog("Getting FTP directory contents...");
            List <string> response = new List <string>();
            FtpWebRequest ftp      = this.GetFtpWebRequest(settings.Path, FtpOperation.List, settings, false);

            using (FtpWebResponse ftpResponse = (FtpWebResponse)ftp.GetResponse())
                using (Stream responseStream = ftpResponse.GetResponseStream())
                {
                    this.RaiseLog(Resources.INFO_GETTINGDIRECTORY);
                    StreamReader reader = new StreamReader(responseStream);
                    while (!reader.EndOfStream)
                    {
                        string file = reader.ReadLine();
                        if (!string.IsNullOrWhiteSpace(Path.GetExtension(file)))
                        {
                            response.Add(file);
                        }
                    }
                }

            return(response);
        }
 public ProxiedDeleteFileFTPRequest(FtpSettings settings) : base(settings)
 {
 }
Example #8
0
 public static void InitializeFtpSettings(FtpSettings settings)
 {
     Settings = settings;
 }
Example #9
0
 public FtpLoader(FtpSettings settings)
 {
     this.Settings           = settings;
     this.Client             = new FtpClient(settings.Ip);
     this.Client.Credentials = new NetworkCredential(settings.User, settings.Password);
 }
 public CustomErrorsService(FtpSettings ftpSettings)
 {
     _ftpSettings = ftpSettings;
     _credentials = new NetworkCredential(ftpSettings.User, ftpSettings.Password);
 }
        private async Task <ExitCode> InternalDeployAsync(
            ImmutableArray <DeploymentExecutionDefinition> deploymentExecutionDefinitions,
            SemanticVersion explicitVersion,
            CancellationToken cancellationToken = default)
        {
            var tempDirectoriesToClean = new List <DirectoryInfo>();
            var tempFilesToClean       = new List <string>();

            try
            {
                _logger.Verbose("Executing deployment execution definitions [{Length}]: {Executions}",
                                deploymentExecutionDefinitions.Length,
                                string.Join($"{Environment.NewLine}\t", deploymentExecutionDefinitions.Select(_ => $"'{_}'")));

                foreach (DeploymentExecutionDefinition deploymentExecutionDefinition in deploymentExecutionDefinitions)
                {
                    if (string.IsNullOrWhiteSpace(deploymentExecutionDefinition.TargetDirectoryPath) &&
                        string.IsNullOrWhiteSpace(deploymentExecutionDefinition.PublishSettingsFile))
                    {
                        throw new InvalidOperationException($"{nameof(deploymentExecutionDefinition.TargetDirectoryPath)} and {nameof(deploymentExecutionDefinition.PublishSettingsFile)} are both not set");
                    }

                    string asJson = JsonConvert.SerializeObject(deploymentExecutionDefinition, Formatting.Indented);
                    _logger.Information("Executing deployment execution definition: '{DeploymentExecutionDefinition}'",
                                        asJson);

                    const string TempPrefix = "MD-";

                    string uniqueSuffix = DateTime.Now.ToString("MMddHHmmssfff", CultureInfo.InvariantCulture);

                    string tempPath = Path.Combine(
                        Path.GetTempPath(),
                        $"{TempPrefix}{uniqueSuffix}{Guid.NewGuid().ToString().Substring(0, 6)}");

                    var           tempWorkingDirectory        = new DirectoryInfo(tempPath);
                    DirectoryInfo packageInstallTempDirectory = tempWorkingDirectory;

                    tempDirectoriesToClean.Add(packageInstallTempDirectory);

                    MayBe <InstalledPackage> installedMainPackage =
                        await _packageInstaller.InstallPackageAsync(
                            deploymentExecutionDefinition,
                            packageInstallTempDirectory,
                            false,
                            explicitVersion,
                            cancellationToken).ConfigureAwait(false);

                    if (!installedMainPackage.HasValue)
                    {
                        _logger.Error(
                            "Could not install package defined in deployment execution definition {DeploymentExecutionDefinition}",
                            deploymentExecutionDefinition);
                        return(ExitCode.Failure);
                    }

                    InstalledPackage installedPackage = installedMainPackage.Value;

                    _logger.Information(
                        "Successfully installed NuGet package '{PackageId}' version '{Version}' to path '{NugetPackageFullPath}'",
                        installedPackage.PackageId,
                        installedPackage.Version.ToNormalizedString(),
                        installedPackage.NugetPackageFullPath);

                    tempWorkingDirectory.Refresh();

                    DirectoryInfo[] packagesDirectory = tempWorkingDirectory.GetDirectories();

                    DirectoryInfo packageDirectory =
                        packagesDirectory.Single(directory =>
                                                 directory.Name.Equals(installedPackage.PackageId, StringComparison.OrdinalIgnoreCase));

                    SemanticVersion version = explicitVersion ?? GetSemanticVersionFromDefinition(
                        deploymentExecutionDefinition,
                        packageDirectory,
                        installedPackage.Version);

                    _logger.Verbose("Package version is {Version}", version.ToNormalizedString());

                    var possibleXmlTransformations = new List <FileMatch>();
                    var replaceFiles = new List <FileMatch>();

                    var environmentPackageResult = new EnvironmentPackageResult(true);

                    var contentDirectory =
                        new DirectoryInfo(Path.Combine(packageDirectory.FullName, "Content"));

                    if (!contentDirectory.Exists)
                    {
                        _logger.Error("Content directory '{FullName}' does not exist", contentDirectory.FullName);
                        return(ExitCode.Failure);
                    }

                    FileInfo contentFilesJson = packageDirectory.GetFiles("contentFiles.json").SingleOrDefault();

                    if (contentFilesJson?.Exists == true)
                    {
                        ExitCode exitCode = VerifyFiles(contentFilesJson.FullName, contentDirectory);

                        if (!exitCode.IsSuccess)
                        {
                            return(exitCode);
                        }
                    }
                    else
                    {
                        _logger.Debug("No file contentFiles.json was found in package directory {PackageDirectory}",
                                      packageDirectory.FullName);
                    }

                    if (!string.IsNullOrWhiteSpace(deploymentExecutionDefinition.EnvironmentConfig))
                    {
                        _logger.Information(
                            "Fetching environment packages for package {Package} and environment {Environment}",
                            deploymentExecutionDefinition.PackageId, deploymentExecutionDefinition.EnvironmentConfig);

                        environmentPackageResult = await AddEnvironmentPackageAsync(deploymentExecutionDefinition,
                                                                                    packageInstallTempDirectory,
                                                                                    possibleXmlTransformations,
                                                                                    replaceFiles,
                                                                                    tempDirectoriesToClean,
                                                                                    version,
                                                                                    cancellationToken).ConfigureAwait(false);

                        if (!environmentPackageResult.IsSuccess)
                        {
                            return(ExitCode.Failure);
                        }

                        if (environmentPackageResult.Version != null)
                        {
                            _logger.Information("Installed environment package version {Version}",
                                                environmentPackageResult.Version.ToNormalizedString());
                        }
                        else
                        {
                            _logger.Information("No environment package was installed");
                        }
                    }
                    else
                    {
                        _logger.Debug("Definition has no environment configuration specified");
                    }

                    if (possibleXmlTransformations.Any())
                    {
                        _logger.Debug("Possible Xml transformation files {V}",
                                      string.Join(", ",
                                                  possibleXmlTransformations.Select(fileMatch =>
                                                                                    $"'{fileMatch.TargetName}' replaced by --> '{fileMatch.ActionFile.FullName}'")));
                    }

                    var xmlTransformedFiles = new List <string>();

                    foreach (FileMatch possibleXmlTransformation in possibleXmlTransformations)
                    {
                        TransformationResult result = _xmlTransformer.TransformMatch(possibleXmlTransformation,
                                                                                     contentDirectory);

                        if (!result.IsSuccess)
                        {
                            return(ExitCode.Failure);
                        }

                        xmlTransformedFiles.AddRange(result.TransformedFiles);
                    }

                    if (replaceFiles.Any())
                    {
                        _logger.Debug("Possible replacing files {Files}",
                                      string.Join(", ",
                                                  replaceFiles.Select(fileMatch =>
                                                                      $"'{fileMatch.TargetName}' replaced by --> '{fileMatch.ActionFile.FullName}'")));
                    }

                    var replacedFiles = new List <string>();

                    foreach (FileMatch replacement in replaceFiles)
                    {
                        ReplaceResult result = ReplaceFileIfMatchingFiles(replacement, contentDirectory);

                        if (!result.IsSuccess)
                        {
                            return(ExitCode.Failure);
                        }

                        replacedFiles.AddRange(result.ReplacedFiles);
                    }

                    if (!string.IsNullOrWhiteSpace(deploymentExecutionDefinition.WebConfigTransformFile))
                    {
                        DeploymentTransformation.Transform(deploymentExecutionDefinition, contentDirectory, _logger);
                    }

                    string uniqueTargetTempSuffix =
                        DateTime.Now.ToString("MMddHHmmssfff", CultureInfo.InvariantCulture);

                    string uniqueTargetTempPath = Path.Combine(
                        Path.GetTempPath(),
                        $"{TempPrefix}t{uniqueTargetTempSuffix}{Guid.NewGuid().ToString().Substring(0, 6)}");

                    var targetTempDirectoryInfo =
                        new DirectoryInfo(uniqueTargetTempPath);

                    if (!targetTempDirectoryInfo.Exists)
                    {
                        _logger.Debug("Creating temp target directory '{FullName}'",
                                      packageInstallTempDirectory.FullName);
                        targetTempDirectoryInfo.Create();
                    }

                    string wwwrootPath = Path.Combine(contentDirectory.FullName, "wwwroot");

                    var wwwRootDirectory = new DirectoryInfo(wwwrootPath);

                    DirectoryInfo applicationMetadataTargetDirectory =
                        wwwRootDirectory.Exists ? wwwRootDirectory : contentDirectory;

                    string versionFile = ApplicationMetadataCreator.SetVersionFile(
                        installedMainPackage.Value,
                        applicationMetadataTargetDirectory,
                        deploymentExecutionDefinition,
                        xmlTransformedFiles,
                        replacedFiles,
                        environmentPackageResult,
                        _logger);

                    _logger.Information("Successfully wrote metadata file {Path}", versionFile);

                    _logger.Verbose("Copying content files to '{FullName}'", targetTempDirectoryInfo.FullName);

                    bool usePublishSettingsFile =
                        !string.IsNullOrWhiteSpace(deploymentExecutionDefinition.PublishSettingsFile);

                    var targetAppOffline = new FileInfo(Path.Combine(targetTempDirectoryInfo.FullName,
                                                                     DeploymentConstants.AppOfflineHtm));

                    var ruleConfiguration = RuleConfiguration.Get(deploymentExecutionDefinition,
                                                                  DeployerConfiguration,
                                                                  _logger);

                    if (ruleConfiguration.AppOfflineEnabled && usePublishSettingsFile)
                    {
                        string sourceAppOffline =
                            Path.Combine(contentDirectory.FullName, DeploymentConstants.AppOfflineHtm);

                        if (!File.Exists(sourceAppOffline) && !targetAppOffline.Exists)
                        {
                            using var _ = File.Create(targetAppOffline.FullName);

                            _logger.Debug("Created offline file '{File}'", targetAppOffline.FullName);

                            if (DeployerConfiguration.DefaultWaitTimeAfterAppOffline > TimeSpan.Zero)
                            {
                                await Task.Delay(DeployerConfiguration.DefaultWaitTimeAfterAppOffline,
                                                 cancellationToken)
                                .ConfigureAwait(false);
                            }

                            tempFilesToClean.Add(targetAppOffline.FullName);
                        }
                    }

                    RecursiveIO.RecursiveCopy(contentDirectory,
                                              targetTempDirectoryInfo,
                                              _logger,
                                              deploymentExecutionDefinition.ExcludedFilePatterns);

                    tempDirectoriesToClean.Add(targetTempDirectoryInfo);

                    _logger.Debug("Copied content files from '{ContentDirectory}' to '{FullName}'",
                                  contentDirectory,
                                  targetTempDirectoryInfo.FullName);
                    tempDirectoriesToClean.Add(packageInstallTempDirectory);

                    bool hasPublishSettingsFile =
                        !string.IsNullOrWhiteSpace(deploymentExecutionDefinition.PublishSettingsFile) &&
                        File.Exists(deploymentExecutionDefinition.PublishSettingsFile);

                    if (hasPublishSettingsFile)
                    {
                        _logger.Debug("The publish settings file '{PublishSettingsFile}' exists",
                                      deploymentExecutionDefinition.PublishSettingsFile);
                    }
                    else
                    {
                        _logger.Debug("The deployment definition has no publish setting file");
                    }

                    if (deploymentExecutionDefinition.PublishType == PublishType.WebDeploy)
                    {
                        _webDeployHelper.DeploymentTraceEventHandler += (sender, args) =>
                        {
                            if (string.IsNullOrWhiteSpace(args.Message))
                            {
                                return;
                            }

                            if (args.EventLevel == TraceLevel.Verbose)
                            {
                                _logger.Verbose("{Message}", args.Message);
                                return;
                            }

                            _logger.Information("{Message}", args.Message);
                        };
                    }

                    bool hasIisSiteName = deploymentExecutionDefinition.IisSiteName.HasValue();
                    IDeploymentChangeSummary summary;

                    try
                    {
                        IIisManager?manager = default;

                        if (!string.IsNullOrWhiteSpace(deploymentExecutionDefinition.IisSiteName))
                        {
                            manager = _iisManager(deploymentExecutionDefinition);
                        }

                        if (hasIisSiteName && manager is {})
                        {
                            bool stopped = manager.StopSiteIfApplicable();

                            if (!stopped)
                            {
                                _logger.Error(
                                    "Could not stop IIS site for deployment execution definition {DeploymentExecutionDefinition}",
                                    deploymentExecutionDefinition);
                                return(ExitCode.Failure);
                            }
                        }

                        try
                        {
                            if (deploymentExecutionDefinition.PublishType == PublishType.WebDeploy)
                            {
                                _logger.Information("Deploying {Target} with WebDeploy",
                                                    deploymentExecutionDefinition.TargetDirectoryPath);
                                summary = await _webDeployHelper.DeployContentToOneSiteAsync(
                                    targetTempDirectoryInfo.FullName,
                                    deploymentExecutionDefinition.PublishSettingsFile,
                                    DeployerConfiguration.DefaultWaitTimeAfterAppOffline,
                                    doNotDelete : ruleConfiguration.DoNotDeleteEnabled,
                                    appOfflineEnabled : ruleConfiguration.AppOfflineEnabled,
                                    useChecksum : ruleConfiguration.UseChecksumEnabled,
                                    whatIf : ruleConfiguration.WhatIfEnabled,
                                    traceLevel : TraceLevel.Verbose,
                                    appDataSkipDirectiveEnabled : ruleConfiguration.AppDataSkipDirectiveEnabled,
                                    applicationInsightsProfiler2SkipDirectiveEnabled :
                                    ruleConfiguration.ApplicationInsightsProfiler2SkipDirectiveEnabled,
                                    logAction : message => _logger.Debug("{Message}", message),
                                    targetPath : hasPublishSettingsFile
                                    ?string.Empty
                                    : deploymentExecutionDefinition.TargetDirectoryPath
                                    ).ConfigureAwait(false);
                            }
                            else if (deploymentExecutionDefinition.PublishType.IsAnyFtpType)
                            {
                                var basePath = deploymentExecutionDefinition.FtpPath;

                                bool isSecure = deploymentExecutionDefinition.PublishType == PublishType.Ftps;

                                var ftpSettings = new FtpSettings(basePath, isSecure);

                                _logger.Information("Deploying {Target} with {PublishType}",
                                                    deploymentExecutionDefinition.FtpPath?.Path,
                                                    deploymentExecutionDefinition.PublishType);
                                string publishSettingsFile = deploymentExecutionDefinition.PublishSettingsFile;

                                if (string.IsNullOrWhiteSpace(publishSettingsFile))
                                {
                                    _logger.Error(
                                        "Deployment target type is set to {Type} but no publish file is set",
                                        deploymentExecutionDefinition.PublishTypeValue);
                                    return(ExitCode.Failure);
                                }

                                using IFtpHandler ftpHandler = await _ftpHandlerFactory.CreateWithPublishSettings(
                                          publishSettingsFile,
                                          ftpSettings,
                                          _logger, cancellationToken);

                                _logger.Verbose("Created FTP handler, starting publish");

                                summary = await ftpHandler.PublishAsync(
                                    ruleConfiguration,
                                    targetTempDirectoryInfo,
                                    cancellationToken);
                            }
                            else
                            {
                                throw new InvalidOperationException(
                                          $"Publish type {deploymentExecutionDefinition.PublishType} is not supported");
                            }
                        }
                        catch (Exception ex) when(!ex.IsFatal())
                        {
                            _logger.Error(ex,
                                          "Could not deploy site {DeploymentExecutionDefinition}",
                                          deploymentExecutionDefinition);

                            return(ExitCode.Failure);
                        }
                        finally
                        {
                            manager?.Dispose();
                        }
                    }
                    catch (Exception ex) when(!ex.IsFatal())
                    {
                        _logger.Error(ex,
                                      "Could not handle start/stop for iis site {Site}",
                                      deploymentExecutionDefinition.IisSiteName);

                        return(ExitCode.Failure);
                    }

                    _logger.Information("Summary: {Summary}", summary.ToDisplayValue());
                }
Example #12
0
 public override void LoadConfig(string configString)
 {
     Dictionary<string, string> config = BusinessObject.GetConfigValues(configString);
     MaxSubLevel = int.Parse(config["MaxSubLevel"]);
     MaxFileSizeToGet = long.Parse(config["MaxFileSize"]);
     FTPSettings = new FtpSettings();
     FTPSettings.Directory = config["FTPDirectory"];
     FTPSettings.Password = config["FTPPassword"];
     FTPSettings.ServerAddress = config["FTPServer"];
     FTPSettings.User = config["FTPUser"];
 }
 public ProxiedListDirectoryFTPRequest(FtpSettings settings) : base(settings)
 {
 }
Example #14
0
 public FileTransferEventArgs(string filePath, FtpSettings ftpSettings)
 {
     FilePath    = filePath;
     FtpSettings = ftpSettings;
 }
Example #15
0
 public FtpRemoteClient(FtpSettings settings)
 {
     _settings = settings;
     _client   = new Lazy <FtpClient>(CreateClient);
 }
 public ProxiedRenameFileFTPRequest(FtpSettings settings, string newFileName) : base(settings)
 {
     NewFileName = newFileName;
 }
Example #17
0
 public async Task <IFtpHandler> CreateWithPublishSettings(string publishSettingsFile,
                                                           FtpSettings ftpSettings,
                                                           ILogger logger,
                                                           CancellationToken cancellationToken = default) =>
 await FtpHandler.CreateWithPublishSettings(publishSettingsFile, ftpSettings, logger);
Example #18
0
 public FtpDownloadRequest(FtpSettings settings)
 {
     this.Settings = settings;
 }
Example #19
0
 /// <summary>
 /// Initializes a new instance of the <see cref="From"/> class.
 /// </summary>
 /// <param name="headers"></param>
 public From(Dictionary <string, string> headers, IWebRequestUtility webRequestUtility)
 {
     this.ftpSettings       = new FtpSettings(headers.ToFromConfig());
     this.webRequestUtility = webRequestUtility;
 }
Example #20
0
 public FrmCustomErrors(FtpSettings settings)
 {
     InitializeComponent();
     _customErrors = new CustomErrorsService(settings);
 }
Example #21
0
        public static async Task <FtpHandler> CreateWithPublishSettings(
            [NotNull] string publishSettingsFile,
            [NotNull] FtpSettings ftpSettings,
            ILogger logger = default)
        {
            if (ftpSettings == null)
            {
                throw new ArgumentNullException(nameof(ftpSettings));
            }

            logger ??= Logger.None;

            if (string.IsNullOrWhiteSpace(publishSettingsFile))
            {
                throw new ArgumentException(Resources.ValueCannotBeNullOrWhitespace, nameof(publishSettingsFile));
            }

            var ftpPublishSettings = FtpPublishSettings.Load(publishSettingsFile);

            var credentials = new NetworkCredential(ftpPublishSettings.UserName, ftpPublishSettings.Password, "");

            var fullUri = ftpPublishSettings.FtpBaseUri;

            if (ftpSettings.BasePath != null)
            {
                var builder = new UriBuilder(fullUri)
                {
                    Path = ftpSettings.BasePath.Path
                };

                fullUri = builder.Uri;
            }

            var ftpClient = new FtpClient(fullUri.Host, credentials)
            {
                SocketPollInterval           = 1000,
                ConnectTimeout               = 2000,
                ReadTimeout                  = 2000,
                DataConnectionConnectTimeout = 2000,
                DataConnectionReadTimeout    = 2000,
                DataConnectionType           = FtpDataConnectionType.PASV
            };

            if (ftpSettings.IsSecure)
            {
                logger.Debug("Using secure FTP connection");
                ftpClient.EncryptionMode = FtpEncryptionMode.Explicit;
                ftpClient.SslProtocols   = SslProtocols.Tls12;
            }

            try
            {
                logger.Debug("Connecting to FTP");
                await ftpClient.ConnectAsync();

                logger.Debug("Connected to FTP");
            }
            catch (Exception ex) when(!ex.IsFatal())
            {
                throw new FtpException($"Could not connect to FTP {fullUri.Host}", ex);
            }

            return(new FtpHandler(ftpClient, logger, ftpSettings));
        }
Example #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FtpClient"/> class.
 /// </summary>
 /// <param name="ftpSettings">Ftp settings.</param>
 /// <param name="webRequestUtility">Web request facility.</param>
 public FtpClient(FtpSettings ftpSettings, IWebRequestUtility webRequestUtility)
 {
     this.settings          = ftpSettings;
     this.webRequestUtility = webRequestUtility;
 }
Example #23
0
 private string GetSetting(FtpSettings setting) => _settingValues[setting.ToString()];
 public ProxiedBaseFTPRequest(FtpSettings settings)
 {
     Settings = settings;
 }
 private void LoadSettings()
 {
     var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
     try {
         path = !string.IsNullOrWhiteSpace(path) ? Path.Combine(path, "AuroraAssetEditor", "ftp.json") : "ftp.json";
         using(var stream = File.OpenRead(path))
             _settings = (FtpSettings)_serializer.ReadObject(stream);
         _settings.Loaded = true;
     }
     catch {
         _settings = new FtpSettings {
                                         Loaded = false
                                     };
     }
 }