Ejemplo n.º 1
0
        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();
                }
            }
        }