void SetFtpMusicFolders(MusicDataBase mdb, FtpServer ftpServer) { lock (ftpServer.RootFolders) { ftpServer.RootFolders.Clear(); foreach (var dir in mdb.MusicFolders) { try { FileSystem.GetFileSystemEntries(dir); string name = Path.GetFileNameWithoutExtension(dir); int i = 0; string selectedName = name; while (!ftpServer.RootFolders.TryAdd(selectedName, dir)) { selectedName = name + (++i); } this.LogDebug("Added root <cyan>{0}<default> {1}", selectedName, dir); } catch (Exception ex) { this.LogWarning(ex, "Cannot access folder {0}", dir); } } ftpServer.DisconnectAllClients(); } }
public ValidationResult Validate() { if (GitRepository == null) { return(ValidationResult.Invalid($"{nameof(GitRepository)} is null")); } if (FtpServer == null) { return(ValidationResult.Invalid($"{nameof(GitRepository)} is null")); } var gitValidation = GitRepository.Validate(); if (!gitValidation.IsValid) { return(gitValidation); } var ftpValidation = FtpServer.Validate(); if (!ftpValidation.IsValid) { return(ftpValidation); } return(ValidationResult.Valid); }
public static void AddServerTab(FtpServer server) { server.UserGroups = _groups ?? server.UserGroups; server.Users = _users ?? server.Users; TabPage tabPage = new TabPage(server.Config.ServerName); tabPage.Controls.Clear(); tabPage.Controls.AddRange(new Control[] { _mainForm.splitContainerMain }); var tab = new TabData() { Tab = tabPage, Server = server }; Tabs.Add(tab); _mainForm.tabInstance.Invoke(new MethodInvoker(() => { if (_mainForm.tabInstance.TabPages.Count == 1 && Tabs.Count <= 1) { _mainForm.tabInstance.TabPages.Clear(); } _mainForm.tabInstance.TabPages.Add(tabPage); _mainForm.tabInstance.SelectedTab = tabPage; })); Core.CurrentTabData = tab; _mainForm.Invoke(new MethodInvoker(() => _mainForm.toolStart.Enabled = true)); //_mainForm }
public WorkerJobRequest(int id, GitRepository gitRepository, FtpServer ftpServer) { Id = id; GitRepository = gitRepository; FtpServer = ftpServer; Status = WorkerJobStatus.Requested; }
protected override string OnProcess(string sMessage) { sMessage = sMessage.Trim(); if (sMessage == "") { return(GetMessage(500, string.Format("{0} needs a paramter", Command))); } string dirToMake = GetPath(FileNameHelpers.AppendDirTag(sMessage)); // check directory name if (!FileNameHelpers.IsValid(dirToMake)) { FtpServer.LogWrite(this, sMessage, 553, 0); return(GetMessage(553, string.Format("\"{0}\": Invalid directory name", sMessage))); } // check whether directory already exists if (ConnectionObject.FileSystemObject.DirectoryExists(dirToMake)) { FtpServer.LogWrite(this, sMessage, 553, 0); return(GetMessage(553, string.Format("Directory \"{0}\" already exists", sMessage))); } // create directory if (!ConnectionObject.FileSystemObject.CreateDirectory(dirToMake)) { FtpServer.LogWrite(this, sMessage, 550, 0); return(GetMessage(550, string.Format("Couldn't create directory. ({0})", sMessage))); } FtpServer.LogWrite(this, sMessage, 257, 0); return(GetMessage(257, string.Format("{0} successful \"{1}\".", Command, dirToMake))); }
public ActionResult SaveFtpServer(FtpServer ftpServer) { // Ftp Server connection test bool result = FtpServerFilesRepository.FtpConnectionTest(ftpServer); if (result) { // Get current user id from session int userId = (int?)System.Web.HttpContext.Current.Session["UserId"] ?? 0; //// ERROR HANDLE NEEDED WHEN session does not exist /// // Set user id ftpServer.UserId = userId; // Update Ftp Server info in FtpServers table UserRepository.UpdateFtpServer(ftpServer); // Update Cloud Service Status in Users table UserRepository.UpdateCloudServiceStatus(userId, true, (byte)CloudStorage.Models.User.ServiceType.FtpServer); return(Content("Ftp Server service has been registered SUCCESSFULLY.")); } else { return(View("FtpServerForm")); } }
private void LaunchFtpServer() { Directory.CreateDirectory(@"root"); // allow only anonymous logins var membershipProvider = new AnonymousMembershipProvider(); // use %TEMP%/TestFtpServer as root folder var fsProvider = new DotNetFileSystemProvider("root", false); // Use all commands from the FtpServer assembly and NOT the one(s) from the AuthTls assembly var commandFactory = new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).Assembly); // Initialize the FTP server _ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", FtpPort, commandFactory) { DefaultEncoding = Encoding.ASCII, // This can cause trouble. LogManager = new FtpLogManager(), }; // Start the FTP server _ftpServer.Start(); }
public void Start() { var log = LogHelper.GetLogger(this.GetType()); // 启动FTP服务器 try { var membershipProvider = new AnonymousMembershipProvider(); var fsProvider = new DotNetFileSystemProvider(Path.Combine(Path.GetTempPath(), "TestFtpServer"), false); ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1"); ftpServer.Start(); } catch (Exception ex) { log.Error("Create FtpServer failed.", ex); } // 启动Websocket服务器 try { // see: https://github.com/jjrdk/websocket-sharp webSocketServer = new WebSocketServer(null, int.Parse(webSocketPort)); webSocketServer.AddWebSocketService <SocketServer>("/Socket"); webSocketServer.Start(); } catch (Exception ex) { log.Error("Create websocket server failed.", ex); } }
public static void Main(string[] args) { IConfiguration conf = new ConfigurationBuilder() .AddJsonFile($"appsettings.json") .AddJsonFile($"appsettings.local.json", optional: true) .Build(); StorageProviderConfiguration.Init(conf); var _server = new FtpServer(new AzureFileSystemFactory(conf), conf); _server.NewConnection += nId => Console.WriteLine("Connection: {0} accepted", nId); // This is a sample worker implementation. Replace with your logic. Console.WriteLine("Information: FTPRole entry point called"); while (true) { if (_server.Started) { Thread.Sleep(10000); Console.WriteLine("Information: Server is alive"); } else { _server.Start(); Console.WriteLine("Control: Server starting"); } } }
public override bool Init(FtpServer server, IServerConfig config) { if (!base.Init(server, config)) return false; var userSettingFile = config.Options.GetValue("userSetting"); if (string.IsNullOrEmpty(userSettingFile)) { server.Logger.Error("No user setting file was not defined!"); return false; } if (!Path.IsPathRooted(userSettingFile)) userSettingFile = server.GetFilePath(userSettingFile); if (!File.Exists(userSettingFile)) { AppServer.Logger.Error("The userSetting file cannot be found!"); return false; } m_UserConfigFile = userSettingFile; ReadUserConfigFile(); m_UserConfigReadTimer = new Timer(OnUserConfigReadTimerCallback, null, Timeout.Infinite, Timeout.Infinite); return true; }
private static FtpServer StopServer(FtpServer ftpServer) { ftpServer.Start(); ftpServer.Stop(); return(ftpServer); }
protected override string OnProcess(string sMessage) { string sDirectory = ConnectionObject.CurrentDirectory; FtpServer.LogWrite(this, sMessage, 257, 0); return(GetMessage(257, string.Format("\"{0}\" {1} Successful.", sDirectory, Command))); }
static void Main(string[] args) { FtpServer f = new FtpServer(port: 21, enableIPv6: true, ipv6Port: 2121, logHeader: "UniFTP"); f.Config = new FtpConfig("D:\\Temp", welcome: new string[] { "By Ulysses" }); //Load configs... f.LoadConfigs(); //or add configs manually //f.AddUserGroup("test", AuthType.Password); //f.AddGroupRule("test", "/", "rwxrwxrwx"); //f.AddUser("root", "test", "test"); //Import SSL cert f.ImportCertificate("UniFTP.Open.pfx", null); //Log event f.OnLog += sender => Console.WriteLine(((FtpLogEntry)sender).ToString()); f.Config.LogInWelcome = new string[] { "Welcome back,Commander." }; //Add directory/file link f.AddLink("test", "M:\\ACGMusic", "/"); f.AddGroupRule("test", "/Music", "r-xr-xr-x"); f.Start(); Console.WriteLine("UniFTP Server Started!"); Console.ReadLine(); f.Stop(); //Save configs for next time f.SaveConfigs(); return; }
public IFileSystem Create(string sUser, string sPassword) { if ((sUser == null) || (sPassword == null)) { return(null); } FtpAccount account; if (!m_accountManager.CheckAccount(sUser, sPassword, out account)) { return(null); } if (!account.WriteAccess && !account.ReadAccess) { FtpServer.LogWrite($"user {sUser} has neither read nor write permissions"); return(null); } IFileSystem system = new AzureFileSystem(account.RootFolder ?? sUser); if (!account.WriteAccess) { system = new ReadOnlyFileSystem(system); } return(system); }
public List <FtpServer> GetAllFtpServerList() { try { SqlCommand scom = new SqlCommand("SELECT * FROM [dbo].[TblFTPServer]", DbConnector.Connect()); scom.CommandType = CommandType.Text; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(scom); da.Fill(ds); List <FtpServer> lstFtpServer = new List <FtpServer>(); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { FtpServer ftpServer = new FtpServer(); ftpServer.Id = Convert.ToInt32(ds.Tables[0].Rows[i]["Id"]); ftpServer.ServerAddress = Convert.ToString(ds.Tables[0].Rows[i]["ServerAddress"]); ftpServer.UserName = Convert.ToString(ds.Tables[0].Rows[i]["UserName"]); ftpServer.Password = Convert.ToString(ds.Tables[0].Rows[i]["Password"]); ftpServer.CreatedBy = Convert.ToInt32(ds.Tables[0].Rows[i]["CreatedBy"]); ftpServer.CreatedOn = Convert.ToDateTime(ds.Tables[0].Rows[i]["CreatedOn"]); ftpServer.ModifiedBy = Convert.ToInt32(ds.Tables[0].Rows[i]["ModifiedBy"]); ftpServer.ModifiedOn = Convert.ToDateTime(ds.Tables[0].Rows[i]["ModifiedOn"]); ftpServer.Active = Convert.ToBoolean(ds.Tables[0].Rows[i]["Active"]); lstFtpServer.Add(ftpServer); } return(lstFtpServer); } catch (Exception ex) { return(null); } return(null); }
public void ConstructorShouldSetConfigurationProperty() { var ftpConfiguration = new FtpConfiguration("Home", 21); var server = new FtpServer(ftpConfiguration, new MockFileSystem(), Substitute.For <IOperatingSystem>()); server.Configuration.ShouldBeEquivalentTo(ftpConfiguration); }
public void Add(IFtpServer ftpServer) { var copy = new FtpServer(); CopyEntity(copy, ftpServer); copy.Id = _lastId++; _servers.Add(copy); }
public void GetShouldWorkWithNullPath() { var client = new FtpClient("localhost", 8888); var server = new FtpServer(8888, 100); server.Start(); client.Get(null, null); server.Stop(); }
public SiteCommand(FtpServer ftp) { ftp.AddCustomCommand("SITE", new OnCommandHandler(Cmd_SITE)); AddCustomCommand("ADDUSER", new OnCommandHandler(Cmd_Site_AddUser)); AddCustomCommand("CHANGE", new OnCommandHandler(Cmd_Site_Change)); AddCustomCommand("DELUSER", new OnCommandHandler(Cmd_Site_DelUser)); AddCustomCommand("PASSWD", new OnCommandHandler(Cmd_Site_Passwd)); AddCustomCommand("HELP", new OnCommandHandler(Cmd_Site_Help)); }
public void OnetimeSetup() { port = new Random().Next(10000, 20000); var membershipProvider = new AnonymousMembershipProvider(); var fsProvider = new DotNetFileSystemProvider("ftp", false); ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", port, new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).GetTypeInfo().Assembly)); ftpServer.Start(); }
public void Setup() { var listener = new Listener(6666); listener.Listen(); ftp = new FtpServer("localhost", 6666); Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "test")); }
protected override string OnProcess(string sMessage) { string[] args = sMessage.Split(' '); if (args.Length > 2 || args.Length < 1) { return(GetMessage(501, string.Format("Invalid TYPE parameter: {0}", sMessage))); } switch (args[0].ToUpper()) { case "A": ConnectionObject.DataType = DataType.Ascii; if (args.Length == 1) { FtpServer.LogWrite(this, sMessage, 200, 0); return(GetMessage(200, string.Format("{0} command succeeded, data type is Ascii", Command))); } else { switch (args[1].ToUpper()) { case "N": ConnectionObject.FormatControl = FormatControl.NonPrint; FtpServer.LogWrite(this, sMessage, 200, 0); return(GetMessage(200, string.Format("{0} command succeeded, data type is Ascii, format is NonPrint", Command))); case "T": case "C": ConnectionObject.FormatControl = FormatControl.NonPrint; FtpServer.LogWrite(this, sMessage, 504, 0); return(GetMessage(504, string.Format("Format {0} is not supported, use NonPrint format", args[1]))); default: FtpServer.LogWrite(this, sMessage, 550, 0); return(GetMessage(550, string.Format("Error - unknown format \"{0}\"", args[1]))); } } case "I": ConnectionObject.DataType = DataType.Image; FtpServer.LogWrite(this, sMessage, 200, 0); return(GetMessage(200, string.Format("{0} command succeeded, data type is Image (Binary)", Command))); case "E": case "L": ConnectionObject.DataType = DataType.Image; FtpServer.LogWrite(this, sMessage, 504, 0); return(GetMessage(504, string.Format("Data type {0} is not supported, use Image (Binary) type", args[0]))); default: FtpServer.LogWrite(this, sMessage, 550, 0); return(GetMessage(550, string.Format("Error - unknown data type \"{0}\"", args[1]))); } }
/// <summary> /// 从FTP服务器下载文件,指定本地路径和本地文件名 /// </summary> /// <param name="remoteFileName">远程文件名</param> /// <param name="localFileName">保存本地的文件名(包含路径)</param> /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param> /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param> public void Download(string remoteFileName, string localFileName, bool ifCredential = false, Action <int, int> updateProgress = null) { using (FileStream outputStream = new FileStream(localFileName, FileMode.Create)) { if (FtpServer == null || FtpServer.Trim().Length == 0) { throw new Exception("ftp下载目标服务器地址未设置!"); } Uri uri = new Uri("ftp://" + FtpServer + "/" + remoteFileName); var ftpsize = (FtpWebRequest)WebRequest.Create(uri); ftpsize.UseBinary = true; var reqFtp = (FtpWebRequest)WebRequest.Create(uri); reqFtp.UseBinary = true; reqFtp.KeepAlive = false; if (ifCredential) //使用用户身份认证 { ftpsize.Credentials = new NetworkCredential(Username, Password); reqFtp.Credentials = new NetworkCredential(Username, Password); } ftpsize.Method = WebRequestMethods.Ftp.GetFileSize; using (FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse()) { long totalBytes = re.ContentLength; reqFtp.Method = WebRequestMethods.Ftp.DownloadFile; var response = (FtpWebResponse)reqFtp.GetResponse(); using (response) { var ftpStream = response.GetResponseStream(); //更新进度 using (ftpStream) { updateProgress?.Invoke((int)totalBytes, 0); //更新进度条 long totalDownloadedByte = 0; int bufferSize = 1024 * 1024; byte[] buffer = new byte[bufferSize]; if (ftpStream != null) { var readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { totalDownloadedByte = readCount + totalDownloadedByte; outputStream.Write(buffer, 0, readCount); //更新进度 updateProgress?.Invoke((int)totalBytes, (int)totalDownloadedByte); //更新进度条 readCount = ftpStream.Read(buffer, 0, bufferSize); } } } } } } }
public FileServer(MountHandler parent, string host, int port, string user, string pass) { Parent = parent; var fsFact = new VirtualFsFactory(this); var mbFact = new FixedMemberProvider(user, pass); var ass = typeof(FtpServer).Assembly; var commands = new AssemblyFtpCommandHandlerFactory(ass); server = new FtpServer(fsFact, mbFact, host, port, commands); server.Start(); }
public void GetFilesShouldListFiles() { server = GetFtpServer(); server.Start(); File.Create(Path.Combine(ftpHomeDirectory, "someFile.csv")).Dispose(); File.Create(Path.Combine(ftpHomeDirectory, "TestFile1.txt")).Dispose(); server.GetFiles(".").ShouldAllBeEquivalentTo(new[] { "someFile.csv", "TestFile1.txt" }); }
public void Go(string[] args) { GetArgsAndConfig(args); if (_verbose) { ConsoleTraceListener conTrace = new ConsoleTraceListener(); Trace.Listeners.Add(conTrace); } _server = new FtpServer(new AzureFileSystemFactory()); _server.NewConnection += ServerNewConnection; _server.Start(); }
private static void Main() { // Load server certificate var cert = new X509Certificate2("test.pfx"); AuthTlsCommandHandler.ServerCertificate = cert; // Only allow anonymous login var membershipProvider = new AnonymousMembershipProvider(new NoValidation()); // Use the .NET file system var fsProvider = new DotNetFileSystemProvider(Path.Combine(Path.GetTempPath(), "TestFtpServer")); // Use all commands from the FtpServer assembly and the one(s) from the AuthTls assembly var commandFactory = new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).Assembly, typeof(AuthTlsCommandHandler).Assembly); // Initialize the FTP server using (var ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", Port, commandFactory) { DefaultEncoding = Encoding.ASCII, LogManager = new FtpLogManager(), }) { #if USE_FTPS_IMPLICIT // Use an implicit SSL connection (without the AUTHTLS command) ftpServer.ConfigureConnection += (s, e) => { var sslStream = new FixedSslStream(e.Connection.OriginalStream); sslStream.AuthenticateAsServer(cert); e.Connection.SocketStream = sslStream; }; #endif // Create the default logger var log = ftpServer.LogManager?.CreateLog(typeof(Program)); try { // Start the FTP server ftpServer.Start(); Console.WriteLine("Press ENTER/RETURN to close the test application."); Console.ReadLine(); // Stop the FTP server ftpServer.Stop(); } catch (Exception ex) { log?.Error(ex, "Error during main FTP server loop"); } } }
protected override string OnProcess(string sMessage) { sMessage = sMessage.Trim(); if (sMessage == "") { return(GetMessage(501, string.Format("{0} needs a parameter", Command))); } ConnectionObject.User = sMessage; FtpServer.LogWrite(this, sMessage, 331, 0); return(GetMessage(331, string.Format("User {0} logged in, needs password", sMessage))); }
protected override string OnProcess(string sMessage) { if (sMessage.Trim() != "") { return(GetMessage(501, "REIN needs no parameters")); } // log out current user ConnectionObject.LogOut(); FtpServer.LogWrite(this, sMessage, 220, 0); return(GetMessage(220, "Service ready for new user!")); }
public override bool OnStart() { if (_server == null) { _server = new FtpServer(); } _server.NewConnection += ServerNewConnection; _server.UserLogoutEvent += ServerLogoutEvent; _server.errorHandler += ErrorHandle; return(base.OnStart()); }
/// <summary> /// Get a default FTP Server handler based on the enum value. /// </summary> public static FtpBaseServer GetServerHandler(FtpServer value) { if (value != FtpServer.Unknown) { foreach (var server in AllServers) { if (server.ToEnum() == value) { return(server); } } } return(null); }
public virtual bool Init(FtpServer server, IServerConfig config) { AppServer = server; var dataPortNode = config.Options.GetValue("dataPort"); if (string.IsNullOrEmpty(dataPortNode)) { server.Logger.Error("Parameter 'dataPort' is required!"); return false; } string[] range = dataPortNode.Split(',', ';', ':'); for (int i = 0; i < range.Length; i++) { string portField = range[i]; if (string.IsNullOrEmpty(portField)) continue; string[] arrPorts = portField.Split('-'); if (arrPorts == null || arrPorts.Length < 1 || arrPorts.Length > 2) { server.Logger.Error("Invalid 'dataPort' value in parameter!"); return false; } if (arrPorts.Length == 1) { int port; if (!int.TryParse(arrPorts[0], out port)) { server.Logger.Error("Invalid 'dataPort' value in parameter!"); return false; } m_DataPorts.Add(port); } else if (arrPorts.Length == 2) { int portStart, portEnd; if (!int.TryParse(arrPorts[0], out portStart)) { server.Logger.Error("Invalid 'dataPort' value in parameter!"); return false; } if (!int.TryParse(arrPorts[1], out portEnd)) { server.Logger.Error("Invalid 'dataPort' value in parameter!"); return false; } if (portEnd <= portStart) { server.Logger.Error("Invalid 'dataPort' value in parameter!"); return false; } if (portStart < 0) portStart = 1; if (portEnd > 65535) portEnd = 65535; for (int seq = portStart; seq < portEnd + 1; seq++) { m_DataPorts.Add(seq); } } } return true; }