public void RemoveMailGroup(int id)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (id < 0)
            {
                throw new ArgumentException(@"Invalid mailgroup id.", "id");
            }

            using (var daoFactory = new DaoFactory())
            {
                var serverGroupDao = daoFactory.CreateServerGroupDao(Tenant);

                var group = serverGroupDao.Get(id);

                if (group == null)
                {
                    throw new Exception("Group not found");
                }

                var serverAddressDao = daoFactory.CreateServerAddressDao(Tenant);

                var serverDao = daoFactory.CreateServerDao();
                var server    = serverDao.Get(Tenant);

                var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString);

                using (var tx = daoFactory.DbManager.BeginTransaction(IsolationLevel.ReadUncommitted))
                {
                    serverGroupDao.Delete(id);

                    serverAddressDao.DeleteAddressesFromMailGroup(id);

                    serverAddressDao.Delete(group.AddressId);

                    engine.RemoveAlias(group.Address);

                    tx.Commit();
                }
            }

            CacheEngine.ClearAll();
        }
Ejemplo n.º 2
0
        public void RemoveMailbox(MailBoxData mailBox)
        {
            var engine = new EngineFactory(mailBox.TenantId);

            using (var daoFactory = new DaoFactory())
            {
                var serverAddressDao = daoFactory.CreateServerAddressDao(mailBox.TenantId);

                var serverMailboxAddresses = serverAddressDao.GetList(mailBox.MailBoxId);

                var serverMailboxAddress = serverMailboxAddresses.FirstOrDefault(a => !a.IsAlias && !a.IsMailGroup);

                if (serverMailboxAddress == null)
                {
                    throw new InvalidDataException("Mailbox address not found");
                }

                var serverDomainDao = daoFactory.CreateServerDomainDao(mailBox.TenantId);
                var serverDomain    = serverDomainDao.GetDomain(serverMailboxAddress.DomainId);

                if (serverDomain == null)
                {
                    throw new InvalidDataException("Domain not found");
                }

                var serverGroupDao = daoFactory.CreateServerGroupDao(mailBox.TenantId);

                var serverGroups = serverGroupDao.GetList();

                var serverDao = daoFactory.CreateServerDao();
                var server    = serverDao.Get(mailBox.TenantId);

                var serverEngine = new Server.Core.ServerEngine(server.Id, server.ConnectionString);

                var utcNow = DateTime.UtcNow;

                using (var tx = daoFactory.DbManager.BeginTransaction(IsolationLevel.ReadUncommitted))
                {
                    foreach (var serverGroup in serverGroups)
                    {
                        var addresses = serverAddressDao.GetGroupAddresses(serverGroup.Id);

                        var index = addresses.FindIndex(a => a.Id == serverMailboxAddress.Id);

                        if (index < 0)
                        {
                            continue;
                        }

                        addresses.RemoveAt(index);

                        if (addresses.Count == 0)
                        {
                            serverGroupDao.Delete(serverGroup.Id);

                            serverAddressDao.DeleteAddressesFromMailGroup(serverGroup.Id);

                            serverEngine.RemoveAlias(serverGroup.Address);
                        }
                        else
                        {
                            serverAddressDao.DeleteAddressFromMailGroup(serverGroup.Id, serverMailboxAddress.Id);

                            var goTo = string.Join(",",
                                                   addresses.Select(m => string.Format("{0}@{1}", m.AddressName, serverDomain.Name)));

                            var serverAddress = new Alias
                            {
                                Name     = "",
                                Address  = serverGroup.Address,
                                GoTo     = goTo,
                                Domain   = serverDomain.Name,
                                IsActive = true,
                                IsGroup  = true,
                                Modified = utcNow,
                                Created  = serverGroup.DateCreated
                            };

                            serverEngine.SaveAlias(serverAddress);
                        }
                    }

                    serverAddressDao.Delete(serverMailboxAddresses.Select(a => a.Id).ToList());

                    foreach (var mailboxAddress in serverMailboxAddresses)
                    {
                        serverEngine.RemoveAlias(string.Format("{0}@{1}", mailboxAddress.AddressName, serverDomain.Name));
                    }

                    engine.MailboxEngine.RemoveMailBox(daoFactory, mailBox, false);

                    serverEngine.RemoveMailbox(string.Format("{0}@{1}", serverMailboxAddress.AddressName,
                                                             serverDomain.Name));

                    tx.Commit();
                }
            }
        }
Ejemplo n.º 3
0
        public void RemoveAlias(int mailboxId, int addressId)
        {
            if (!IsAdmin)
            {
                throw new SecurityException("Need admin privileges.");
            }

            if (mailboxId < 0)
            {
                throw new ArgumentException(@"Invalid address id.", "mailboxId");
            }

            using (var daoFactory = new DaoFactory())
            {
                var mailboxDao = daoFactory.CreateMailboxDao();

                var mailbox = mailboxDao.GetMailBox(new ConcreteTenantServerMailboxExp(mailboxId, Tenant, false));

                if (mailbox == null)
                {
                    throw new ArgumentException("Mailbox not exists");
                }

                if (!mailbox.IsTeamlabMailbox)
                {
                    throw new ArgumentException("Invalid mailbox type");
                }

                var serverAddressDao = daoFactory.CreateServerAddressDao(Tenant);

                var alias = serverAddressDao.Get(addressId);

                if (!alias.IsAlias)
                {
                    throw new ArgumentException("Address is not alias");
                }

                var serverDomainDao = daoFactory.CreateServerDomainDao(Tenant);
                var serverDomain    = serverDomainDao.GetDomain(alias.DomainId);

                if (serverDomain == null)
                {
                    throw new ArgumentException("Domain not exists");
                }

                var aliasEmail = string.Format("{0}@{1}", alias.AddressName, serverDomain.Name);

                var serverDao = daoFactory.CreateServerDao();
                var server    = serverDao.Get(Tenant);

                var engine = new Server.Core.ServerEngine(server.Id, server.ConnectionString);

                using (var tx = daoFactory.DbManager.BeginTransaction(IsolationLevel.ReadUncommitted))
                {
                    serverAddressDao.Delete(addressId);
                    engine.RemoveAlias(aliasEmail);

                    tx.Commit();
                }

                CacheEngine.Clear(mailbox.User);
            }
        }