public override bool CheckLogin(string username, string password, VirtualFtpSession session) { if (username.ToLower().Equals(server.RootFolder.Name.ToLower())) { return(Common.Solution.CreateFromContext("").RootPassword.Equals(password)); } String[] arr = username.Split('_'); if (arr.Length == 2) { String solutionName = arr[0]; if (arr[1].ToLower().Equals("admin")) { foreach (String dir in System.IO.Directory.EnumerateDirectories(rootPath)) { String name = new System.IO.DirectoryInfo(dir).Name; if (solutionName.ToLower().Equals(name.ToLower())) { return(Common.Solution.CreateFromContext(solutionName).SolutionPassword.Equals(password)); } } return(false); } Guid userId; if (System.Guid.TryParse(arr[1], out userId)) { return(Common.Logon.UserExists(solutionName, userId, password)); } } return(false); }
private void OnUserLogin(object sender, FtpUserLoginEventArgs e) { if (e.LoginOk) { VirtualFtpServer server = (VirtualFtpServer)sender; VirtualFtpSession session = (VirtualFtpSession)e.Session; session.IsFileAdmin = e.UserName.Equals(server.RootFolder.Name); session.CurrentFolder = GetUserFolder(session); } }
private void OnChangeDirectory(object sender, FtpChangeDirectoryArgs e) { VirtualFtpServer server = (VirtualFtpServer)sender; VirtualFtpSession session = (VirtualFtpSession)e.Session; if (e.NewDirectory.Equals("/")) { session.CurrentFolder = server.RootFolder.GetSubFolder(session.Username, session); session.Directory = String.Format(@"/{0}/", session.Username); } }
private IFtpFolder CreateRootFolder(VirtualFtpSession session) { VirtualFolder f = new VirtualFolder(rootFolder, session.Username); SetReadOnly(f, session.Username); foreach (String dir in System.IO.Directory.EnumerateDirectories(rootPath)) { String name = new System.IO.DirectoryInfo(dir).Name; DiscFolder df = new DiscFolder(null, name, dir); SetReadOnly(df, session.Username); f.Add(df); } rootFolder.Add(f); return(f); }
private IFtpFolder CreateAdminFolder(VirtualFtpSession session) { String solutionName = session.Username.Split('_')[0]; CreateFileSystemFoldersIfNotExists(solutionName); VirtualFolder f = new VirtualFolder(rootFolder, session.Username); SetReadOnly(f, session.Username); DiscFolder df; df = new DiscFolder(null, "exchange", GetExchangeFolder(solutionName)); SetReadOnly(df, session.Username); df.UserWrite = true; f.Add(df); CatalogFile cfs = new CatalogFile(null, "exchange.txt", GetExchangeFolder(solutionName)); SetReadOnly(cfs, session.Username); f.Add(cfs); df = new DiscFolder(null, "shared", GetSharedFolder(solutionName)); SetReadOnly(df, session.Username); df.UserWrite = true; f.Add(df); cfs = new CatalogFile(null, "shared.txt", GetSharedFolder(solutionName)); SetReadOnly(cfs, session.Username); f.Add(cfs); df = new DiscFolder(null, "private", GetPrivateFolder(solutionName, "")); SetReadOnly(df, session.Username); df.UserWrite = true; f.Add(df); cfs = new CatalogFile(null, "private.txt", GetPrivateFolder(solutionName, "")); SetReadOnly(cfs, session.Username); f.Add(cfs); rootFolder.Add(f); return(f); }
public virtual bool CheckLogin(string aUsername, string aPassword, VirtualFtpSession aSession) { VirtualFtpSession lSession = (VirtualFtpSession)aSession; using (MySqlConnection lConnection = new MySqlConnection()) { lConnection.ConnectionString = sConnectionString; lConnection.Open(); MySqlCommand lCmd = new MySqlCommand(String.Format("select l.admin from login l inner join ips z on l.username=z.username where l.username='******' and z.ip='{1}' and l.passwordhash='{2}'", aUsername.Replace("'", "''"), ((IPEndPoint)aSession.RemoteEndPoint).Address.ToString(), GenerateHash(aPassword)), lConnection); using (MySqlDataReader lReader = lCmd.ExecuteReader()) { if (lReader.Read()) { if (lReader.GetInt32(0) == 1) { lSession.IsSuperUser = false; lSession.IsFileAdmin = true; } else if (lReader.GetInt32(0) == 2) { lSession.IsSuperUser = true; lSession.IsFileAdmin = true; } else { lSession.IsSuperUser = false; lSession.IsFileAdmin = false; } return(true); } else { return(false); } } } }
private IFtpFolder CreateUserFolder(VirtualFtpSession session) { String[] arr = session.Username.Split('_'); String solutionName = arr[0]; String userFolderName = arr[1]; CreateFileSystemFoldersIfNotExists(solutionName); VirtualFolder f = new VirtualFolder(rootFolder, session.Username); SetReadOnly(f, session.Username); String sharedFolder = GetSharedFolder(solutionName); DiscFolder df; df = new DiscFolder(null, "shared", sharedFolder); SetReadOnly(df, session.Username); f.Add(df); CatalogFile cfs = new CatalogFile(null, "shared.txt", sharedFolder); SetReadOnly(cfs, session.Username); f.Add(cfs); String privateFolder = GetPrivateFolder(solutionName, userFolderName); df = new DiscFolder(null, "private", privateFolder); SetReadOnly(df, session.Username); df.UserWrite = true; f.Add(df); CatalogFile cfp = new CatalogFile(null, "private.txt", privateFolder); SetReadOnly(cfp, session.Username); f.Add(cfp); rootFolder.Add(f); return(f); }
private IFtpFolder GetUserFolder(VirtualFtpSession session) { IFtpFolder userFolder = rootFolder.GetSubFolder(session.Username, session); if (userFolder != null) { return(userFolder); } else { if (session.IsFileAdmin) { return(CreateRootFolder(session)); } if (session.Username.ToLower().EndsWith("_admin")) { return(CreateAdminFolder(session)); } return(CreateUserFolder(session)); } }