Exemple #1
0
        //public CoreConfiguration(
        //	ILogger<CoreConfiguration> log,
        //	IOptions<ActiveDirectorySettings> activeDirectory,
        //	IOptions<BusSettings> bus,
        //	IOptions<CacheSettings> cache,
        //	IOptions<ConnectionSettings> connection,
        //	IOptions<CronSettings> cron,
        //	IOptions<EmailSettings> email,
        //	IOptions<FaxSettings> fax,
        //	IOptions<FileSettings> files,
        //	IOptions<FTPSettings> ftp,
        //	IOptions<PrintSettings> print
        //	)
        //{
        //	_coreLog = log;

        //	CoreId = Guid.Parse("BC0C4AF8-5EB2-4C3A-B640-5357428C0557");
        //	MenuCoreId = Guid.Parse("039BB7F3-AAB2-45C4-B4A4-25E20A70E0AE");
        //	ActiveDirectory = activeDirectory.Value;
        //	Bus = bus.Value;
        //	Cache = cache.Value;
        //	Connection = connection.Value;
        //	Cron = cron.Value;
        //	Email = email.Value;
        //	Fax = fax.Value;
        //	Files = files.Value;
        //	FTP = ftp.Value;
        //	Print = print.Value;
        //}

        public CoreConfiguration(
            ILoggerFactory log,
            ActiveDirectorySettings activeDirectory,
            BusSettings bus,
            CacheSettings cache,
            ConnectionSettings connection,
            CronSettings cron,
            EmailSettings email,
            FaxSettings fax,
            FileSettings files,
            FTPSettings ftp,
            PrintSettings print
            )
        {
            _coreLog = log.CreateLogger <CoreConfiguration>();

            CoreId          = Guid.Parse("BC0C4AF8-5EB2-4C3A-B640-5357428C0557");
            MenuCoreId      = Guid.Parse("039BB7F3-AAB2-45C4-B4A4-25E20A70E0AE");
            ActiveDirectory = activeDirectory;
            Bus             = bus;
            Cache           = cache;
            Connection      = connection;
            Cron            = cron;
            Email           = email;
            Fax             = fax;
            Files           = files;
            FTP             = ftp;
            Print           = print;
        }
Exemple #2
0
        public async Task <IEnumerable <string> > GetFileNamesAsync(FTPSettings settings, bool recursive)
        {
            var request  = CreateRequest(settings, "", WebRequestMethods.Ftp.ListDirectoryDetails);
            var response = await request.GetResponseAsync();

            if (!(response is FtpWebResponse ftpWebResponse))
            {
                throw new NotSupportedException($"Unexpected request response. Expected: {nameof(FtpWebResponse)}, but found {response.GetType()}");
            }

            var responseStream = ftpWebResponse.GetResponseStream();
            var reader         = new StreamReader(responseStream);
            var fileNames      = await ProcessFileInformationResultsAsync(
                reader.ReadToEnd(),
                recursive, settings.ServerPath,
                async newServerPath =>
            {
                var subFileSettigs = new FTPSettings
                {
                    ServerUrl  = settings.ServerUrl,
                    ServerPort = settings.ServerPort,
                    ServerPath = newServerPath,
                    Username   = settings.Username,
                    Password   = settings.Password
                };

                return(await GetFileNamesAsync(subFileSettigs, true));
            });

            return(fileNames.OrderBy(f => f).ToList());
        }
Exemple #3
0
        /// <summary>
        /// Download the specified file
        /// </summary>
        /// <param name="settings">ftp server settings</param>
        /// <param name="fileName">Name of the file on ftp server</param>
        /// <param name="targetPath">Path of the target directory on local file system</param>
        /// <returns></returns>
        public async Task <bool> DownloadAsync(FTPSettings settings, string fileName, string targetPath)
        {
            var directoryInfo = new DirectoryInfo(targetPath);

            if (!directoryInfo.Exists)
            {
                directoryInfo.Create();
            }

            var connectionInfo = CreateConnectionInfo(settings);

            using (var sftp = new SftpClient(connectionInfo))
            {
                sftp.Connect();

                ChangeServerPath(sftp, settings.ServerPath);

                using (var saveFile = File.OpenWrite(Path.Combine(targetPath, fileName)))
                {
                    await Task.Factory.FromAsync(sftp.BeginDownloadFile(fileName, saveFile), sftp.EndDownloadFile);
                }

                sftp.Disconnect();
            }

            return(true);
        }
Exemple #4
0
        /// <summary>
        /// Download the specified file
        /// </summary>
        /// <param name="settings">ftp server settings</param>
        /// <param name="fileName">Name of the file on ftp server</param>
        /// <param name="targetPath">Path of the target directory on local file system</param>
        /// <returns></returns>
        public async Task <bool> DownloadAsync(FTPSettings settings, string fileName, string targetPath)
        {
            var directoryInfo = new DirectoryInfo(targetPath);

            if (!directoryInfo.Exists)
            {
                directoryInfo.Create();
            }

            var request  = CreateRequest(settings, fileName, WebRequestMethods.Ftp.DownloadFile);
            var response = await request.GetResponseAsync();

            if (!(response is FtpWebResponse ftpWebResponse))
            {
                throw new NotSupportedException($"Unexpected request response. Expected: {nameof(FtpWebResponse)}, but found {response.GetType()}");
            }

            var responseStream = ftpWebResponse.GetResponseStream();

            using (var fsStream = File.Open(Path.Combine(targetPath, fileName), FileMode.Create, FileAccess.Write, FileShare.None))
            {
                await WriteAsync(responseStream, fsStream);

                fsStream.Close();
            }

            return(ftpWebResponse.StatusCode == FtpStatusCode.ClosingData);
        }
Exemple #5
0
        private FtpWebRequest CreateRequest(FTPSettings settings, string fileName, string method)
        {
            if (settings.ServerPort <= 0)
            {
                settings.ServerPort = 21;
            }

            if (!settings.ServerPath.IsNullOrEmpty() && !settings.ServerPath.EndsWith("/"))
            {
                settings.ServerPath += '/';
            }

            if (!settings.ServerUrl.ToLower().StartsWith("ftp://"))
            {
                settings.ServerUrl = "ftp://" + settings.ServerUrl;
            }

            if (settings.ServerUrl.EndsWith("/"))
            {
                settings.ServerUrl = settings.ServerUrl.Substring(0, settings.ServerUrl.Length - 1);
            }

            var request = (FtpWebRequest)WebRequest.Create(new Uri($"{settings.ServerUrl}:{settings.ServerPort}/{settings.ServerPath ?? ""}{fileName}"));

            request.Method      = method;
            request.Credentials = new NetworkCredential(settings.Username, settings.Password);

            return(request);
        }
Exemple #6
0
        private ConnectionInfo CreateConnectionInfo(FTPSettings settings)
        {
            if (settings.ServerUrl.ToLower().StartsWith("sftp://"))
            {
                settings.ServerUrl = settings.ServerUrl.Substring(7);
            }

            return(new ConnectionInfo(settings.ServerUrl, settings.Username, new PasswordAuthenticationMethod(settings.Username, settings.Password)));
        }
Exemple #7
0
 public PluginBody()
 {
     try
     {
         settings = SettingsManager.Load();
     }
     catch
     {
         settings = new FTPSettings();
     }
 }
Exemple #8
0
        /// <summary>
        /// Get all file names, inclusive path, of the directory on ftp server
        /// </summary>
        /// <param name="settings">ftp server settings</param>
        /// <param name="recursive">Enumerate sub directories</param>
        /// <returns></returns>
        public async Task <IEnumerable <string> > GetFileNamesAsync(FTPSettings settings, bool recursive)
        {
            var connectionInfo = CreateConnectionInfo(settings);
            var fileNames      = new List <string>();
            var directoryNames = new List <string>();

            using (var sftp = new SftpClient(connectionInfo))
            {
                sftp.Connect();

                await Task.Factory.FromAsync(sftp.BeginListDirectory(GetServerPath(settings.ServerPath), null, null), (IAsyncResult result) =>
                {
                    var files = sftp.EndListDirectory(result);
                    foreach (var file in files)
                    {
                        if (file.IsDirectory)
                        {
                            if (file.Name == "." || file.Name == ".." || !recursive)
                            {
                                continue;
                            }

                            directoryNames.Add(file.Name);
                        }
                        else
                        {
                            fileNames.Add(file.FullName);
                        }
                    }
                });

                sftp.Disconnect();
            }

            if (recursive && directoryNames.Count > 0)
            {
                var childSettings = new FTPSettings
                {
                    ServerUrl  = settings.ServerUrl,
                    ServerPort = settings.ServerPort,
                    Password   = settings.Password,
                    Username   = settings.Username
                };
                foreach (var directoryName in directoryNames)
                {
                    childSettings.ServerPath = String.Join("/", settings.ServerPath, directoryName);
                    fileNames.AddRange(await GetFileNamesAsync(childSettings, true));
                }
            }

            return(fileNames);
        }
Exemple #9
0
        /// <summary>
        /// Delete the specified directory or file from ftp server
        /// </summary>
        /// <param name="settings">ftp server settings</param>
        /// <param name="directoryOrFileName">Name of the directory or file</param>
        /// <returns></returns>
        public async Task <bool> DeleteAsync(FTPSettings settings, string directoryOrFileName)
        {
            var request  = CreateRequest(settings, directoryOrFileName, WebRequestMethods.Ftp.DeleteFile);
            var response = await request.GetResponseAsync();

            response.Close();

            if (!(response is FtpWebResponse ftpWebResponse))
            {
                throw new NotSupportedException($"Unexpected request response. Expected: {nameof(FtpWebResponse)}, but found {response.GetType()}");
            }

            return(true);
        }
Exemple #10
0
        public async Task <bool> UploadAsync(FTPSettings settings, string fileName, string fullFileName)
        {
            var request   = CreateRequest(settings, fileName, WebRequestMethods.Ftp.UploadFile);
            var ftpStream = await request.GetRequestStreamAsync();

            var fsStream = File.OpenRead(fullFileName);

            await WriteAsync(fsStream, ftpStream);

            fsStream.Close();

            var response = (FtpWebResponse)request.GetResponse();

            ftpStream.Close();

            return(response.StatusCode == FtpStatusCode.ClosingData);
        }
Exemple #11
0
        public void ShowSettings()
        {
            using (FTPSettingsForm fs = new FTPSettingsForm(settings))
            {
                if (fs.ShowDialog() == DialogResult.OK)
                {
                    settings = fs.GetSettings();

                    try
                    {
                        SettingsManager.Save(settings);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error while saving ftp settings!\r\n\r\n" + ex.Message, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }
Exemple #12
0
        /// <summary>
        /// Delete the specified directory or file from ftp server
        /// </summary>
        /// <param name="settings">ftp server settings</param>
        /// <param name="directoryOrFileName">Name of the directory or file</param>
        /// <returns></returns>
        public Task <bool> DeleteAsync(FTPSettings settings, string directoryOrFileName)
        {
            var connectionInfo      = CreateConnectionInfo(settings);
            var directoryOrFilePath = GetServerPath(settings.ServerPath);

            if (!directoryOrFilePath.EndsWith("/"))
            {
                directoryOrFilePath += "/";
            }
            directoryOrFilePath += directoryOrFileName;

            using (var sftp = new SftpClient(connectionInfo))
            {
                sftp.Connect();
                sftp.Delete(directoryOrFilePath);
                sftp.Disconnect();
            }

            return(Task.FromResult(true));
        }
Exemple #13
0
        /// <summary>
        /// Upload the specified file
        /// </summary>
        /// <param name="settings">ftp server settings</param>
        /// <param name="fileName">Name of the file on ftp server</param>
        /// <param name="fullFileName">Name of the file, inclusive path, of the file</param>
        /// <returns></returns>
        public async Task <bool> UploadAsync(FTPSettings settings, string fileName, string fullFileName)
        {
            var connectionInfo = CreateConnectionInfo(settings);

            using (var sftp = new SftpClient(connectionInfo))
            {
                sftp.Connect();

                ChangeServerPath(sftp, settings.ServerPath);

                using (var fileStream = File.OpenRead(fullFileName))
                {
                    await Task.Factory.FromAsync(sftp.BeginUploadFile(fileStream, fileName, true, (IAsyncResult result) => { }, null), sftp.EndUploadFile);
                }

                sftp.Disconnect();
            }

            return(true);
        }
Exemple #14
0
        public void FtpUpload(Report report, FTPSettings settings)
        {
            var reportName = report?.Name ?? null;

            try
            {
                if (String.IsNullOrEmpty(reportName))
                {
                    throw new Exception("The report has no filename.");
                }

                var targetPath = settings?.RemotePath?.Trim() ?? null;
                if (targetPath == null)
                {
                    var message = $"No target ftp path for report '{reportName}' found.";
                    logger.Error(message);
                    JobResult.Exception = ReportException.GetException(message);
                    JobResult.Status    = TaskStatusInfo.ERROR;
                    Results.Add(new FTPResult()
                    {
                        Success     = false,
                        ReportState = "ERROR",
                        TaskName    = JobResult.TaskName,
                        Message     = message,
                        ReportName  = reportName
                    });
                    return;
                }

                var ftpClient         = new FtpClient(settings.Host, settings.Port, settings.Username, settings.Password);
                var ftpEncryptionMode = FtpEncryptionMode.None;
                if (settings?.EncryptionMode != null)
                {
                    ftpEncryptionMode = (FtpEncryptionMode)Enum.Parse(typeof(FtpEncryptionMode), settings.EncryptionMode);
                }
                ftpClient.EncryptionMode         = ftpEncryptionMode;
                ftpClient.ValidateAnyCertificate = settings.UseSsl;
                ftpClient.Connect();

                var fileCount = 0;
                foreach (var reportPath in report.Paths)
                {
                    if (report.Paths.Count > 1)
                    {
                        fileCount++;
                    }
                    var fileData      = report.Data.FirstOrDefault(f => f.Filename == Path.GetFileName(reportPath));
                    var targetFtpFile = $"{targetPath}/{NormalizeReportName(reportName)}{Path.GetExtension(reportPath)}";
                    if (fileCount > 0)
                    {
                        targetFtpFile = $"{targetPath}/{NormalizeReportName(reportName)}_{fileCount}{Path.GetExtension(reportPath)}";
                    }
                    logger.Debug($"ftp distibute mode {settings.Mode}");

                    var ftpRemoteExists = FtpRemoteExists.Overwrite;
                    switch (settings.Mode)
                    {
                    case DistributeMode.CREATEONLY:
                        ftpRemoteExists = FtpRemoteExists.Skip;
                        break;

                    case DistributeMode.DELETEALLFIRST:
                        logger.Debug($"The FTP file '{targetFtpFile}' could not deleted.");
                        if (ftpClient.FileExists(targetFtpFile))
                        {
                            ftpClient.DeleteFile(targetFtpFile);
                        }
                        ftpRemoteExists = FtpRemoteExists.Skip;
                        break;

                    case DistributeMode.OVERRIDE:
                        ftpRemoteExists = FtpRemoteExists.Overwrite;
                        break;

                    default:
                        throw new Exception($"Unkown distribute mode {settings.Mode}");
                    }

                    // Create FTP Folder
                    var folderObject = ftpClient.GetObjectInfo(targetPath);
                    if (folderObject == null)
                    {
                        ftpClient.CreateDirectory(targetPath, true);
                    }

                    // Upload File
                    var ftpStatus = ftpClient.UploadFile(reportPath, targetFtpFile, ftpRemoteExists);
                    if (ftpStatus == FtpStatus.Success)
                    {
                        Results.Add(new FTPResult()
                        {
                            Success     = true,
                            ReportState = GetFormatedState(),
                            ReportName  = reportName,
                            TaskName    = JobResult.TaskName,
                            Message     = "FTP upload was executed successfully.",
                            FtpPath     = $"ftp://{settings.Host}{targetFtpFile}"
                        });
                    }
                    else
                    {
                        throw new Exception($"The FTP File '{targetFtpFile}' upload failed.");
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "The delivery via 'ftp' failed.");
                JobResult.Exception = ReportException.GetException(ex);
                JobResult.Status    = TaskStatusInfo.ERROR;
                Results.Add(new FTPResult()
                {
                    Success     = false,
                    ReportState = "ERROR",
                    TaskName    = JobResult.TaskName,
                    Message     = ex.Message,
                    ReportName  = reportName
                });
            }
        }