Beispiel #1
0
        public static void AddAudit(string companyCode, string username, ActionID actionID, string variable1, string variable2 = null)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                Audit newAudit = new Audit();
                newAudit.CompanyCode = companyCode;
                newAudit.Username    = username;
                newAudit.Date        = DateTime.Now;
                newAudit.ActionID    = (int)actionID;
                newAudit.Variable1   = variable1;
                newAudit.Variable2   = variable2;

                database.Audits.Add(newAudit);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                logger.Info("Failed to add audit to database: " + actionID.ToString(), ex);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #2
0
        public void UpdateCompanyPlan(string companyCode, int planID)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundCompany = (from c in database.Companies
                                    where !c.IsReseller
                                    where c.CompanyCode == companyCode
                                    select c).FirstOrDefault();

                if (foundCompany != null)
                {
                    foundCompany.OrgPlanID = planID;
                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error changing company " + companyCode + "'s plan ID to " + planID.ToString(), ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #3
0
        private void Delete_CompanyFromDatabase(string companyCode)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var foundCompany = (from c in database.Companies
                                    where !c.IsReseller
                                    where c.CompanyCode == companyCode
                                    select c).FirstOrDefault();

                if (foundCompany != null)
                {
                    database.Companies.Remove(foundCompany);
                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Failed to roll back action... Deleting company from database " + companyCode, ex);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #4
0
        private void AuditLogin(string username, string ipAddress, bool isValidLogin)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                // Audit login
                AuditLogin audit = new AuditLogin();
                audit.IPAddress      = ipAddress;
                audit.Username       = username;
                audit.LoginStatus    = isValidLogin;
                audit.AuditTimeStamp = DateTime.Now;

                database.AuditLogins.Add(audit);
                database.SaveChanges();

                this.logger.Debug(username + "attempted to login to CloudPanel. Is valid login? " + isValidLogin.ToString());
            }
            catch (Exception ex)
            {
                this.logger.Error("Error adding entry to the login audit table.", ex);

                throw;
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #5
0
        public void Create(CompanyPlanObject plan)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                Plans_Organization newPlan = new Plans_Organization();
                newPlan.OrgPlanName                  = plan.CompanyPlanName;
                newPlan.MaxUsers                     = plan.MaxUser;
                newPlan.MaxDomains                   = plan.MaxDomains;
                newPlan.MaxExchangeMailboxes         = plan.MaxExchangeMailboxes;
                newPlan.MaxExchangeContacts          = plan.MaxExchangeContacts;
                newPlan.MaxExchangeDistLists         = plan.MaxExchangeDistributionGroups;
                newPlan.MaxExchangeResourceMailboxes = plan.MaxExchangeResourceMailboxes;
                newPlan.MaxExchangeMailPublicFolders = plan.MaxExchangeMailPublicFolders;

                database.Plans_Organization.Add(newPlan);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error saving new company plan " + plan.CompanyPlanName + " to the database.", ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
        public bool UpdatePlan(MailboxPlanObject obj)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var plan = (from p in database.Plans_ExchangeMailbox
                            where p.MailboxPlanID == obj.MailboxPlanID
                            select p).First();

                plan.MailboxPlanName     = obj.MailboxPlanName;
                plan.CompanyCode         = obj.CompanyCode;
                plan.MailboxPlanDesc     = obj.MailboxPlanDescription;
                plan.MaxRecipients       = obj.MaxRecipients;
                plan.MaxKeepDeletedItems = obj.MaxKeepDeletedItemsInDays;
                plan.MailboxSizeMB       = obj.MailboxSizeInMB;
                plan.MaxMailboxSizeMB    = obj.MaxMailboxSizeInMB;
                plan.MaxSendKB           = obj.MaxSendInKB;
                plan.MaxReceiveKB        = obj.MaxReceiveInKB;
                plan.EnablePOP3          = obj.EnablePOP3;
                plan.EnableIMAP          = obj.EnableIMAP;
                plan.EnableOWA           = obj.EnableOWA;
                plan.EnableMAPI          = obj.EnableMAPI;
                plan.EnableAS            = obj.EnableAS;
                plan.EnableECP           = obj.EnableECP;
                plan.Cost              = obj.Cost;
                plan.Price             = obj.Price;
                plan.AdditionalGBPrice = obj.AdditionalGBPrice;

                database.SaveChanges();

                return(true);
            }
            catch (Exception ex)
            {
                this.logger.Error("Error saving mailbox plan id " + obj.MailboxPlanID, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);

                return(false);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #7
0
        public void NewContact(string companyCode, MailContactObject mailContact)
        {
            ExchangePowershell powershell = null;
            CPDatabase         database   = null;

            try
            {
                // Get company distinguished name
                database = new CPDatabase();
                var dn = (from c in database.Companies
                          where !c.IsReseller
                          where c.CompanyCode == companyCode
                          select c.DistinguishedName).First();

                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                string distinguishedName = powershell.NewContact(mailContact.DisplayName, mailContact.Email, mailContact.Hidden, companyCode, "OU=Exchange," + dn);

                // Add contact to database
                Contact newContact = new Contact();
                newContact.DisplayName       = mailContact.DisplayName;
                newContact.CompanyCode       = companyCode;
                newContact.DistinguishedName = distinguishedName;
                newContact.Email             = mailContact.Email;
                newContact.Hidden            = mailContact.Hidden;
                database.Contacts.Add(newContact);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }

                if (powershell != null)
                {
                    powershell.Dispose();
                }
            }
        }
        public bool DeletePlan(int planID)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var usingPlan = (from u in database.Users
                                 where u.MailboxPlan == planID
                                 select u).Count();

                if (usingPlan > 0)
                {
                    ThrowEvent(AlertID.FAILED, "The plan is in use " + planID.ToString());
                    return(false);
                }
                else
                {
                    var plan = (from p in database.Plans_ExchangeMailbox
                                where p.MailboxPlanID == planID
                                select p).First();

                    database.Plans_ExchangeMailbox.Remove(plan);
                    database.SaveChanges();

                    return(true);
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error deleting mailbox plan id " + planID, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);

                return(false);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #9
0
        public void Delete(int planID)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                // Find out if it is in use
                int?inUseNumber = NumberOfTimesPlanInUse(planID);
                if (inUseNumber != null && inUseNumber > 0)
                {
                    ThrowEvent(Base.Enumerations.AlertID.WARNING, inUseNumber == null ? "-1" : inUseNumber.ToString());
                }
                else
                {
                    var deletePlan = (from p in database.Plans_Organization
                                      where p.OrgPlanID == planID
                                      select p).FirstOrDefault();

                    if (deletePlan != null)
                    {
                        database.Plans_Organization.Remove(deletePlan);
                        database.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Error deleting company plan " + planID.ToString(), ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
        /// <summary>
        /// Updates a reseller
        /// </summary>
        /// <param name="reseller"></param>
        public void UpdateReseller(ResellerObject reseller)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var dbObj = (from r in database.Companies
                             where r.CompanyCode == reseller.CompanyCode
                             where r.IsReseller
                             select r).First();

                dbObj.CompanyName = reseller.CompanyName;
                dbObj.AdminName   = reseller.AdminName;
                dbObj.AdminEmail  = reseller.AdminEmail;
                dbObj.PhoneNumber = reseller.Telephone;
                dbObj.Street      = reseller.Street;
                dbObj.City        = reseller.City;
                dbObj.State       = reseller.State;
                dbObj.ZipCode     = reseller.ZipCode;
                dbObj.Country     = reseller.Country;

                database.SaveChanges();
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #11
0
        public void Update(CompanyPlanObject plan)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var findPlan = (from p in database.Plans_Organization
                                where p.OrgPlanID == plan.CompanyPlanID
                                select p).FirstOrDefault();

                findPlan.OrgPlanName                  = plan.CompanyPlanName;
                findPlan.MaxUsers                     = plan.MaxUser;
                findPlan.MaxDomains                   = plan.MaxDomains;
                findPlan.MaxExchangeMailboxes         = plan.MaxExchangeMailboxes;
                findPlan.MaxExchangeContacts          = plan.MaxExchangeContacts;
                findPlan.MaxExchangeDistLists         = plan.MaxExchangeDistributionGroups;
                findPlan.MaxExchangeMailboxes         = plan.MaxExchangeMailboxes;
                findPlan.MaxExchangeMailPublicFolders = plan.MaxExchangeMailPublicFolders;

                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error updating company plan " + plan.CompanyPlanName + " with id " + plan.CompanyPlanID, ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #12
0
        public void DeleteContact(string distinguishedName, string companyCode)
        {
            ExchangePowershell powershell = null;
            CPDatabase         database   = null;

            try
            {
                // Get company distinguished name
                database = new CPDatabase();
                var contact = (from c in database.Contacts
                               where c.DistinguishedName == distinguishedName
                               select c).First();

                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                powershell.DeleteContact(distinguishedName);

                database.Contacts.Remove(contact);
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }

                if (powershell != null)
                {
                    powershell.Dispose();
                }
            }
        }
        /// <summary>
        /// Creates a new reseller
        /// </summary>
        /// <param name="reseller"></param>
        /// <param name="baseOrganizationalUnit"></param>
        public void NewReseller(ResellerObject reseller, string baseOrganizationalUnit)
        {
            CPDatabase database = null;

            // Rollback class in case something goes wrong we can undo changes
            CloudPanelTransaction events = new CloudPanelTransaction();

            try
            {
                database = new CPDatabase();

                // Generate the company code
                string companyCode = ResellerObject.GenerateCompanyCode(reseller.CompanyName);

                // Loop and make sure one does exist or find one that does
                int count = 0;
                for (int i = 0; i < 1000; i++)
                {
                    if (Validation.DoesCompanyCodeExist(companyCode))
                    {
                        this.logger.Info("Tried to create a new reseller with company code " + companyCode + " but it already existed... trying another code");

                        companyCode = companyCode + count.ToString();
                        count++;
                    }
                    else
                    {
                        reseller.CompanyCode = companyCode; // Assign company code to object
                        break;
                    }
                }

                // Create the reseller in Active Directory
                ADOrganizationalUnit adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                string distinguishedName   = adOrg.CreateReseller(StaticSettings.HostingOU, reseller);
                events.NewOrganizationalUnitEvent(distinguishedName);

                // Create the security group
                ADGroup adGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                adGroup.Create(distinguishedName, "GPOAccess@" + companyCode, "", true, false);
                events.NewSecurityGroup("GPOAccess@" + companyCode);

                // Add the new group to the GPOAccess@Hosting group for group policy permissions
                adGroup.AddMember("GPOAccess@Hosting", "GPOAccess@" + companyCode, "name");

                // Add access rights
                adOrg.AddAccessRights(distinguishedName, "GPOAccess@" + companyCode);

                // Insert into database
                Company company = new Company();
                company.IsReseller        = true;
                company.CompanyName       = reseller.CompanyName;
                company.CompanyCode       = companyCode;
                company.Street            = reseller.Street;
                company.City              = reseller.City;
                company.State             = reseller.State;
                company.ZipCode           = reseller.ZipCode;
                company.Country           = reseller.Country;
                company.PhoneNumber       = reseller.Telephone;
                company.AdminName         = reseller.AdminName;
                company.AdminEmail        = reseller.AdminEmail;
                company.Created           = DateTime.Now;
                company.DistinguishedName = distinguishedName;

                database.Companies.Add(company);
                database.SaveChanges();

                // Notify success
                ThrowEvent(AlertID.SUCCESS, "Successfully created new reseller " + reseller.CompanyName);
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);

                // Rollback on error
                events.RollBack();
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
        public void DeleteDomain(string domainName, string companyCode)
        {
            CPDatabase           database   = null;
            ADOrganizationalUnit adOrg      = null;
            ExchangePowershell   powershell = null;

            try
            {
                database = new CPDatabase();

                // Make sure no users groups or anything is using this domain
                var usersUsing = (from u in database.Users
                                  where (u.UserPrincipalName.EndsWith("@" + domainName) || u.Email.EndsWith("@" + domainName))
                                  select u).Count();

                if (usersUsing > 0)
                {
                    ThrowEvent(AlertID.FAILED, "The domain is in use " + domainName);
                }
                else
                {
                    // Make sure no groups are using this domain
                    var groupsUsing = (from g in database.DistributionGroups
                                       where g.Email.EndsWith("@" + domainName)
                                       select g).Count();

                    if (groupsUsing > 0)
                    {
                        ThrowEvent(AlertID.FAILED, "The domain is in use " + domainName);
                    }
                    else
                    {
                        // Since users & groups are not using this domain we can continue and remove it

                        // Get company distinguished name
                        var dn = (from d in database.Companies
                                  where !d.IsReseller
                                  where d.CompanyCode == companyCode
                                  select d.DistinguishedName).First();

                        // Delete domain from Active Directory
                        adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                        adOrg.RemoveDomain(dn, domainName);

                        // Get domain from SQL
                        var domain = (from d in database.Domains
                                      where d.Domain1 == domainName
                                      where d.CompanyCode == companyCode
                                      select d).First();

                        // Check if it was enabled for Exchange
                        if (domain.IsAcceptedDomain)
                        {
                            powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                            powershell.DeleteDomain(domain.Domain1);
                        }

                        database.Domains.Remove(domain);
                        database.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Failed to remove domain " + domainName + " from company " + companyCode, ex);
                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (powershell != null)
                {
                    powershell.Dispose();
                }

                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
        public void  UpdateDomain(string domainName, string companyCode, bool isDefault, bool isExchangeEnabled, DomainType domainType)
        {
            CPDatabase         database   = null;
            ExchangePowershell powershell = null;

            try
            {
                // Remove any whitespace characters at the beginning and end
                domainName = domainName.Trim();

                database = new CPDatabase();
                var defaultDomains = from d in database.Domains
                                     where d.CompanyCode == companyCode
                                     select d;

                foreach (Domain d in defaultDomains)
                {
                    if (d.Domain1.Equals(domainName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        // This is the domain we are updating
                        d.IsDefault  = isDefault;
                        d.DomainType = (int)domainType;

                        // Check if it wasn't an Exchange domain and we are making it an Exchange domain
                        if (!d.IsAcceptedDomain && isExchangeEnabled)
                        {
                            // Create accepted domain
                            powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                            powershell.NewDomain(domainName, domainType);
                            d.IsAcceptedDomain = true;
                        }
                        else if (d.IsAcceptedDomain && !isExchangeEnabled)
                        {
                            // Delete accepted domain
                            powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                            powershell.DeleteDomain(domainName);
                            d.IsAcceptedDomain = false;
                        }
                        else if (d.IsAcceptedDomain && isExchangeEnabled)
                        {
                            // Update accepted domain
                            powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                            powershell.UpdateDomain(domainName, domainType);
                            d.IsAcceptedDomain = true;
                        }
                    }
                    else
                    {
                        if (isDefault)
                        {
                            d.IsDefault = false;
                        }
                    }
                }

                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Failed to update domain " + domainName + " for company " + companyCode, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
        public void AddDomain(string domainName, string companyCode, bool isDefault, bool isExchangeEnabled, DomainType domainType)
        {
            CPDatabase           database   = null;
            ADOrganizationalUnit adOrg      = null;
            ExchangePowershell   powershell = null;

            CloudPanelTransaction transaction = new CloudPanelTransaction();

            try
            {
                // Get company distinguished name
                database = new CPDatabase();
                var dn = (from d in database.Companies
                          where !d.IsReseller
                          where d.CompanyCode == companyCode
                          select d.DistinguishedName).First();

                // Remove any whitespace characters at the beginning and end
                domainName = domainName.Trim();

                // Check if domain is already in database
                bool alreadyExist = IsDomainInUse(domainName);
                if (alreadyExist)
                {
                    ThrowEvent(Base.Enumerations.AlertID.FAILED, "Domain already exists");
                }
                else
                {
                    // Add domain to Active Directory
                    adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    adOrg.AddDomain(dn, domainName);
                    transaction.NewDomain(dn, domainName);

                    // If it is default we need to remove default from all others
                    if (isDefault)
                    {
                        var defaultDomains = from d in database.Domains
                                             where d.CompanyCode == companyCode
                                             select d;

                        foreach (Domain d in defaultDomains)
                        {
                            if (d.IsDefault)
                            {
                                d.IsDefault = false;
                            }
                        }
                    }

                    //
                    // Check if it is Exchange enabled
                    //
                    if (isExchangeEnabled)
                    {
                        powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);
                        powershell.NewDomain(domainName, domainType);
                        transaction.NewExchangeDomain(domainName);
                    }

                    // Add new domain
                    Domain newDomain = new Domain();
                    newDomain.IsDefault        = isDefault;
                    newDomain.CompanyCode      = companyCode;
                    newDomain.Domain1          = domainName;
                    newDomain.IsSubDomain      = false;
                    newDomain.IsAcceptedDomain = isExchangeEnabled;
                    newDomain.IsLyncDomain     = false;
                    newDomain.DomainType       = (int)domainType;
                    database.Domains.Add(newDomain);

                    // Save all changes
                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                this.logger.Error("Failed to add domain " + domainName + " to company " + companyCode, ex);

                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);

                // Rollback
                transaction.RollBack();
            }
            finally
            {
                if (powershell != null)
                {
                    powershell.Dispose();
                }

                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #17
0
        /// <summary>
        /// Commits the current static settings to the database
        /// </summary>
        /// <param name="securityKey"></param>
        public static void CommitSettings(string securityKey)
        {
            CPDatabase database = null;

            try
            {
                database = new CPDatabase();

                var newSettings = (from s in database.Settings
                                   select s).FirstOrDefault();

                if (newSettings == null)
                {
                    // No settings found.. insert new
                    newSettings = new Setting();

                    #region General

                    newSettings.CompanysName     = HostersName;
                    newSettings.ResellersEnabled = ResellersEnabled;

                    #endregion

                    #region Active Directory

                    newSettings.BaseOU    = HostingOU;
                    newSettings.UsersOU   = UsersOU;
                    newSettings.PrimaryDC = PrimaryDC;
                    newSettings.Username  = Username;
                    newSettings.Password  = EncryptedPassword;

                    #endregion

                    #region Security Groups

                    newSettings.SuperAdmins   = SuperAdmins;
                    newSettings.BillingAdmins = BillingAdmins;

                    #endregion

                    #region Billing

                    #endregion

                    #region Exchange

                    newSettings.ExchangeConnectionType = ExchangeConnectionType;
                    newSettings.ExchangeVersion        = ExchangeVersion;
                    newSettings.ExchangeFqdn           = ExchangeServer;
                    newSettings.ExchangePFServer       = ExchangePublicFolderServer;
                    newSettings.ExchDatabases          = ExchangeDatabases;
                    newSettings.PublicFolderEnabled    = PublicFoldersEnabled;
                    newSettings.ExchangeSSLEnabled     = ExchangeSSLEnabled;

                    #endregion

                    #region Modules

                    newSettings.CitrixEnabled = CitrixEnabled;
                    newSettings.LyncEnabled   = LyncEnabled;

                    #endregion

                    #region Other

                    newSettings.LockdownEnabled         = LockdownEnabled;
                    newSettings.AllowCustomNameAttrib   = AllowCustomNameAttribute;
                    newSettings.IPBlockingEnabled       = IPBlockingEnabled;
                    newSettings.IPBlockingFailedCount   = IPBlockingFailedCount;
                    newSettings.IPBlockingLockedMinutes = IPBlockingLockedInMinutes;
                    newSettings.CurrencySymbol          = CurrencySymbol;

                    #endregion

                    // Insert
                    database.Settings.Add(newSettings);
                    database.SaveChanges();
                }
                else
                {
                    #region General

                    newSettings.CompanysName     = HostersName;
                    newSettings.ResellersEnabled = ResellersEnabled;

                    #endregion

                    #region Active Directory

                    newSettings.BaseOU    = HostingOU;
                    newSettings.UsersOU   = UsersOU;
                    newSettings.PrimaryDC = PrimaryDC;
                    newSettings.Username  = Username;
                    newSettings.Password  = EncryptedPassword;

                    #endregion

                    #region Security Groups

                    newSettings.SuperAdmins   = SuperAdmins;
                    newSettings.BillingAdmins = BillingAdmins;

                    #endregion

                    #region Billing

                    #endregion

                    #region Exchange

                    newSettings.ExchangeConnectionType = ExchangeConnectionType;
                    newSettings.ExchangeVersion        = ExchangeVersion;
                    newSettings.ExchangeFqdn           = ExchangeServer;
                    newSettings.ExchangePFServer       = ExchangePublicFolderServer;
                    newSettings.ExchDatabases          = ExchangeDatabases;
                    newSettings.PublicFolderEnabled    = PublicFoldersEnabled;
                    newSettings.ExchangeSSLEnabled     = ExchangeSSLEnabled;

                    #endregion

                    #region Modules

                    newSettings.CitrixEnabled = CitrixEnabled;
                    newSettings.LyncEnabled   = LyncEnabled;

                    #endregion

                    #region Other

                    newSettings.LockdownEnabled         = LockdownEnabled;
                    newSettings.AllowCustomNameAttrib   = AllowCustomNameAttribute;
                    newSettings.IPBlockingEnabled       = IPBlockingEnabled;
                    newSettings.IPBlockingFailedCount   = IPBlockingFailedCount;
                    newSettings.IPBlockingLockedMinutes = IPBlockingLockedInMinutes;
                    newSettings.CurrencySymbol          = CurrencySymbol;

                    #endregion

                    // Save
                    database.SaveChanges();
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #18
0
        public void UpdateUser(UsersObject updateUser, bool isSuperOrResellerAdmin)
        {
            CPDatabase database  = null;
            ADGroup    ldapGroup = null;
            ADUser     ldapUser  = null;

            try
            {
                database = new CPDatabase();

                // Get the user from the database
                var foundUser = (from u in database.Users
                                 where u.UserPrincipalName == updateUser.UserPrincipalName
                                 select u).FirstOrDefault();

                if (foundUser == null)
                {
                    ThrowEvent(AlertID.FAILED, "Unknown user " + updateUser.UserPrincipalName);
                }
                else
                {
                    this.logger.Debug("Found user " + foundUser.UserPrincipalName + " in the database. Continuing...");

                    // Update the user values
                    foundUser.Firstname   = updateUser.Firstname;
                    foundUser.Middlename  = updateUser.Middlename;
                    foundUser.Lastname    = updateUser.Lastname;
                    foundUser.DisplayName = updateUser.DisplayName;
                    foundUser.Department  = updateUser.Department;

                    // Update user in Active Directory
                    ldapUser = new ADUser(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    ldapUser.UpdateUser(updateUser, StaticSettings.AllowCustomNameAttribute);

                    // Only update these values if super admin or reseller admin is modifying the user
                    if (isSuperOrResellerAdmin)
                    {
                        this.logger.Debug("Super admin or reseller is updating user so we can check comapny admin permissions and reseller permissions");

                        foundUser.IsCompanyAdmin  = updateUser.IsCompanyAdmin;
                        foundUser.IsResellerAdmin = updateUser.IsResellerAdmin;

                        // Get permissions from database
                        var userPermissions = (from p in database.UserPermissions
                                               where p.UserID == foundUser.ID
                                               select p).FirstOrDefault();


                        // If the user is no longer a company admin then remove permissions from the database
                        if (userPermissions != null && !updateUser.IsCompanyAdmin)
                        {
                            this.logger.Debug("User " + updateUser.UserPrincipalName + " is no longer a comapny admin. Need to remove rights from database and security group");

                            database.UserPermissions.Remove(userPermissions);

                            // Remove from Admins@ security group
                            ldapGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                            ldapGroup.RemoveMember("Admins@" + updateUser.CompanyCode, updateUser.UserPrincipalName, "upn");
                        }
                        else if (userPermissions != null && updateUser.IsCompanyAdmin)
                        {
                            this.logger.Debug("User " + updateUser.UserPrincipalName + " is a company admin. Need to update company admin rights in database.");

                            // If user permissions was found and the user is company admin then update the values
                            userPermissions.EnableExchange        = updateUser.EnableExchangePerm;
                            userPermissions.DisableExchange       = updateUser.DisableExchangePerm;
                            userPermissions.AddDomain             = updateUser.AddDomainPerm;
                            userPermissions.DeleteDomain          = updateUser.DeleteDomainPerm;
                            userPermissions.EnableAcceptedDomain  = updateUser.EnableAcceptedDomainPerm;
                            userPermissions.DisableAcceptedDomain = updateUser.DisableAcceptedDomainPerm;
                        }
                        else if (userPermissions == null && updateUser.IsCompanyAdmin)
                        {
                            this.logger.Debug("User " + updateUser.UserPrincipalName + " does not have any existing company admin rights. We need to add them to the database.");

                            // No existing permissions were found and we need to add to database
                            userPermissions                       = new UserPermission();
                            userPermissions.UserID                = foundUser.ID;
                            userPermissions.EnableExchange        = updateUser.EnableExchangePerm;
                            userPermissions.DisableExchange       = updateUser.DisableExchangePerm;
                            userPermissions.AddDomain             = updateUser.AddDomainPerm;
                            userPermissions.DeleteDomain          = updateUser.DeleteDomainPerm;
                            userPermissions.EnableAcceptedDomain  = updateUser.EnableAcceptedDomainPerm;
                            userPermissions.DisableAcceptedDomain = updateUser.DisableAcceptedDomainPerm;
                            database.UserPermissions.Add(userPermissions);

                            // Add to Admins@ security group
                            ldapGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                            ldapGroup.AddMember("Admins@" + updateUser.CompanyCode, updateUser.UserPrincipalName, "upn");
                        }
                    }
                    else
                    {
                        this.logger.Debug("User making changes to " + updateUser.UserPrincipalName + " is not a super admin or reseller admin. We cannot update company admin or reseller admin permissions unless the user making changes is a super or reseller admin.");
                    }

                    // Update database
                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                this.logger.Debug("Error updating user " + updateUser.UserPrincipalName, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (ldapUser != null)
                {
                    ldapUser.Dispose();
                }

                if (ldapGroup != null)
                {
                    ldapGroup.Dispose();
                }

                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #19
0
        public void CreateUser(UsersObject newUser)
        {
            CPDatabase database  = null;
            ADGroup    ldapGroup = null;
            ADUser     ldapUser  = null;

            CloudPanelTransaction newUserTransaction = new CloudPanelTransaction();

            try
            {
                // Insert into database
                database = new CPDatabase();

                // Make sure the user doesn't already exist
                var foundUser = (from u in database.Users
                                 where u.UserPrincipalName == newUser.UserPrincipalName
                                 select u).FirstOrDefault();

                if (foundUser != null)
                {
                    ThrowEvent(AlertID.FAILED, "User already exists " + newUser.UserPrincipalName);
                }
                else
                {
                    // Get the company's OU where we need to save the user
                    var companyDistinguishedName = (from c in database.Companies
                                                    where !c.IsReseller
                                                    where c.CompanyCode == newUser.CompanyCode
                                                    select c.DistinguishedName).First();

                    // Check if they are using a custom user's OU
                    if (!string.IsNullOrEmpty(StaticSettings.UsersOU))
                    {
                        companyDistinguishedName = string.Format("OU={0},{1}", StaticSettings.UsersOU, companyDistinguishedName);
                    }

                    ldapUser = new ADUser(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    UsersObject createdUser = ldapUser.NewUser(newUser, companyDistinguishedName, StaticSettings.AllowCustomNameAttribute);
                    newUserTransaction.NewUser(createdUser.UserPrincipalName);

                    // Add the users to the groups
                    ldapGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);
                    ldapGroup.AddMember("AllUsers@" + newUser.CompanyCode, createdUser.UserPrincipalName, "upn");

                    if (newUser.IsCompanyAdmin)
                    {
                        ldapGroup.AddMember("Admins@" + newUser.CompanyCode, createdUser.UserPrincipalName, "upn");
                    }

                    // Insert into database
                    User sqlUser = new User();
                    sqlUser.UserGuid          = createdUser.UserGuid;
                    sqlUser.CompanyCode       = createdUser.CompanyCode;
                    sqlUser.sAMAccountName    = createdUser.sAMAccountName;
                    sqlUser.UserPrincipalName = createdUser.UserPrincipalName;
                    sqlUser.DistinguishedName = createdUser.DistinguishedName;
                    sqlUser.DisplayName       = createdUser.DisplayName;
                    sqlUser.Firstname         = createdUser.Firstname;
                    sqlUser.Middlename        = createdUser.Middlename;
                    sqlUser.Lastname          = createdUser.Lastname;
                    sqlUser.Email             = string.Empty;
                    sqlUser.Department        = createdUser.Department;
                    sqlUser.IsResellerAdmin   = createdUser.IsResellerAdmin;
                    sqlUser.IsCompanyAdmin    = createdUser.IsCompanyAdmin;
                    sqlUser.MailboxPlan       = 0;
                    sqlUser.TSPlan            = 0;
                    sqlUser.LyncPlan          = 0;
                    sqlUser.Created           = DateTime.Now;
                    sqlUser.AdditionalMB      = 0;
                    sqlUser.ActiveSyncPlan    = 0;
                    database.Users.Add(sqlUser);

                    // Insert permissions into database
                    if (createdUser.IsCompanyAdmin)
                    {
                        UserPermission newPermissions = new UserPermission();
                        newPermissions.UserID                = sqlUser.ID;
                        newPermissions.EnableExchange        = createdUser.EnableExchangePerm;
                        newPermissions.DisableExchange       = createdUser.DisableExchangePerm;
                        newPermissions.AddDomain             = createdUser.AddDomainPerm;
                        newPermissions.DeleteDomain          = createdUser.DeleteDomainPerm;
                        newPermissions.EnableAcceptedDomain  = createdUser.EnableAcceptedDomainPerm;
                        newPermissions.DisableAcceptedDomain = createdUser.DisableAcceptedDomainPerm;
                        database.UserPermissions.Add(newPermissions);
                    }

                    database.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);

                // Rollback on error
                newUserTransaction.RollBack();
            }
            finally
            {
                if (ldapUser != null)
                {
                    ldapUser.Dispose();
                }

                if (ldapGroup != null)
                {
                    ldapGroup.Dispose();
                }

                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #20
0
        public void CreateMailbox(UsersObject user)
        {
            CPDatabase         database   = null;
            ExchangePowershell powershell = null;

            CloudPanelTransaction transaction = new CloudPanelTransaction();

            try
            {
                database = new CPDatabase();

                // Get the user from the database
                var foundUser = (from u in database.Users
                                 where u.UserPrincipalName == user.UserPrincipalName
                                 select u).FirstOrDefault();

                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);

                // Get the selected mailbox plan
                MailboxPlanObject mailboxPlan = GetMailboxPlan(user.MailboxPlan);

                // Create new mailbox and register transaction
                powershell.NewMailbox(user);
                transaction.NewMailbox(user.UserPrincipalName);

                // Update the mailbox values
                powershell.UpdateMailbox(user, mailboxPlan);
                powershell.UpdateCASMailbox(user, mailboxPlan);

                // Set litigation hold settings if enabled for litigation hold
                if (user.LitigationHoldEnabled)
                {
                    powershell.NewLitigationHold(user.UserPrincipalName, user.LitigationHoldComment, user.LitigationHoldUrl, user.LitigationHoldDuration);
                }

                // Set archive settings if enabled for archiving
                if (user.ArchivingEnabled && user.ArchivePlan > 0)
                {
                    powershell.NewArchiveMailbox(user);
                    // Set quota on archive
                }

                foundUser.Email           = user.PrimarySmtpAddress;
                foundUser.MailboxPlan     = user.MailboxPlan;
                foundUser.AdditionalMB    = user.SetMailboxSizeInMB - mailboxPlan.MailboxSizeInMB;
                foundUser.ExchArchivePlan = user.ArchivePlan;
                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error creating mailbox for " + user.UserPrincipalName, ex);
                ThrowEvent(AlertID.FAILED, ex.Message);

                transaction.RollBack();
            }
            finally
            {
                if (powershell != null)
                {
                    powershell.Dispose();
                }

                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #21
0
        /// <summary>
        /// Creates a new company
        /// </summary>
        /// <param name="company"></param>
        /// <param name="resellerCode"></param>
        public void NewCompany(CompanyObject company, string resellerCode)
        {
            CPDatabase database = null;

            // Rollback class in case something goes wrong we can undo changes
            CloudPanelTransaction events = new CloudPanelTransaction();

            try
            {
                database = new CPDatabase();

                // Generate the company code
                string companyCode = CompanyObject.GenerateCompanyCode(company.CompanyName, company.UseCompanyNameInsteadofCompanyCode);

                // Loop and make sure one does exist or find one that does
                int count = 0;
                for (int i = 0; i < 1000; i++)
                {
                    if (Validation.DoesCompanyCodeExist(companyCode))
                    {
                        this.logger.Info("Tried to create a new company with company code " + companyCode + " but it already existed... trying another code");

                        companyCode = companyCode + count.ToString();
                        count++;
                    }
                    else
                    {
                        company.CompanyCode = companyCode; // Assign company code to object
                        break;
                    }
                }

                // Get the resellers distinguished name
                var resellerDistinguishedName = (from r in database.Companies
                                                 where r.IsReseller
                                                 where r.CompanyCode == resellerCode
                                                 select r.DistinguishedName).First();

                #region Create Organizational Units

                //
                // Create organizational units
                //
                ADOrganizationalUnit adOrg = new ADOrganizationalUnit(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);

                // Check if resellers are enabled and create the organizational unit in the correct place
                string newCompanyDistinguishedName = string.Empty;
                if (!StaticSettings.ResellersEnabled)
                {
                    newCompanyDistinguishedName = adOrg.CreateCompany(StaticSettings.HostingOU, company);
                }
                else
                {
                    newCompanyDistinguishedName = adOrg.CreateCompany(resellerDistinguishedName, company);
                }
                events.NewOrganizationalUnitEvent(newCompanyDistinguishedName);
                adOrg.RemoveAuthUsersRights(newCompanyDistinguishedName); // Removes authenticated users from the OU;

                // Create the Exchange OU
                string exchangeOU = adOrg.CreateOU(newCompanyDistinguishedName, "Exchange", company.Domains[0]);
                events.NewOrganizationalUnitEvent(exchangeOU);
                adOrg.RemoveAuthUsersRights(exchangeOU); // Removes authenticated users from the OU;

                // Create the Applications OU
                string applicationsOU = adOrg.CreateOU(newCompanyDistinguishedName, "Applications", company.Domains[0]);
                events.NewOrganizationalUnitEvent(applicationsOU);
                adOrg.RemoveAuthUsersRights(applicationsOU); // Removes authenticated users from the OU;

                // Create the custom users OU if there is one
                string customUsersOU = string.Empty;
                if (!string.IsNullOrEmpty(StaticSettings.UsersOU))
                {
                    customUsersOU = adOrg.CreateOU(newCompanyDistinguishedName, StaticSettings.UsersOU, company.Domains[0]);
                    events.NewOrganizationalUnitEvent(customUsersOU);
                    adOrg.RemoveAuthUsersRights(customUsersOU); // Removes authenticated users from the OU;
                }
                #endregion

                #region Create Security Groups
                //
                // Create Security Groups
                //
                ADGroup adGroup = new ADGroup(StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.PrimaryDC);

                // Create the Admins security group
                adGroup.Create(newCompanyDistinguishedName, "Admins@" + companyCode, "", true, false);
                events.NewSecurityGroup("Admins@" + companyCode);

                // Create the All Users security group
                adGroup.Create(newCompanyDistinguishedName, "AllUsers@" + companyCode, "", true, false);
                events.NewSecurityGroup("AllUsers@" + companyCode);

                // Create the AllTSUsers security groups
                adGroup.Create(newCompanyDistinguishedName, "AllTSUsers@" + companyCode, "", true, false);
                events.NewSecurityGroup("AllTSUsers@" + companyCode);

                // Add AllTSUsers to the AllTSUsers@Hosting group
                adGroup.AddMember("AllTSUsers@Hosting", "AllTSUsers@" + companyCode, "name");

                // Check the GPOAccess and see if we are using resellers or not. Then add the group to the GPOAccess security group
                if (StaticSettings.ResellersEnabled)
                {
                    adGroup.AddMember("GPOAccess@" + resellerCode, "AllTSUsers@" + companyCode, "name");
                }
                else
                {
                    adGroup.AddMember("GPOAccess@Hosting", "AllTSUsers@" + companyCode, "name");
                }
                #endregion

                #region Add read rights to organizational units
                //
                // Now add read rights
                //
                adOrg.AddAccessRights(newCompanyDistinguishedName, "AllUsers@ " + companyCode);
                adOrg.AddAccessRights(exchangeOU, "AllUsers@" + companyCode);
                adOrg.AddAccessRights(applicationsOU, "AllUsers@" + companyCode);

                if (!string.IsNullOrEmpty(StaticSettings.UsersOU))
                {
                    adOrg.AddAccessRights(customUsersOU, "AllUsers@" + companyCode);
                }

                #endregion

                // Insert into database
                Company newCompanyDb = new Company();
                newCompanyDb.IsReseller        = false;
                newCompanyDb.CompanyName       = company.CompanyName;
                newCompanyDb.CompanyCode       = company.CompanyCode;
                newCompanyDb.ResellerCode      = resellerCode;
                newCompanyDb.Street            = company.Street;
                newCompanyDb.City              = company.City;
                newCompanyDb.State             = company.State;
                newCompanyDb.ZipCode           = company.ZipCode;
                newCompanyDb.Country           = company.Country;
                newCompanyDb.PhoneNumber       = company.Telephone;
                newCompanyDb.AdminName         = company.AdminName;
                newCompanyDb.AdminEmail        = company.AdminEmail;
                newCompanyDb.DistinguishedName = newCompanyDistinguishedName;
                newCompanyDb.Created           = DateTime.Now;

                database.Companies.Add(newCompanyDb);
                database.SaveChanges();
                events.InsertCompanyToDatabase(newCompanyDb.CompanyCode);

                // Insert domain into database
                Domain newDomain = new Domain();
                newDomain.CompanyCode      = newCompanyDb.CompanyCode;
                newDomain.Domain1          = company.Domains[0];
                newDomain.IsAcceptedDomain = false;
                newDomain.IsLyncDomain     = false;
                newDomain.IsSubDomain      = false;

                database.Domains.Add(newDomain);
                database.SaveChanges();

                // Notify success
                ThrowEvent(AlertID.SUCCESS, "Successfully created new company " + newCompanyDb.CompanyName);
            }
            catch (Exception ex)
            {
                ThrowEvent(AlertID.FAILED, ex.Message);

                // Rollback on error
                events.RollBack();
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }
            }
        }
Beispiel #22
0
        public void EnableExchange(string companyCode)
        {
            ExchangePowershell powershell = null;
            CPDatabase         database   = null;

            CloudPanelTransaction newTransaction = new CloudPanelTransaction();

            try
            {
                powershell = new ExchangePowershell(StaticSettings.ExchangeURI, StaticSettings.Username, StaticSettings.DecryptedPassword, StaticSettings.ExchangeUseKerberos, StaticSettings.PrimaryDC);

                // Enable Exchange objects for company
                powershell.NewGlobalAddressList(RecipientFilters.GetGALName(companyCode), RecipientFilters.GetGALFilter(companyCode));
                newTransaction.NewExchangeGAL(RecipientFilters.GetGALName(companyCode));

                powershell.NewAddressList(RecipientFilters.GetUsersName(companyCode), RecipientFilters.GetUsersFilter(companyCode));
                newTransaction.NewExchangeAddressList(RecipientFilters.GetUsersName(companyCode));

                powershell.NewAddressList(RecipientFilters.GetGroupsName(companyCode), RecipientFilters.GetGroupsFilter(companyCode));
                newTransaction.NewExchangeAddressList(RecipientFilters.GetGroupsName(companyCode));

                powershell.NewAddressList(RecipientFilters.GetContactsName(companyCode), RecipientFilters.GetContactsFilter(companyCode));
                newTransaction.NewExchangeAddressList(RecipientFilters.GetContactsName(companyCode));

                powershell.NewAddressList(RecipientFilters.GetRoomName(companyCode), RecipientFilters.GetRoomFilter(companyCode));
                newTransaction.NewExchangeAddressList(RecipientFilters.GetRoomName(companyCode));

                powershell.NewOfflineAddressBook(RecipientFilters.GetOALName(companyCode), RecipientFilters.GetGALName(companyCode), "AllUsers@ " + companyCode);
                newTransaction.NewExchangeOAB(RecipientFilters.GetOALName(companyCode));

                powershell.NewAddressBookPolicy(RecipientFilters.GetABPName(companyCode), RecipientFilters.GetGALName(companyCode), RecipientFilters.GetOALName(companyCode), RecipientFilters.GetRoomName(companyCode), RecipientFilters.GetABPAddressLists(companyCode));
                newTransaction.NewExchangeABP(RecipientFilters.GetABPName(companyCode));

                database = new CPDatabase();
                var dn = (from c in database.Companies
                          where !c.IsReseller
                          where c.CompanyCode == companyCode
                          select c).First();

                powershell.NewSecurityDistributionGroup("ExchangeSecurity@" + companyCode, "AllUsers@" + companyCode, companyCode, "OU=Exchange," + dn.DistinguishedName);
                newTransaction.NewExchangeGroup("ExchangeSecurity@" + companyCode);

                // Set Exchange is enabled
                dn.ExchEnabled   = true;
                dn.ExchPermFixed = true;

                database.SaveChanges();
            }
            catch (Exception ex)
            {
                this.logger.Error("Error disabling Exchange for company " + companyCode, ex);

                newTransaction.RollBack();

                ThrowEvent(Base.Enumerations.AlertID.FAILED, ex.Message);
            }
            finally
            {
                if (database != null)
                {
                    database.Dispose();
                }

                if (powershell != null)
                {
                    powershell.Dispose();
                }
            }
        }