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); }
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); }
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); }
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); }
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(); } }
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(); } }
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); }