Пример #1
0
        public override ICollection <IMailbox> GetMailboxes(IMailServerFactory factory)
        {
            if (factory == null)
            {
                throw new ArgumentNullException("factory");
            }

            var mailboxList = new List <IMailbox>();

            using (var dbContext = TeamlabMailboxDal.CreateMailDbContext())
            {
                var mailboxDtoList = TeamlabMailboxDal.GetMailboxes(dbContext.DbManager);

                var mailboxBaseList = _GetMailboxes(mailboxDtoList.ConvertAll(d => d.mailbox.address));

                mailboxList.AddRange(from serverMailbox in mailboxBaseList
                                     let mailboxDto = mailboxDtoList.Find(d => d.mailbox.address == serverMailbox.Address.ToString())
                                                      let domain = factory.CreateWebDomain(mailboxDto.mailbox_address.domain.id, mailboxDto.mailbox_address.domain.tenant, mailboxDto.mailbox_address.domain.name, mailboxDto.mailbox_address.domain.is_virified, this)
                                                                   let mailboxAddress = factory.CreateMailAddress(mailboxDto.mailbox_address.id, mailboxDto.mailbox_address.tenant, mailboxDto.mailbox_address.name, domain)
                                                                                        let aliasesDtoList = TeamlabMailAddressDal.GetMailboxAliases(mailboxDto.mailbox.id, dbContext.DbManager)
                                                                                                             let aliases = aliasesDtoList.Select(a => factory.CreateMailAddress(a.id, a.tenant, a.name, domain)).ToList()
                                                                                                                           let teamlabAccount = CoreContext.Authentication.GetAccountByID(new Guid(mailboxDto.mailbox.user))
                                                                                                                                                let account = factory.CreateMailAccount(teamlabAccount, serverMailbox.Account.Login)
                                                                                                                                                              select factory.CreateMailbox(mailboxDto.mailbox.id, mailboxDto.mailbox.tenant, mailboxAddress,
                                                                                                                                                                                           mailboxDto.mailbox.name, account, aliases.ToList(), this));
            }

            return(mailboxList);
        }
Пример #2
0
        public IMailAddress AddAlias(string aliasName, IWebDomain domain, IMailServerFactory factory)
        {
            if (Aliases.Any(a => a.LocalPart == aliasName && a.Domain.Id == domain.Id))
            {
                throw new DuplicateNameException("You want to add already existed alias");
            }

            var addressBase = new MailAddressBase(aliasName, new WebDomainBase(domain))
            {
                DateCreated = DateTime.UtcNow
            };

            MailAddressDto aliasDto;

            using (var dbContextWithTran = TeamlabMailboxDal.CreateMailDbContext(true))
            {
                if (TeamlabAddressDal.IsAddressAlreadyRegistered(aliasName, domain.Name, dbContextWithTran.DbManager))
                {
                    throw new DuplicateNameException("You want to add already existed alias");
                }

                aliasDto = TeamlabAddressDal.AddMailboxAlias(Id, aliasName, addressBase.DateCreated,
                                                             domain.Id, domain.Name, domain.IsVerified, dbContextWithTran.DbManager);
                _AddAlias(addressBase);

                dbContextWithTran.CommitTransaction();
            }

            var alias = factory.CreateMailAddress(aliasDto.id, aliasDto.tenant, addressBase.LocalPart, domain);

            Aliases.Add(alias);

            return(alias);
        }
Пример #3
0
        public override IMailbox GetMailbox(int mailboxId, IMailServerFactory factory)
        {
            if (mailboxId < 0)
            {
                throw new ArgumentException("mailbox_id has negative value");
            }

            if (factory == null)
            {
                throw new ArgumentNullException("factory");
            }

            MailboxWithAddressDto mailboxDto;
            List <MailAddressDto> aliasesDtoList;

            using (var dbContext = TeamlabMailboxDal.CreateMailDbContext())
            {
                mailboxDto     = TeamlabMailboxDal.GetMailbox(mailboxId, dbContext.DbManager);
                aliasesDtoList = TeamlabMailAddressDal.GetMailboxAliases(mailboxId, dbContext.DbManager);
            }

            if (mailboxDto == null)
            {
                return(null);
            }

            var mailboxBase = _GetMailbox(mailboxDto.mailbox_address.ToString());

            if (mailboxBase == null)
            {
                throw new Exception("Mailbox is missing on server");
            }

            var mailboxDomain = factory.CreateWebDomain(mailboxDto.mailbox_address.domain.id, mailboxDto.mailbox_address.domain.tenant, mailboxDto.mailbox_address.domain.name, mailboxDto.mailbox_address.domain.is_virified, this);

            var mailboxAddress = factory.CreateMailAddress(mailboxDto.mailbox_address.id, mailboxDto.mailbox_address.tenant, mailboxDto.mailbox_address.name, mailboxDomain);

            var account = CoreContext.Authentication.GetAccountByID(new Guid(mailboxDto.mailbox.user));

            var mailboxAccount = factory.CreateMailAccount(account, mailboxBase.Account.Login);

            var mailboxAliases =
                aliasesDtoList
                .Select(alias =>
                        factory.CreateMailAddress(alias.id, alias.tenant, alias.name, mailboxDomain))
                .ToList();

            var mailbox = factory.CreateMailbox(mailboxDto.mailbox.id, mailboxDto.mailbox.tenant,
                                                mailboxAddress, mailboxDto.mailbox.name, mailboxAccount, mailboxAliases.ToList(), this);

            return(mailbox);
        }
Пример #4
0
        public override IMailbox CreateMailbox(string name, string localpart, string password, IWebDomain domain, IMailAccount account, IMailServerFactory factory)
        {
            if (string.IsNullOrEmpty(localpart))
            {
                throw new ArgumentNullException("localpart");
            }

            if (domain == null)
            {
                throw new ArgumentNullException("domain");
            }

            if (account == null)
            {
                throw new ArgumentNullException("account");
            }

            if (localpart.Length + domain.Name.Length > 318) // 318 because of @ sign
            {
                throw new ArgumentException("Address of mailbox exceed limitation of 319 characters.", "localpart");
            }

            var mailboxBase = new MailboxBase(new MailAccountBase(account.Login),
                                              new MailAddressBase(localpart, new WebDomainBase(domain)),
                                              name,
                                              new List <MailAddressBase>())
            {
                Address = { DateCreated = DateTime.UtcNow }
            };

            MailboxWithAddressDto mailboxWithAddressDto;

            using (var dbContextWithTran = TeamlabMailboxDal.CreateMailDbContext(true))
            {
                mailboxWithAddressDto = TeamlabMailboxDal.CreateMailbox(account.TeamlabAccount, mailboxBase.Name,
                                                                        mailboxBase.Address.ToString(), password,
                                                                        mailboxBase.Address.LocalPart,
                                                                        mailboxBase.Address.DateCreated,
                                                                        domain.Id, domain.Name, domain.IsVerified, dbContextWithTran.DbManager);
                _CreateMailbox(account.Login, password, localpart, domain.Name, name);

                dbContextWithTran.CommitTransaction();
            }

            var mailboxAddress = factory.CreateMailAddress(mailboxWithAddressDto.mailbox_address.id, mailboxWithAddressDto.mailbox_address.tenant, mailboxWithAddressDto.mailbox_address.name, domain);

            var mailbox = factory.CreateMailbox(mailboxWithAddressDto.mailbox.id, mailboxWithAddressDto.mailbox.tenant,
                                                mailboxAddress, mailboxWithAddressDto.mailbox.name, account, new List <IMailAddress>(), this);

            return(mailbox);
        }
Пример #5
0
        public override void DeleteMailbox(IMailbox mailbox)
        {
            if (mailbox == null)
            {
                throw new ArgumentNullException("mailbox", "ServerModel::DeleteMailbox");
            }

            using (var dbContextWithTran = TeamlabMailboxDal.CreateMailDbContext(true))
            {
                TeamlabMailboxDal.DeleteMailbox(mailbox.Id, dbContextWithTran.DbManager);
                _DeleteMailbox(new MailboxBase(mailbox));
                dbContextWithTran.CommitTransaction();
            }
        }
Пример #6
0
        public override void UpdateMailbox(IMailbox mailbox, string name, IMailServerFactory factory)
        {
            var newMailbox = factory.CreateMailbox(mailbox.Id, mailbox.Tenant, mailbox.Address, name,
                                                   mailbox.Account, mailbox.Aliases.ToList(), this);

            using (var dbContextWithTran = TeamlabMailboxDal.CreateMailDbContext(true))
            {
                TeamlabMailboxDal.UpdateMailbox(newMailbox.Account.TeamlabAccount, newMailbox.Id, newMailbox.Name, dbContextWithTran.DbManager);

                _UpdateMailbox(new MailboxBase(newMailbox));

                dbContextWithTran.CommitTransaction();
            }
        }
Пример #7
0
        public void RemoveAlias(int aliasId)
        {
            if (Aliases.Count <= 0)
            {
                return;
            }

            var aliasToRemove = Aliases.FirstOrDefault(a => a.Id == aliasId);

            if (aliasToRemove == null)
            {
                return;
            }

            using (var dbContextWithTran = TeamlabMailboxDal.CreateMailDbContext(true))
            {
                TeamlabAddressDal.RemoveMailboxAlias(aliasToRemove.Id, dbContextWithTran.DbManager);
                _RemoveAlias(new MailAddressBase(aliasToRemove));
                dbContextWithTran.CommitTransaction();
            }

            Aliases.Remove(aliasToRemove);
        }