Exemple #1
0
        private void RollbackADAction(Actions action, object[] attribute)
        {
            OrganizationalUnits org = null;
            Groups grp = null;
            Users  usr = null;

            try
            {
                log.DebugFormat("Rolling back action {0}...", action.ToString());

                switch (action)
                {
                case Actions.CreateOrganizationalUnit:
                    org = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);
                    org.Delete(attribute[0].ToString(), true);
                    log.DebugFormat("Successfully rolled back action {0} at path {1}", action.ToString(), attribute.ToString());
                    break;

                case Actions.CreateSecurityGroup:
                    grp = new Groups(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);
                    grp.Delete(attribute[0].ToString());
                    log.DebugFormat("Successfully rolled back action {0} for group {1}", action.ToString(), attribute.ToString());
                    break;

                case Actions.AddDomains:
                    org = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);
                    org.RemoveDomains(attribute[0].ToString(), new string[] { attribute[1].ToString() });
                    log.DebugFormat("Successfully rolled back action {0} for org {1}", action.ToString(), attribute[0]);
                    break;

                default:
                    log.DebugFormat("Unknown action {0}... Skipping...", action.ToString());
                    break;
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Failed to rollback action {0}. Exception: {1}", action.ToString(), ex.ToString());
            }
            finally
            {
                if (usr != null)
                {
                    usr.Dispose();
                }

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

                if (org != null)
                {
                    org.Dispose();
                }
            }
        }
Exemple #2
0
        public void Delete(string resellerCode)
        {
            OrganizationalUnits organizationalUnits = null;

            try
            {
                if (string.IsNullOrEmpty(resellerCode))
                {
                    throw new MissingFieldException("", "ResellerCode");
                }

                organizationalUnits = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);

                // Find the resellers from SQL
                var reseller = (from c in db.Companies
                                where c.IsReseller
                                where c.CompanyCode == resellerCode
                                select c).First();

                if (reseller == null)
                {
                    throw new ArgumentNullException(resellerCode);
                }
                else
                {
                    // See if any companies belong to the reseller
                    var companyCount = (from c in db.Companies where c.ResellerCode == resellerCode select c).Count();
                    if (companyCount > 0)
                    {
                        throw new Exception("Unable to delete reseller because it contains companies.");
                    }

                    organizationalUnits.Delete(reseller.DistinguishedName, true);
                    db.Companies.Remove(reseller);
                    db.SaveChanges();

                    log.InfoFormat("Successfully deleted reseller {0}.", reseller.CompanyName);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error deleting reseller: {0}", ex.ToString());
                throw;
            }
            finally
            {
                if (organizationalUnits != null)
                {
                    organizationalUnits.Dispose();
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// Deletes a company. Does not check for existing users. Is destructive
        /// </summary>
        /// <param name="companyCode"></param>
        public void Delete(string companyCode)
        {
            OrganizationalUnits organizationalUnits = null;

            try
            {
                if (string.IsNullOrEmpty(companyCode))
                {
                    throw new MissingFieldException("", "CompanyCode");
                }

                organizationalUnits = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);

                // Find the resellers from SQL
                var company = (from c in db.Companies
                               where c.IsReseller
                               where c.CompanyCode == companyCode
                               select c).First();

                if (company == null)
                {
                    throw new ArgumentNullException(companyCode);
                }
                else
                {
                    // SAFE DELETE OFF! DESTRUCTIVE! WILL DELETE ALL USERS AND OBJECTS IN COMPANY!!
                    organizationalUnits.Delete(company.DistinguishedName, false);

                    // Remove all companiesby calling stored procedure
                    db.spDeleteCompany(company.CompanyCode);

                    log.InfoFormat("Successfully deleted company {0}.", company.CompanyName);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error deleting company: {0}", ex.ToString());
                throw;
            }
            finally
            {
                if (organizationalUnits != null)
                {
                    organizationalUnits.Dispose();
                }
            }
        }
        public List <EmployeeBelongsToOrgUnitLink> FetchAssociatedOrganisationalUnits()
        {
            List <EmployeeBelongsToOrgUnitLink> organisationalUnits;

            try
            {
                organisationalUnits = OrganizationalUnits.Where(i => i.Active && !i.IsDeleted && i.EmployeeId.Equals(Id)).ToList();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                Debug.WriteLine(e);

                return(null);
            }

            return(organisationalUnits);
        }
Exemple #5
0
 private static OrganizationalUnit GetOrganizationalUnit(Guid?id) => OrganizationalUnits.Find(e => e.Id == id);
Exemple #6
0
        public void Create(Company newReseller)
        {
            OrganizationalUnits organizationalUnits = null;
            Groups groups = null;

            ReverseActions reverse = new ReverseActions();

            try
            {
                organizationalUnits = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);
                groups = new Groups(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);

                // Check if the user provided a company code or not
                // If they didn't then we will automatically generate one
                if (string.IsNullOrEmpty(newReseller.CompanyCode))
                {
                    newReseller.CompanyCode = OtherStatics.FindAvailableCompanyCode(newReseller.CompanyName, this.db);
                }

                OrganizationalUnit newOrg = new OrganizationalUnit();
                newOrg.Name        = newReseller.CompanyCode;
                newOrg.DisplayName = newReseller.CompanyName;
                newOrg.City        = newReseller.City;
                newOrg.State       = newReseller.State;
                newOrg.PostalCode  = newReseller.ZipCode;
                newOrg.Country     = newReseller.Country;
                newOrg.UPNSuffixes = null; // Do not allow UPNSuffixes on the reseller OU
                newOrg.Description = newReseller.Description;

                var createdReseller = organizationalUnits.Create(Settings.HostingOU, newOrg);
                reverse.AddAction(Actions.CreateOrganizationalUnit, createdReseller.DistinguishedName);

                //
                // Create GPOAccess Group
                //
                SecurityGroup newGroup = new SecurityGroup();
                newGroup.Name           = string.Format("GPOAccess@{0}", newReseller.CompanyCode.Replace(" ", string.Empty));
                newGroup.SamAccountName = newGroup.Name.Length > 19 ? newGroup.Name.Substring(0, 18) : newGroup.Name;

                groups.Create(createdReseller.DistinguishedName, newGroup);
                reverse.AddAction(Actions.CreateSecurityGroup, newGroup.Name);

                //
                // Add group to hoster GPOAccess group
                //
                groups.AddGroup("GPOAccess@Hosting", newGroup.Name);

                // Add to SQL
                log.DebugFormat("Saving new reseller {0} to the database.", newReseller.CompanyName);
                newReseller.Created           = DateTime.Now;
                newReseller.DistinguishedName = createdReseller.DistinguishedName;
                newReseller.IsReseller        = true;

                db.Companies.Add(newReseller);
                db.SaveChanges();

                log.InfoFormat("Successfully created new reseller {0}", newReseller.CompanyName);
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error creating new reseller: {0}", ex.ToString());
                reverse.RollbackNow();
                throw;
            }
            finally
            {
                if (groups != null)
                {
                    groups.Dispose();
                }

                if (organizationalUnits != null)
                {
                    organizationalUnits.Dispose();
                }
            }
        }
Exemple #7
0
        public void Update(Company existingReseller)
        {
            OrganizationalUnits organizationalUnits = null;

            try
            {
                if (string.IsNullOrEmpty(existingReseller.CompanyCode))
                {
                    throw new MissingFieldException("Company", "CompanyCode");
                }

                organizationalUnits = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);

                // Find the resellers from SQL
                var reseller = (from c in db.Companies
                                where c.IsReseller
                                where c.CompanyCode == existingReseller.CompanyCode
                                select c).First();

                if (reseller == null)
                {
                    throw new ArgumentNullException(existingReseller.CompanyCode);
                }
                else
                {
                    // Set the new values
                    reseller.CompanyName = existingReseller.CompanyName;
                    reseller.AdminName   = existingReseller.AdminName;
                    reseller.AdminEmail  = existingReseller.AdminEmail;
                    reseller.PhoneNumber = existingReseller.PhoneNumber;
                    reseller.Street      = existingReseller.Street;
                    reseller.City        = existingReseller.City;
                    reseller.State       = existingReseller.State;
                    reseller.ZipCode     = existingReseller.ZipCode;
                    reseller.Country     = existingReseller.Country;

                    // Update the OU
                    log.DebugFormat("Updating organizational unit for reseller {0}", existingReseller.CompanyName);
                    organizationalUnits.Update(new OrganizationalUnit()
                    {
                        DistinguishedName = reseller.DistinguishedName,
                        DisplayName       = reseller.CompanyName,
                        Description       = reseller.Description,
                        Street            = reseller.Street,
                        City       = reseller.City,
                        State      = reseller.State,
                        PostalCode = reseller.ZipCode,
                        Country    = reseller.Country
                    });

                    // Save SQL changes
                    db.SaveChanges();

                    log.InfoFormat("Successfully updated existing reseller {0}. New name if changed: {1}", existingReseller.CompanyName, reseller.CompanyName);
                }
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error updating reseller: {0}", ex.ToString());
                throw;
            }
            finally
            {
                if (organizationalUnits != null)
                {
                    organizationalUnits.Dispose();
                }
            }
        }
Exemple #8
0
        /// <summary>
        /// Creates a new company in AD and the database
        /// </summary>
        /// <param name="newCompany"></param>
        /// <param name="domainName"></param>
        /// <param name="resellerCode"></param>
        public void Create(Company newCompany, string domainName, string resellerCode)
        {
            OrganizationalUnits organizationalUnits = null;
            Groups groups = null;

            ReverseActions reverse = new ReverseActions();

            try
            {
                if (string.IsNullOrEmpty(domainName))
                {
                    throw new MissingFieldException("", "DomainName");
                }

                if (string.IsNullOrEmpty(resellerCode))
                {
                    throw new MissingFieldException("", "ResellerCode");
                }

                organizationalUnits = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);
                groups = new Groups(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);

                // Check if the user provided a company code or not
                // If they didn't then we will automatically generate one
                if (string.IsNullOrEmpty(newCompany.CompanyCode))
                {
                    newCompany.CompanyCode = OtherStatics.FindAvailableCompanyCode(newCompany.CompanyName, this.db);
                }

                OrganizationalUnit newOrg = new OrganizationalUnit();
                newOrg.Name        = newCompany.CompanyCode;
                newOrg.DisplayName = newCompany.CompanyName;
                newOrg.City        = newCompany.City;
                newOrg.State       = newCompany.State;
                newOrg.PostalCode  = newCompany.ZipCode;
                newOrg.Country     = newCompany.Country;
                newOrg.UPNSuffixes = new[] { domainName };
                newOrg.Description = newCompany.Description;

                var createdCompany = organizationalUnits.Create(Settings.HostingOU, newOrg);
                reverse.AddAction(Actions.CreateOrganizationalUnit, createdCompany.DistinguishedName);

                //
                // Create security groups
                //
                string strippedCompanyCode = newCompany.CompanyCode.Replace(" ", string.Empty);

                // Create Admins@ group
                SecurityGroup newGroup = new SecurityGroup();
                newGroup.Name           = string.Format("Admins@", strippedCompanyCode);
                newGroup.SamAccountName = newGroup.Name.Length > 19 ? newGroup.Name.Substring(0, 18) : newGroup.Name;
                groups.Create(createdCompany.DistinguishedName, newGroup);
                reverse.AddAction(Actions.CreateSecurityGroup, newGroup.Name);

                // Create AllUsers@ group
                newGroup.Name           = string.Format("AllUsers@", strippedCompanyCode);
                newGroup.SamAccountName = newGroup.Name.Length > 19 ? newGroup.Name.Substring(0, 18) : newGroup.Name;
                groups.Create(createdCompany.DistinguishedName, newGroup);
                reverse.AddAction(Actions.CreateSecurityGroup, newGroup.Name);

                // Create AllTSUsers@ group
                newGroup.Name           = string.Format("AllTSUsers@", strippedCompanyCode);
                newGroup.SamAccountName = newGroup.Name.Length > 19 ? newGroup.Name.Substring(0, 18) : newGroup.Name;
                groups.Create(createdCompany.DistinguishedName, newGroup);
                reverse.AddAction(Actions.CreateSecurityGroup, newGroup.Name);
                groups.AddGroup("GPOAccess@" + resellerCode, newGroup.Name); // Add group to the GPOAccess group in resellers OU

                //
                // Create Exchange and Applications OU
                //
                newOrg             = new OrganizationalUnit();
                newOrg.Name        = Settings.ExchangeOU;
                newOrg.DisplayName = Settings.ExchangeOU;
                newOrg.UPNSuffixes = new[] { domainName };

                var createdOrg = organizationalUnits.Create(createdCompany.DistinguishedName, newOrg);
                reverse.AddAction(Actions.CreateOrganizationalUnit, createdOrg.DistinguishedName);

                newOrg             = new OrganizationalUnit();
                newOrg.Name        = Settings.ApplicationsOU;
                newOrg.DisplayName = Settings.ApplicationsOU;
                newOrg.UPNSuffixes = new[] { domainName };

                createdOrg = organizationalUnits.Create(createdCompany.DistinguishedName, newOrg);
                reverse.AddAction(Actions.CreateOrganizationalUnit, createdOrg.DistinguishedName);

                // Add to SQL
                log.DebugFormat("Saving new company {0} to the database.", newCompany.CompanyName);
                newCompany.Created           = DateTime.Now;
                newCompany.DistinguishedName = createdCompany.DistinguishedName;
                newCompany.IsReseller        = false;

                db.Companies.Add(newCompany);
                db.SaveChanges();

                log.InfoFormat("Successfully created new company {0}", newCompany.CompanyName);
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error creating new company: {0}", ex.ToString());
                reverse.RollbackNow();
                throw;
            }
            finally
            {
                if (groups != null)
                {
                    groups.Dispose();
                }

                if (organizationalUnits != null)
                {
                    organizationalUnits.Dispose();
                }
            }
        }
Exemple #9
0
        /// <summary>
        /// Adds a new domain
        /// </summary>
        /// <param name="companyCode"></param>
        /// <param name="domainName"></param>
        public void AddDomain(string companyCode, string domainName)
        {
            if (string.IsNullOrEmpty(companyCode))
            {
                throw new MissingFieldException("Companies", "companyCode");
            }

            if (string.IsNullOrEmpty(domainName))
            {
                throw new MissingFieldException("Companies", "domainName");
            }

            // Get company
            var company = (from c in db.Companies
                           where !c.IsReseller
                           where c.CompanyCode == companyCode
                           select c).First();

            // Check if domain exists
            var domain = (from d in db.Domains
                          where d.Domain1 == domainName
                          select d).Count();

            if (domain > 0)
            {
                throw new Exception("Domain already exists in the system.");
            }

            // Check for company limits
            // TODO

            OrganizationalUnits organizationalUnits = null;
            ReverseActions      reverse             = new ReverseActions();

            try
            {
                organizationalUnits = new OrganizationalUnits(Settings.Username, Settings.DecryptedPassword, Settings.PrimaryDC);
                organizationalUnits.AddDomains(company.DistinguishedName, new[] { domainName });
                reverse.AddAction(Actions.AddDomains, new object[] {
                    company.DistinguishedName,
                    domainName
                });

                // Add domain to the system
                Domain newDomain = new Domain();
                newDomain.Domain1          = domainName;
                newDomain.CompanyCode      = companyCode;
                newDomain.IsAcceptedDomain = false;
                newDomain.IsLyncDomain     = false;
                newDomain.IsDefault        = false;

                db.Domains.Add(newDomain);
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error adding domain {0} to {1}. Error {2}", domainName, companyCode, ex.ToString());
                throw;
            }
            finally
            {
                if (organizationalUnits != null)
                {
                    organizationalUnits.Dispose();
                }
            }
        }