public void SetUp()
 {
     _ftpConnectionWrap = Substitute.For <IFtpConnection>();
     _pathUtil          = Substitute.For <IPathUtil>();
     _pathUtil.MAX_PATH.Returns(259);
     _uniqueFilenameForFtp = new UniqueFilenameForFtp(Filename, _ftpConnectionWrap, _pathUtil);
 }
Beispiel #2
0
        protected override ActionResult DoActionProcessing(Job job)
        {
            var ftpAccount = job.Accounts.GetFtpAccount(job.Profile);

            Logger.Debug("Creating ftp connection.\r\nServer: " + ftpAccount.Server + "\r\nUsername: "******"Exception while login to ftp server: ");
                ftpClient.Disconnect();
                return(new ActionResult(ErrorCode.Ftp_LoginError));
            }

            var fullDirectory = job.TokenReplacer.ReplaceTokens(job.Profile.Ftp.Directory).Trim();

            if (!ValidName.IsValidFtpPath(fullDirectory))
            {
                Logger.Warn("Directory contains invalid characters \"" + fullDirectory + "\"");
                fullDirectory = ValidName.MakeValidFtpPath(fullDirectory);
            }

            Logger.Debug("Directory on ftp server: " + fullDirectory);

            try
            {
                if (!ftpClient.DirectoryExists(fullDirectory))
                {
                    ftpClient.CreateDirectory(fullDirectory);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Exception while setting directory on ftp server: ");
                ftpClient.Disconnect();
                return(new ActionResult(ErrorCode.Ftp_DirectoryError));
            }

            foreach (var file in job.OutputFiles)
            {
                var targetFile = PathSafe.GetFileName(file);
                targetFile = ValidName.MakeValidFtpPath(targetFile);
                if (job.Profile.Ftp.EnsureUniqueFilenames)
                {
                    Logger.Debug("Make unique filename for " + targetFile);
                    try
                    {
                        var uf = new UniqueFilenameForFtp(targetFile, ftpClient, _pathUtil);
                        targetFile = uf.CreateUniqueFileName();
                        Logger.Debug("-> The unique filename is \"" + targetFile + "\"");
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex, "Exception while generating unique filename: ");
                        ftpClient.Disconnect();
                        return(new ActionResult(ErrorCode.Ftp_DirectoryReadError));
                    }
                }

                try
                {
                    ftpClient.UploadFile(file, fullDirectory + "/" + targetFile);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex, "Exception while uploading the file \"" + file);
                    ftpClient.Disconnect();
                    return(new ActionResult(ErrorCode.Ftp_UploadError));
                }
            }

            ftpClient.Disconnect();
            return(new ActionResult());
        }
Beispiel #3
0
        protected override ActionResult DoActionProcessing(Job job)
        {
            var ftpAccount = job.Accounts.GetFtpAccount(job.Profile);

            Logger.Debug("Creating ftp connection.\r\nServer: " + ftpAccount.Server + "\r\nUsername: "******"Can not connect to the internet for login to ftp. Win32Exception Message:\r\n" + ex.Message);
                    ftpConnection.Close();
                    return(new ActionResult(ErrorCode.Ftp_ConnectionError));
                }
                if (ex.NativeErrorCode.Equals(12014))
                {
                    Logger.Error("Can not login to ftp because the password is incorrect. Win32Exception Message:\r\n" + ex.Message);
                    ftpConnection.Close();
                    return(new ActionResult(ErrorCode.PasswordAction_Login_Error));
                }

                Logger.Error("Win32Exception while login to ftp server:\r\n" + ex.Message);
                ftpConnection.Close();
                return(new ActionResult(ErrorCode.Ftp_LoginError));
            }
            catch (Exception ex)
            {
                Logger.Error("Exception while login to ftp server:\r\n" + ex.Message);
                ftpConnection.Close();
                return(new ActionResult(ErrorCode.Ftp_LoginError));
            }

            var fullDirectory = job.TokenReplacer.ReplaceTokens(job.Profile.Ftp.Directory).Trim();

            if (!ValidName.IsValidFtpPath(fullDirectory))
            {
                Logger.Warn("Directory contains invalid characters \"" + fullDirectory + "\"");
                fullDirectory = ValidName.MakeValidFtpPath(fullDirectory);
            }

            Logger.Debug("Directory on ftp server: " + fullDirectory);

            var directories = fullDirectory.Split(new[] { "/" }, StringSplitOptions.RemoveEmptyEntries);

            try
            {
                foreach (var directory in directories)
                {
                    if (!ftpConnection.DirectoryExists(directory))
                    {
                        Logger.Debug("Create folder: " + directory);
                        ftpConnection.CreateDirectory(directory);
                    }
                    Logger.Debug("Move to: " + directory);
                    ftpConnection.SetCurrentDirectory(directory);
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Exception while setting directory on ftp server\r\n:" + ex.Message);
                ftpConnection.Close();
                return(new ActionResult(ErrorCode.Ftp_DirectoryError));
            }

            foreach (var file in job.OutputFiles)
            {
                var targetFile = Path.GetFileName(file);
                targetFile = ValidName.MakeValidFtpPath(targetFile);
                if (job.Profile.Ftp.EnsureUniqueFilenames)
                {
                    Logger.Debug("Make unique filename for " + targetFile);
                    try
                    {
                        var uf = new UniqueFilenameForFtp(targetFile, ftpConnection, _pathUtil);
                        targetFile = uf.CreateUniqueFileName();
                        Logger.Debug("-> The unique filename is \"" + targetFile + "\"");
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Exception while generating unique filename\r\n:" + ex.Message);
                        ftpConnection.Close();
                        return(new ActionResult(ErrorCode.Ftp_DirectoryReadError));
                    }
                }

                try
                {
                    ftpConnection.PutFile(file, targetFile);
                }
                catch (Exception ex)
                {
                    Logger.Error("Exception while uploading the file \"" + file + "\": \r\n" + ex.Message);
                    ftpConnection.Close();
                    return(new ActionResult(ErrorCode.Ftp_UploadError));
                }
            }

            ftpConnection.Close();
            return(new ActionResult());
        }
        private ActionResult FtpUpload(Job job)
        {
            var actionResult = Check(job.Profile, job.Accounts);

            if (!actionResult)
            {
                Logger.Error("Canceled FTP upload action.");
                return(actionResult);
            }

            if (string.IsNullOrEmpty(job.Passwords.FtpPassword))
            {
                Logger.Error("No ftp password specified in action");
                return(new ActionResult(ErrorCode.Ftp_NoPassword));
            }

            Logger.Debug("Creating ftp connection.\r\nServer: " + job.Profile.Ftp.Server + "\r\nUsername: "******"Can not connect to the internet for login to ftp. Win32Exception Message:\r\n" + ex.Message);
                    ftpConnection.Close();
                    return(new ActionResult(ErrorCode.Ftp_ConnectionError));
                }
                else if (ex.NativeErrorCode.Equals(12014))
                {
                    Logger.Error("Can not login to ftp because the password is incorrect. Win32Exception Message:\r\n" + ex.Message);
                    ftpConnection.Close();
                    var retypeResult = _passwordProvider.RetypePassword(job);
                    if (retypeResult)
                    {
                        return(FtpUpload(job));
                    }
                    else
                    {
                        return(retypeResult);
                    }
                }

                Logger.Error("Win32Exception while login to ftp server:\r\n" + ex.Message);
                ftpConnection.Close();
                return(new ActionResult(ErrorCode.Ftp_LoginError));
            }
            catch (Exception ex)
            {
                Logger.Error("Exception while login to ftp server:\r\n" + ex.Message);
                ftpConnection.Close();
                return(new ActionResult(ErrorCode.Ftp_LoginError));
            }

            var fullDirectory = job.TokenReplacer.ReplaceTokens(job.Profile.Ftp.Directory).Trim();

            if (!IsValidPath(fullDirectory))
            {
                Logger.Warn("Directory contains invalid characters \"" + fullDirectory + "\"");
                fullDirectory = MakeValidPath(fullDirectory);
            }

            Logger.Debug("Directory on ftp server: " + fullDirectory);

            var directories = fullDirectory.Split(new[] { "/" }, StringSplitOptions.RemoveEmptyEntries);

            try
            {
                foreach (var directory in directories)
                {
                    if (!ftpConnection.DirectoryExists(directory))
                    {
                        Logger.Debug("Create folder: " + directory);
                        ftpConnection.CreateDirectory(directory);
                    }
                    Logger.Debug("Move to: " + directory);
                    ftpConnection.SetCurrentDirectory(directory);
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Exception while setting directory on ftp server\r\n:" + ex.Message);
                ftpConnection.Close();
                return(new ActionResult(ErrorCode.Ftp_DirectoryError));
            }

            foreach (var file in job.OutputFiles)
            {
                var targetFile = Path.GetFileName(file);
                targetFile = MakeValidPath(targetFile);
                if (job.Profile.Ftp.EnsureUniqueFilenames)
                {
                    Logger.Debug("Make unique filename for " + targetFile);
                    try
                    {
                        var uf = new UniqueFilenameForFtp(targetFile, ftpConnection, _pathUtil);
                        targetFile = uf.CreateUniqueFileName();
                        Logger.Debug("-> The unique filename is \"" + targetFile + "\"");
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Exception while generating unique filename\r\n:" + ex.Message);
                        ftpConnection.Close();
                        return(new ActionResult(ErrorCode.Ftp_DirectoryReadError));
                    }
                }

                try
                {
                    ftpConnection.PutFile(file, targetFile);
                }
                catch (Exception ex)
                {
                    Logger.Error("Exception while uploading the file \"" + file + "\": \r\n" + ex.Message);
                    ftpConnection.Close();
                    return(new ActionResult(ErrorCode.Ftp_UploadError));
                }
            }

            ftpConnection.Close();
            return(new ActionResult());
        }