Example #1
0
        public void TestIMAPFolderPermissionAccessGroup()
        {
            Application application = SingletonProvider <TestSetup> .Instance.GetApp();


            Account account1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            Group group = SingletonProvider <TestSetup> .Instance.AddGroup("TestGroup");

            IMAPFolders publicFolders = _settings.PublicFolders;
            IMAPFolder  folder        = publicFolders.Add("Share1");

            folder.Save();

            IMAPFolderPermission permission = folder.Permissions.Add();

            permission.PermissionGroupID = group.ID;
            permission.PermissionType    = eACLPermissionType.ePermissionTypeGroup;
            permission.Save();

            CustomAssert.AreEqual(permission.Group.Name, group.Name);

            permission = folder.Permissions.Add();
            permission.PermissionAccountID = account1.ID;
            permission.PermissionType      = eACLPermissionType.ePermissionTypeUser;
            permission.Save();

            CustomAssert.AreEqual(permission.Account.Address, account1.Address);
        }
Example #2
0
        private void RemoveAllSharedFolders()
        {
            IMAPFolders folders = _settings.PublicFolders;

            while (folders.Count > 0)
            {
                folders.DeleteByDBID(folders[0].ID);
            }

            string publicFolderPath = Path.Combine(_settings.Directories.DataDirectory, "#Public");

            if (Directory.Exists(publicFolderPath))
            {
                Directory.Delete(publicFolderPath, true);
            }
        }
Example #3
0
        //Enumerate IMAP folders
        public List <string> ListFolder(IMAPFolders folders, int iRecursion = 0)
        {
            iRecursion += 1;
            List <string> folderNames = new List <string>();

            for (int i = 0; i <= folders.Count - 1; i++)
            {
                folderNames.Add(folders[i].Name + iRecursion * 3);
                folderNames.AddRange(ListFolder(folders[i].SubFolders, iRecursion));
            }
            iRecursion -= 1;

            foreach (var i in folderNames)
            {
                Console.WriteLine(i);
            }

            return(folderNames);
        }
Example #4
0
        public void ConfirmFileAddedToCorrectPublicFolder()
        {
            TestSetup testSetup  = SingletonProvider <TestSetup> .Instance;
            Account   oAccount   = testSetup.AddAccount(_domain, "*****@*****.**", "test");
            var       oSimulator = new ImapClientSimulator();

            // Confirm that the public folder is empty before we start our test.
            string publicDir = GetPublicDirectory();

            CustomAsserts.AssertFilesInDirectory(publicDir, 0);

            IMAPFolders folders = _application.Settings.PublicFolders;
            IMAPFolder  folder  = folders.Add("Share");

            folder.Save();

            // Give everyone access to the folder.
            IMAPFolderPermission permission = folder.Permissions.Add();

            permission.PermissionType = eACLPermissionType.ePermissionTypeAnyone;
            permission.set_Permission(eACLPermission.ePermissionLookup, true);
            permission.set_Permission(eACLPermission.ePermissionRead, true);
            permission.set_Permission(eACLPermission.ePermissionInsert, true);
            permission.Save();

            // Add the message to the public folder.
            oSimulator.Connect();
            oSimulator.LogonWithLiteral("*****@*****.**", "test");
            oSimulator.SendSingleCommandWithLiteral("A01 APPEND #Public.Share {4}", "ABCD");

            // Confirm that the message exists in the public folder and not in the inbox.
            Assert.AreEqual(1, oSimulator.GetMessageCount("#Public.Share"));
            Assert.AreEqual(0, oSimulator.GetMessageCount("INBOX"));
            oSimulator.Disconnect();


            // The public directory should now contain the message.
            CustomAsserts.AssertFilesInDirectory(publicDir, 1);

            // There users directory should still be empty.
            CustomAsserts.AssertFilesInUserDirectory(oAccount, 0);
        }
Example #5
0
        private void ConfirmPublicFolders()
        {
            if (_backupMessages)
            {
                Domain domain = _application.Domains[0];

                IMAPFolders publicFolders = _application.Settings.PublicFolders;

                Assert.IsNotNull(publicFolders.get_ItemByName("Test1"));
                Assert.IsNotNull(publicFolders.get_ItemByName("Test2"));
                Assert.IsNotNull(publicFolders.get_ItemByName("Test3"));
                Assert.IsNotNull(publicFolders.get_ItemByName("ACL"));

                IMAPFolderPermissions permissions = publicFolders.get_ItemByName("ACL").Permissions;
                Assert.AreEqual(1, permissions.Count);

                Account account1 = domain.Accounts.get_ItemByAddress("*****@*****.**");

                IMAPFolderPermission permission = permissions[0];

                Assert.AreEqual(eACLPermissionType.ePermissionTypeUser, permission.PermissionType);
                Assert.AreEqual(account1.ID, permission.PermissionAccountID);

                Assert.IsTrue(permission.get_Permission(eACLPermission.ePermissionAdminister));
                Assert.IsTrue(permission.get_Permission(eACLPermission.ePermissionInsert));
                Assert.IsFalse(permission.get_Permission(eACLPermission.ePermissionRead));
                Assert.IsFalse(permission.get_Permission(eACLPermission.ePermissionWriteSeen));

                Group group1 = _application.Settings.Groups.get_ItemByName("ACLTestGroup");

                permissions = publicFolders.get_ItemByName("ACL").SubFolders.get_ItemByName("MySubFolder").Permissions;
                permission  = permissions[0];

                Assert.AreEqual(eACLPermissionType.ePermissionTypeGroup, permission.PermissionType);
                Assert.AreEqual(group1.ID, permission.PermissionGroupID);

                Assert.IsTrue(permission.get_Permission(eACLPermission.ePermissionLookup));
                Assert.IsTrue(permission.get_Permission(eACLPermission.ePermissionDeleteMailbox));
                Assert.IsFalse(permission.get_Permission(eACLPermission.ePermissionRead));
                Assert.IsFalse(permission.get_Permission(eACLPermission.ePermissionWriteSeen));
            }
        }
Example #6
0
        private void SetupPublicFolders()
        {
            IMAPFolders folders = _application.Settings.PublicFolders;
            IMAPFolder  folder  = folders.Add("Test1");

            folder.Save();

            folder = folders.Add("Test2");
            folder.Save();

            folder = folders.Add("Test3");
            folder.Save();

            folder = folders.Add("ACL");
            folder.Save();

            Domain  domain   = _application.Domains[0];
            Account account1 = SingletonProvider <TestSetup> .Instance.AddAccount(domain, "*****@*****.**", "test");

            IMAPFolderPermission permission = folder.Permissions.Add();

            permission.PermissionType      = eACLPermissionType.ePermissionTypeUser;
            permission.PermissionAccountID = account1.ID;
            permission.set_Permission(eACLPermission.ePermissionAdminister, true);
            permission.set_Permission(eACLPermission.ePermissionInsert, true);
            permission.Save();

            folder = folder.SubFolders.Add("MySubFolder");
            folder.Save();

            Group group1 = _application.Settings.Groups.Add();

            group1.Name = "ACLTestGroup";
            group1.Save();

            permission = folder.Permissions.Add();
            permission.PermissionType    = eACLPermissionType.ePermissionTypeGroup;
            permission.PermissionGroupID = group1.ID;
            permission.set_Permission(eACLPermission.ePermissionLookup, true);
            permission.set_Permission(eACLPermission.ePermissionDeleteMailbox, true);
            permission.Save();
        }
Example #7
0
        public void TestRenameRootPublicFolder()
        {
            IMAPFolders folders = _application.Settings.PublicFolders;
            IMAPFolder  folder  = folders.Add("ShareA");

            folder.Save();

            IMAPFolderPermission permission = folder.Permissions.Add();

            permission.PermissionType = eACLPermissionType.ePermissionTypeAnyone;
            permission.set_Permission(eACLPermission.ePermissionLookup, true);
            permission.set_Permission(eACLPermission.ePermissionRead, true);
            permission.set_Permission(eACLPermission.ePermissionDeleteMailbox, true);
            permission.Save();

            IMAPFolder folder2 = folders.Add("ShareB");

            folder2.Save();

            IMAPFolderPermission permission2 = folder2.Permissions.Add();

            permission2.PermissionType = eACLPermissionType.ePermissionTypeAnyone;
            permission2.set_Permission(eACLPermission.ePermissionLookup, true);
            permission2.set_Permission(eACLPermission.ePermissionRead, true);
            permission2.set_Permission(eACLPermission.ePermissionDeleteMailbox, true);
            permission2.Save();

            Account account = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            var simulator1 = new IMAPClientSimulator();

            simulator1.ConnectAndLogon(account.Address, "test");
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareA"));
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB"));
            CustomAssert.IsTrue(simulator1.RenameFolder("#Public.ShareA", "#Public.ShareB.ShareA"));
            CustomAssert.IsFalse(simulator1.SelectFolder("#Public.ShareA"));
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB"));
            CustomAssert.IsTrue(simulator1.SelectFolder("#Public.ShareB.ShareA"));
        }
Example #8
0
        public static IMAPFolder AssertFolderExists(IMAPFolders folders, string folderName)
        {
            int timeout = 100;

            while (timeout > 0)
            {
                try
                {
                    return(folders.get_ItemByName(folderName));
                }
                catch (Exception)
                {
                }

                timeout--;
                Thread.Sleep(100);
            }

            string error = "Folder could not be found " + folderName;

            CustomAssert.Fail(error);
            return(null);
        }
Example #9
0
        public void TestSaveMessageInPublicIMAPFolder()
        {
            Settings settings = SingletonProvider <TestSetup> .Instance.GetApp().Settings;

            IMAPFolders publicFolders = settings.PublicFolders;

            IMAPFolder testFolder = publicFolders.Add("TestFolder");

            testFolder.Save();

            // Send a message to the account.
            hMailServer.Message oMessage = testFolder.Messages.Add();

            CustomAssert.AreEqual(0, oMessage.State);

            oMessage.Body    = "Välkommen till verkligheten";
            oMessage.Subject = "Hej";
            oMessage.Save();

            CustomAssert.AreEqual(2, oMessage.State);
            CustomAssert.IsTrue(oMessage.Filename.Contains(settings.PublicFolderDiskName));
            CustomAssert.IsFalse(oMessage.Filename.Contains(_domain.Name));
        }
Example #10
0
        //Enumerate messages in aN IMAP folder
        public List <string> ListFiles(IMAPFolders folders, int iRecursion = 0)
        {
            iRecursion += 1;
            List <string> filenames = new List <string>();

            for (int i = 0; i <= folders.Count - 1; i++)
            {
                if (folders[i].Messages.Count == 0)
                {
                    Console.WriteLine(folders[i].Name + " 0 messages");
                }
                for (int y = 0; y < folders[i].Messages.Count; y++)
                {
                    Console.WriteLine(folders[i].Name + " " + folders[i].Messages[y].Filename);
                    filenames.Add(folders[i].Messages[y].Filename);
                    filenames.AddRange(ListFolder(folders[i].SubFolders, iRecursion));
                }
                Console.WriteLine("\n");
            }
            iRecursion -= 1;

            return(filenames);
        }
Example #11
0
        public void TestReplaceFullPathInPublicFolderWithPartialPath()
        {
            Application application = SingletonProvider <TestSetup> .Instance.GetApp();

            Account account1 = SingletonProvider <TestSetup> .Instance.AddAccount(_domain, "*****@*****.**", "test");

            IMAPFolders publicFolders = _settings.PublicFolders;
            IMAPFolder  folder        = publicFolders.Add("Share1");

            folder.Save();

            hMailServer.Message message = folder.Messages.Add();
            message.Subject = "Test";
            message.Save();

            // Move the message file to another folder.
            string publicFolderPath = Path.Combine(_application.Settings.Directories.DataDirectory, "#Public");
            string fileName         = Path.Combine(publicFolderPath, "randomMail.eml");

            File.Move(message.Filename, fileName);

            // Update the database with the 'invalid' path.
            string sql = string.Format("update hm_messages set messagefilename = '{0}' where messageid = {1}",
                                       TestSetup.Escape(fileName), message.ID);

            SingletonProvider <TestSetup> .Instance.GetApp().Database.ExecuteSQL(sql);

            // Now try to insert the message.
            CustomAssert.IsTrue(_application.Utilities.ImportMessageFromFile(fileName, 0));

            _application.Reinitialize();

            string newMessgaeFilename = _settings.PublicFolders[0].Messages[0].Filename;

            CustomAssert.AreNotEqual(fileName, newMessgaeFilename);
            CustomAssert.IsTrue(File.Exists(newMessgaeFilename));
        }
Example #12
0
        public static IMAPFolder AssertFolderExists(IMAPFolders folders, string folderName)
        {
            int timeout = 100;
             while (timeout > 0)
             {
            try
            {
               return folders.get_ItemByName(folderName);
            }
            catch (Exception)
            {
            }

            timeout--;
            Thread.Sleep(100);
             }

             string error = "Folder could not be found " + folderName;
             CustomAssert.Fail(error);
             return null;
        }