Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
                    }
                }
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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));
            }
        }