public void CanPostSingleEvent()
        {
            _eventController.Request = CreateRequestMessage(PrincipalUtility.CreateClientUser(TestConstants.ProjectId), true, false);
            var actionResult = _eventController.Post(Encoding.UTF8.GetBytes("simple string").Compress()).Result;

            Assert.IsType <OkResult>(actionResult);
            Assert.Equal(1, _eventQueue.Count);

            var processEventsJob = IoC.GetInstance <ProcessEventPostsJob>();
            var result           = processEventsJob.Run();

            Assert.Equal(0, _eventQueue.Count);
            RemoveAllEvents();
        }
示例#2
0
        public static void BuildWithContainer(IAppBuilder app, Container container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            var config = new HttpConfiguration();

            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
            config.Formatters.Remove(config.Formatters.XmlFormatter);
            config.Formatters.JsonFormatter.SerializerSettings.Formatting       = Formatting.Indented;
            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new LowerCaseUnderscorePropertyNamesContractResolver();

            config.MessageHandlers.Add(new XHttpMethodOverrideDelegatingHandler());
            config.MessageHandlers.Add(new EncodingDelegatingHandler());

            // Throttle api calls to X every 15 minutes by IP address.
            config.MessageHandlers.Add(container.GetInstance <ThrottlingHandler>());

            // Reject event posts in orgs over their max event limits.
            config.MessageHandlers.Add(container.GetInstance <OverageHandler>());

            var constraintResolver = new DefaultInlineConstraintResolver();

            constraintResolver.ConstraintMap.Add("objectid", typeof(ObjectIdRouteConstraint));
            config.MapHttpAttributeRoutes(constraintResolver);

            container.RegisterWebApiFilterProvider(config);
            try {
                container.Verify();
            } catch (Exception ex) {
                var tempEx = ex;
                while (!(tempEx is ReflectionTypeLoadException))
                {
                    if (tempEx.InnerException == null)
                    {
                        break;
                    }
                    tempEx = tempEx.InnerException;
                }

                var typeLoadException = tempEx as ReflectionTypeLoadException;
                if (typeLoadException != null)
                {
                    foreach (var loaderEx in typeLoadException.LoaderExceptions)
                    {
                        Debug.WriteLine(loaderEx.Message);
                    }
                }

                Debug.WriteLine(ex.Message);
                throw;
            }
            config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
            //config.EnableSystemDiagnosticsTracing();

            // sample middleware that would be how we would auth an api token
            // maybe we should be using custom OAuthBearerAuthenticationProvider's
            // http://leastprivilege.com/2013/10/31/retrieving-bearer-tokens-from-alternative-locations-in-katanaowin/
            app.Use((context, next) => {
                var token = context.Request.Query.Get("access_token");
                if (String.IsNullOrEmpty(token))
                {
                    var authHeader = context.Request.Headers.Get("Authorization");
                    if (!String.IsNullOrEmpty(authHeader))
                    {
                        var authHeaderVal = AuthenticationHeaderValue.Parse(authHeader);
                        if (authHeaderVal.Scheme.Equals("token", StringComparison.OrdinalIgnoreCase) ||
                            authHeaderVal.Scheme.Equals("bearer", StringComparison.OrdinalIgnoreCase))
                        {
                            token = authHeaderVal.Parameter;
                        }
                    }
                }

                var projectRepository = container.GetInstance <IProjectRepository>();
                if (String.IsNullOrEmpty(token))
                {
                    return(next.Invoke());
                }

                var project = projectRepository.GetByApiKey(token);
                if (project == null)
                {
                    return(next.Invoke());
                }

                // TODO: Ensure that the current users roles are properly set.
                context.Request.User = PrincipalUtility.CreateUser(_userId, new[] { AuthorizationRoles.GlobalAdmin });
                return(next.Invoke());
            });
            app.UseStageMarker(PipelineStage.Authenticate);

            app.CreatePerContext <Lazy <User> >("LazyUser", ctx => {
                if (ctx.Request.User == null || ctx.Request.User.Identity == null || !ctx.Request.User.Identity.IsAuthenticated)
                {
                    return(null);
                }

                if (!ctx.Request.User.IsUserAuthType())
                {
                    return(null);
                }

                return(new Lazy <User>(() => {
                    var userRepository = container.GetInstance <IUserRepository>();
                    return userRepository.GetById(ctx.Request.User.GetUserId(), true);
                }));
            });

            app.CreatePerContext <Lazy <Project> >("LazyProject", ctx => {
                if (ctx.Request.User == null || ctx.Request.User.Identity == null || !ctx.Request.User.Identity.IsAuthenticated)
                {
                    return(null);
                }

                if (!ctx.Request.User.IsProjectAuthType())
                {
                    return(null);
                }

                return(new Lazy <Project>(() => {
                    var projectRepository = container.GetInstance <IProjectRepository>();
                    return projectRepository.GetById(ctx.Request.User.GetProjectId(), true);
                }));
            });

            app.UseCors(CorsOptions.AllowAll);
            //app.MapSignalR();
            app.UseWebApi(config);

            app.Use((context, next) => {
                if (!context.Request.Uri.AbsolutePath.StartsWith("/" + ExceptionlessApiController.API_PREFIX))
                {
                    return(next.Invoke());
                }

                context.Response.Write("{\r\n   \"message\": \"not found\"\r\n}");
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;

                return(Task.FromResult(0));
            });
            app.UseStageMarker(PipelineStage.PostMapHandler);

            PhysicalFileSystem fileSystem = null;

            if (Directory.Exists("./Content"))
            {
                fileSystem = new PhysicalFileSystem("./Content");
            }
            if (Directory.Exists("./bin/Content"))
            {
                fileSystem = new PhysicalFileSystem("./bin/Content");
            }

            if (fileSystem != null)
            {
                app.UseDefaultFiles(new DefaultFilesOptions {
                    FileSystem = fileSystem
                });
                app.UseStaticFiles(new StaticFileOptions {
                    FileSystem = fileSystem
                });
            }

            Mapper.Initialize(c => c.ConstructServicesUsing(container.GetInstance));

            // TODO: Remove this as it's only for testing.
            EnsureSampleData(container);
            Task.Factory.StartNew(() => container.GetInstance <ProcessEventPostsJob>().Run());
        }
        public static void AllDirRptsGroups(string userId, bool recursive)
        {
            #region Environment

            const string projectName           = "ADManager";
            const string dirRptSuffix          = "_DirRpts";
            const string allRptSuffix          = "_AllRpts";
            const string mgrRptSuffix          = "_MgrRpts";
            var          employeesLdapPath     = "EMPLOYEES,";
            var          dirRptLdapPath        = "OU=DirectReports,OU=ORGCHART,";
            var          allRptLdapPath        = "OU=AllReports,OU=ORGCHART,";
            var          mgrRptLdapPath        = "OU=ManagerReports,OU=ORGCHART,";
            var          directReportEmployees = new List <string>();
            var          activeDirectory       = new PrincipalContext(ContextType.Domain);
            var          dirRptsGroup          = new GroupPrincipalFull(activeDirectory);
            var          allRptsGroup          = new GroupPrincipalFull(activeDirectory);
            try
            {
                var admins     = GroupPrincipalFull.FindByIdentity(activeDirectory, "Domain Admins");
                var ldapSuffix = admins.RootContainer;
                dirRptLdapPath    += ldapSuffix;
                allRptLdapPath    += ldapSuffix;
                mgrRptLdapPath    += ldapSuffix;
                employeesLdapPath += ldapSuffix;
            }
            catch
            {
            }

            var managerDn = string.Empty;

            #endregion

            try
            {
                #region FetchUserInfo

                var user = UserPrincipalFull.FindByIdentity(activeDirectory, userId);
                Console.WriteLine("Processing {0}", user.DisplayName);
                var dirRptGrpName = PrincipalUtility.MakeSafeForLdap(user.DisplayName + dirRptSuffix);
                var allRptGrpName = PrincipalUtility.MakeSafeForLdap(user.DisplayName + allRptSuffix);
                var mgrRptGrpName = PrincipalUtility.MakeSafeForLdap(user.DisplayName + mgrRptSuffix);
                try
                {
                    managerDn = user.Manager;
                }
                catch
                {
                }
                try
                {
                    Console.WriteLine("Fetching {0}'s Direct Reports", user.DisplayName);
                    directReportEmployees = user.DirectReports;
                }
                catch
                {
                }

                #endregion

                directReportEmployees =
                    directReportEmployees.Where(
                        dn => dn.ToLowerInvariant().Contains(employeesLdapPath.ToLowerInvariant())).ToList();

                if (directReportEmployees.Count > 0)
                {
                    #region ValidateDirRptGroup

                    try
                    {
                        dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                        try
                        {
                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName);
                        }
                        catch
                        {
                        }
                        if (!string.IsNullOrEmpty(dirRptsGroup.DistinguishedName))
                        {
                            #region AddMgrToDirRpts

                            try
                            {
                                Console.WriteLine("Adding {0} to {1}", user.DisplayName, dirRptsGroup.SamAccountName);
                                dirRptsGroup.AddMember(user);
                            }
                            catch (Exception ex)
                            {
                                if (!ex.Message.Contains("object already exists"))
                                {
                                    Console.WriteLine(ex);
                                }
                            }

                            #endregion

                            #region AddDirRptToMgrAllRpts

                            try
                            {
                                var manager = new UserPrincipalFull(activeDirectory);
                                try
                                {
                                    manager = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn);
                                }
                                catch
                                {
                                }
                                var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                   PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix));
                                try
                                {
                                    Console.WriteLine("Adding {0} to {1}", dirRptGrpName, mgrAllRpts.SamAccountName);
                                    mgrAllRpts.AddMember(dirRptsGroup);
                                }
                                catch (DirectoryServicesCOMException dsce)
                                {
                                    if (!dsce.Message.Contains("object already exists"))
                                    {
                                        Console.WriteLine(dsce);
                                    }
                                }
                                try
                                {
                                    if (!string.IsNullOrEmpty(allRptsGroup.DistinguishedName))
                                    {
                                        try
                                        {
                                            mgrAllRpts.AddMember(allRptsGroup);
                                            Console.WriteLine("Adding {0} to {1}", allRptsGroup.SamAccountName,
                                                              mgrAllRpts.SamAccountName);
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrAllRpts.RemoveMember(dirRptsGroup);
                                            Console.WriteLine("Removing {0} to {1}", dirRptsGroup.SamAccountName,
                                                              mgrAllRpts.SamAccountName);
                                        }
                                        catch
                                        {
                                        }
                                    }
                                }
                                catch
                                {
                                }
                            }
                            catch (NullReferenceException)
                            {
                            }
                            catch (Exception ex2)
                            {
                                if (!ex2.ToString().Contains("object already exists"))
                                {
                                    Console.WriteLine(ex2);
                                }
                            }

                            #endregion
                        }
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            #region CreateDirRptGroup

                            Console.WriteLine("Creating {0}", dirRptGrpName);
                            var ou = new PrincipalContext(ContextType.Domain, null, dirRptLdapPath);
                            dirRptsGroup = new GroupPrincipalFull(ou, dirRptGrpName);
                            dirRptsGroup.Save();
                            try
                            {
                                dirRptsGroup             = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                dirRptsGroup.DisplayName = string.Format("{0} - Direct Reporting Employees",
                                                                         user.DisplayName);
                                dirRptsGroup.Save();
                            }
                            catch
                            {
                            }
                            try
                            {
                                dirRptsGroup             = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                dirRptsGroup.Description = string.Format("Employees who directly report to {0}",
                                                                         user.DisplayName);
                                dirRptsGroup.Save();
                            }
                            catch
                            {
                            }
                            try
                            {
                                dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                dirRptsGroup.EmailAddress = string.Format("{0}@customer.com", dirRptGrpName);
                                dirRptsGroup.Save();
                            }
                            catch
                            {
                            }
                            try
                            {
                                dirRptsGroup           = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                dirRptsGroup.GidNumber = int.Parse(user.EmployeeNumber);
                                dirRptsGroup.Save();
                            }
                            catch
                            {
                            }
                            try
                            {
                                dirRptsGroup      = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                dirRptsGroup.Info = string.Format("Created by {0} on {1}", projectName,
                                                                  DateTime.Now.ToString(CultureInfo.InvariantCulture));
                                dirRptsGroup.Save();
                            }
                            catch
                            {
                            }
                            try
                            {
                                dirRptsGroup           = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                dirRptsGroup.ManagedBy = user.DistinguishedName;
                                dirRptsGroup.Save();
                            }
                            catch
                            {
                            }
                            try
                            {
                                dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                                Console.WriteLine("Adding {0} to {1}", user.DisplayName, dirRptsGroup.SamAccountName);
                                dirRptsGroup.AddMember(user);
                            }
                            catch (Exception ex2)
                            {
                                Console.WriteLine(ex2);
                            }

                            #region AddMgrToDirRpts

                            try
                            {
                                Console.WriteLine("Adding {0} to {1}", user.DisplayName, dirRptsGroup.SamAccountName);
                                dirRptsGroup.AddMember(user);
                            }
                            catch (Exception ex3)
                            {
                                if (!ex.Message.Contains("object already exists"))
                                {
                                    Console.WriteLine(ex3);
                                }
                            }

                            #endregion

                            #region AddDirRptToMgrAllRpts

                            try
                            {
                                var manager    = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn);
                                var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                   PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix));
                                Console.WriteLine("Adding {0} to {1}", dirRptGrpName, mgrAllRpts.SamAccountName);
                                mgrAllRpts.AddMember(dirRptsGroup);
                            }
                            catch (NullReferenceException)
                            {
                            }
                            catch (Exception ex2)
                            {
                                if (!ex2.ToString().Contains("object already exists"))
                                {
                                    Console.WriteLine(ex2);
                                }
                            }

                            #endregion

                            #endregion
                        }
                        catch (Exception ex1)
                        {
                            Console.WriteLine(ex1);
                        }
                    }

                    #endregion

                    foreach (var dn in directReportEmployees)
                    {
                        try
                        {
                            var employee = UserPrincipalFull.FindByIdentity(activeDirectory, dn);

                            #region AddEmpToDirRptGroup

                            dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName);
                            Console.WriteLine("Adding {0} to {1}", employee.DisplayName, dirRptsGroup.SamAccountName);
                            try
                            {
                                dirRptsGroup.AddMember(employee);
                            }
                            catch (Exception ex1)
                            {
                                if (!ex1.ToString().Contains("object already exists"))
                                {
                                    Console.WriteLine(ex1);
                                }
                            }

                            #endregion

                            #region MgrRptGroup

                            var type = string.Empty;
                            try
                            {
                                type = employee.EmployeeType.ToLowerInvariant();
                            }
                            catch
                            {
                            }
                            if (type.Contains("manager") || type.Contains("corporate officer"))
                            {
                                var mgrRpts = new GroupPrincipalFull(activeDirectory);
                                try
                                {
                                    mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                    if (!string.IsNullOrEmpty(mgrRpts.DistinguishedName))
                                    {
                                    }
                                }
                                catch (Exception)
                                {
                                    #region CreateMgrRptGroup

                                    try
                                    {
                                        //group not found, so create the group
                                        Console.WriteLine("Creating {0}", mgrRptGrpName);
                                        var ou = new PrincipalContext(ContextType.Domain, null, mgrRptLdapPath);
                                        mgrRpts = new GroupPrincipalFull(ou, mgrRptGrpName);
                                        mgrRpts.Save();
                                        try
                                        {
                                            mgrRpts             = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            mgrRpts.DisplayName = string.Format("{0} - All Reporting Managers",
                                                                                user.DisplayName);
                                            mgrRpts.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrRpts             = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            mgrRpts.Description =
                                                string.Format(
                                                    "Managers who report both directly and indirectly to {0}",
                                                    user.DisplayName);
                                            mgrRpts.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            mgrRpts.EmailAddress = string.Format("{0}@customer.com", mgrRptGrpName);
                                            mgrRpts.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrRpts           = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            mgrRpts.GidNumber = int.Parse(user.EmployeeNumber);
                                            mgrRpts.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrRpts      = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            mgrRpts.Info = string.Format("Created by {0} on {1}", projectName,
                                                                         DateTime.Now);
                                            mgrRpts.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrRpts           = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            mgrRpts.ManagedBy = user.DistinguishedName;
                                            mgrRpts.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName);
                                            Console.WriteLine("Adding {0} to {1}", user.DisplayName,
                                                              mgrRpts.SamAccountName);
                                            mgrRpts.AddMember(user);
                                        }
                                        catch (Exception ex2)
                                        {
                                            if (!ex2.ToString().Contains("object already exists"))
                                            {
                                                Console.WriteLine(ex2);
                                            }
                                        }
                                        try
                                        {
                                            var manager    = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn);
                                            var mgrMgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                               PrincipalUtility.MakeSafeForLdap(manager.DisplayName + mgrRptSuffix));
                                            mgrMgrRpts.AddMember(mgrRpts);
                                        }
                                        catch (NullReferenceException)
                                        {
                                        }
                                        catch (Exception ex2)
                                        {
                                            if (!ex2.ToString().Contains("object already exists"))
                                            {
                                                Console.WriteLine(ex2);
                                            }
                                        }
                                    }
                                    catch (Exception ex1)
                                    {
                                        Console.WriteLine(ex1);
                                    }

                                    #endregion
                                }
                                try
                                {
                                    Console.WriteLine("Adding {0} to {1}", employee.DisplayName, mgrRpts.SamAccountName);
                                    mgrRpts.AddMember(employee);
                                }
                                catch (Exception ex1)
                                {
                                    if (!ex1.ToString().Contains("object already exists"))
                                    {
                                        Console.WriteLine(ex1);
                                    }
                                }
                            }

                            #endregion

                            #region RecurseSubDirRpts

                            try
                            {
                                var emplHasDirRpts = false;

                                #region FilterSecondAccounts

                                try
                                {
                                    if (
                                        employee.DirectReports.Any(
                                            rdn => rdn.ToLowerInvariant().Contains(employeesLdapPath.ToLowerInvariant())))
                                    {
                                        emplHasDirRpts = true;
                                    }
                                }
                                catch (Exception ex1)
                                {
                                    Console.WriteLine(ex1);
                                }

                                #endregion

                                if (!emplHasDirRpts || !recursive)
                                {
                                    continue;
                                }

                                #region ValidateAllRptGroup

                                try
                                {
                                    allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName);
                                    if (!string.IsNullOrEmpty(allRptsGroup.DistinguishedName))
                                    {
                                    }
                                }
                                catch (Exception Ex)
                                {
                                    #region CreateAllRptGroup

                                    try
                                    {
                                        Console.WriteLine("Creating {0}", allRptGrpName);
                                        var ou = new PrincipalContext(ContextType.Domain, null, allRptLdapPath);
                                        allRptsGroup = new GroupPrincipalFull(ou, allRptGrpName);
                                        allRptsGroup.Save();
                                        try
                                        {
                                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                             allRptGrpName);
                                            allRptsGroup.DisplayName = string.Format("{0} - All Reporting Employees",
                                                                                     user.DisplayName);
                                            allRptsGroup.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                             allRptGrpName);
                                            allRptsGroup.Description =
                                                string.Format(
                                                    "Employees who report both directly and indirectly to {0}",
                                                    user.DisplayName);
                                            allRptsGroup.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                             allRptGrpName);
                                            allRptsGroup.EmailAddress = string.Format("{0}@customer.com", allRptGrpName);
                                            allRptsGroup.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                             allRptGrpName);
                                            allRptsGroup.GidNumber = int.Parse(user.EmployeeNumber);
                                            allRptsGroup.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                             allRptGrpName);
                                            allRptsGroup.Info = string.Format("Created by {0} on {1}", projectName,
                                                                              DateTime.Now.ToString(CultureInfo.InvariantCulture));
                                            allRptsGroup.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                             allRptGrpName);
                                            allRptsGroup.ManagedBy = user.DistinguishedName;
                                            allRptsGroup.Save();
                                        }
                                        catch
                                        {
                                        }
                                        try
                                        {
                                            Console.WriteLine("Adding {0} to {1}", dirRptGrpName, allRptGrpName);
                                            allRptsGroup.AddMember(dirRptsGroup);
                                        }
                                        catch (Exception ex2)
                                        {
                                            Console.WriteLine(ex2);
                                        }

                                        #region AddAllRptToMgrAllRpts

                                        try
                                        {
                                            var manager    = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn);
                                            var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                               PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix));
                                            Console.WriteLine("Adding {0} to {1}", allRptGrpName,
                                                              mgrAllRpts.SamAccountName);
                                            mgrAllRpts.AddMember(allRptsGroup);
                                        }
                                        catch (NullReferenceException)
                                        {
                                        }
                                        catch (Exception ex2)
                                        {
                                            if (!ex2.ToString().Contains("object already exists"))
                                            {
                                                Console.WriteLine(ex2);
                                            }
                                        }

                                        #endregion

                                        #region RemoveDirRptFromMgrAllRpts

                                        try
                                        {
                                            var manager    = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn);
                                            var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory,
                                                                                               PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix));
                                            Console.WriteLine("Removing {0} from {1}", dirRptGrpName,
                                                              mgrAllRpts.SamAccountName);
                                            mgrAllRpts.RemoveMember(dirRptsGroup);
                                        }
                                        catch (NullReferenceException)
                                        {
                                        }
                                        catch (Exception ex2)
                                        {
                                            if (!ex2.ToString().Contains("exist"))
                                            {
                                                Console.WriteLine(ex2);
                                            }
                                        }

                                        #endregion
                                    }
                                    catch (Exception ex1)
                                    {
                                        Console.WriteLine(ex1);
                                    }

                                    #endregion
                                }

                                #endregion

                                Console.WriteLine("{0} has direct reports, processing recursively.",
                                                  employee.DisplayName);
                                AllDirRptsGroups(employee.SamAccountName, recursive);
                            }
                            catch (Exception ex2)
                            {
                                Console.WriteLine(ex2);
                            }

                            #endregion
                        }
                        catch (Exception ex1)
                        {
                            Console.WriteLine(ex1);
                        }
                    }

                    #region PurgeOldDirRpts

                    foreach (var dn in dirRptsGroup.MemberDNs)
                    {
                        try
                        {
                            var found = false;
                            foreach (var mdn in user.DirectReports)
                            {
                                if (dn.ToLowerInvariant() == mdn.ToLowerInvariant())
                                {
                                    found = true;
                                    break;
                                }
                                if (dn.ToLowerInvariant() != user.DistinguishedName.ToLowerInvariant())
                                {
                                    continue;
                                }
                                found = true;
                                break;
                            }
                            if (found)
                            {
                                continue;
                            }
                            var oldEmpl = UserPrincipalFull.FindByIdentity(activeDirectory, dn);
                            Console.WriteLine("Removing old object {0} from {1}", oldEmpl.SamAccountName,
                                              dirRptsGroup.SamAccountName);
                            dirRptsGroup.RemoveMember(oldEmpl);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex);
                        }
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }