public List <IdentityStoreObject> GetGroups(string container)
        {
            int          totalFound    = 0;
            SearchFilter searchFilter1 = new SearchFilter();

            searchFilter1.set_ExtensionDataCriteria(new FilterCriteria());
            FilterCriteria filterCriterium = new FilterCriteria();

            filterCriterium.set_Attribute(Helper.KnownProviderAttributes.get_Alias());
            filterCriterium.set_Operator("present");
            searchFilter1.set_ProviderCriteria(filterCriterium);
            SearchFilter searchFilter            = searchFilter1;
            Dictionary <string, bool> containers = null;

            if (!string.IsNullOrEmpty(container))
            {
                containers = new Dictionary <string, bool>()
                {
                    { container, false }
                };
            }
            ServicesSearchServiceClient searchServiceClient  = new ServicesSearchServiceClient(false);
            List <IdentityStoreObject>  identityStoreObjects = searchServiceClient.SearchEx(Helper.CurrentTask.get_IdentityStoreId(), 2, ref totalFound, searchFilter, containers, string.Empty, 1, -1, 20000, new List <string>()
            {
                Helper.KnownProviderAttributes.get_EmailAddress(),
                "IMGFirstUsed",
                "IMGLastUsed",
                "IMGUsedCount",
                "IMGLastProcessedDate"
            }, false);

            return(identityStoreObjects);
        }
 private void GetExcludedNestedGroups(List <IdentityStoreObject> expiringGroups, List <string> identities)
 {
     if ((expiringGroups == null ? false : expiringGroups.Count > 0))
     {
         List <IdentityStoreObject> smartGroups     = new List <IdentityStoreObject>();
         List <IdentityStoreObject> parentDynasties = new List <IdentityStoreObject>();
         this.FilterGroups(expiringGroups, smartGroups, 1);
         this.FilterGroups(expiringGroups, parentDynasties, 2);
         FilterCriteria nestGroupsFilterCriteria = this.PrepareNestChildsCriteria(smartGroups);
         if ((nestGroupsFilterCriteria.get_Child() == null ? false : nestGroupsFilterCriteria.get_Child().Count > 0))
         {
             SearchFilter searchFilter1 = new SearchFilter();
             searchFilter1.set_ExtensionDataCriteria(nestGroupsFilterCriteria);
             searchFilter1.set_ProviderCriteria(new FilterCriteria());
             SearchFilter searchFilter = searchFilter1;
             int          totalFound   = 0;
             ServicesSearchServiceClient searchServiceClient  = new ServicesSearchServiceClient(false);
             List <IdentityStoreObject>  expiringNestedGroups = searchServiceClient.SearchEx(Helper.CurrentTask.get_IdentityStoreId(), 2, ref totalFound, searchFilter, new Dictionary <string, bool>(), string.Empty, 1, -1, 20000, this.GetAttributesToLoad(), false);
             if ((expiringNestedGroups == null ? false : expiringNestedGroups.Count > 0))
             {
                 List <string> strs = new List <string>();
                 expiringNestedGroups.ForEach((IdentityStoreObject grp) => {
                     if (!expiringGroups.Any <IdentityStoreObject>((IdentityStoreObject expGrp) => expGrp.get_ObjectIdFromIdentityStore().Equals(grp.get_ObjectIdFromIdentityStore(), StringComparison.InvariantCultureIgnoreCase)))
                     {
                         strs.Add(grp.get_ObjectIdFromIdentityStore());
                     }
                 });
                 identities.AddRange(strs);
             }
         }
         if ((parentDynasties == null ? false : parentDynasties.Count > 0))
         {
             List <IdentityStoreObject> allLevelCurrentChildGroups = this.EnsureChildGroups(Helper.CurrentTask.get_IdentityStoreId(), new ServicesGroupServiceClient(false), parentDynasties);
             if ((allLevelCurrentChildGroups == null ? false : allLevelCurrentChildGroups.Count > 0))
             {
                 List <string> strs1 = new List <string>();
                 allLevelCurrentChildGroups.ForEach((IdentityStoreObject grp) => {
                     if (!expiringGroups.Any <IdentityStoreObject>((IdentityStoreObject expGrp) => expGrp.get_ObjectIdFromIdentityStore().Equals(grp.get_ObjectIdFromIdentityStore(), StringComparison.InvariantCultureIgnoreCase)))
                     {
                         strs1.Add(grp.get_ObjectIdFromIdentityStore());
                     }
                 });
                 identities.AddRange(strs1);
             }
         }
     }
 }
        public virtual void ExtendEligibleGroupsLife()
        {
            ServicesSearchServiceClient searchServiceClient = new ServicesSearchServiceClient(false);
            FilterCriteria            filterCriteria        = this.GetEligibleGroupsFilter();
            int                       totalFound            = 0;
            Dictionary <string, bool> containers            = null;

            if ((Helper.CurrentTask.get_Targets() == null ? false : Helper.CurrentTask.get_Targets().Count > 0))
            {
                containers = Helper.CurrentTask.get_Targets().ToDictionary <SchedulingTarget, string, bool>((SchedulingTarget target) => target.get_Target(), (SchedulingTarget target) => false);
            }
            SearchFilter searchFilter1 = new SearchFilter();

            searchFilter1.set_ExtensionDataCriteria(filterCriteria);
            searchFilter1.set_ProviderCriteria(new FilterCriteria());
            SearchFilter searchFilter = searchFilter1;
            List <IdentityStoreObject> groupsToExtend = searchServiceClient.SearchEx(Helper.CurrentTask.get_IdentityStoreId(), 2, ref totalFound, searchFilter, containers, string.Empty, 1, -1, 20000, this.GetAttributesToLoad(), false);

            try
            {
                List <IdentityStoreObject> groupsOld          = DeepCopyExtensionMethods.DeepCopy <List <IdentityStoreObject> >(groupsToExtend);
                List <string> reducedGroupsToNotify           = new List <string>();
                List <IdentityStoreObject> groupsToUpdate     = this.PrepareGroupsForExtensions(groupsToExtend, ref reducedGroupsToNotify);
                ServicesGroupServiceClient groupServiceClient = new ServicesGroupServiceClient(false);
                List <IdentityStoreObject> groupsToUpdate1    = this.CloneObjectsForUpdate(new List <string>()
                {
                    "XGroupExpirationPolicy",
                    "XGroupExpirationDate"
                }, groupsToUpdate, groupsOld);
                if ((groupsToUpdate1 == null ? false : groupsToUpdate1.Any <IdentityStoreObject>()))
                {
                    string       compressedString = DataCompressionHelper.CompressObjects <List <IdentityStoreObject> >(groupsToUpdate1);
                    ActionResult result           = groupServiceClient.UpdateManyWithCompression(Helper.CurrentTask.get_IdentityStoreId(), compressedString, typeof(IdentityStoreObject).FullName);
                    this.LogResults(result, "ExtendEligibleGroupsLife");
                }
                if (reducedGroupsToNotify.Count > 0)
                {
                    groupServiceClient.SendGlmNotification(Helper.CurrentTask.get_IdentityStoreId(), 37, reducedGroupsToNotify);
                }
            }
            catch (Exception exception)
            {
                Exception Ex = exception;
                LogExtension.LogException(GroupsProcessor.logger, string.Format("An error ocurred while expiring groups: {0}", Ex.Message), Ex);
            }
        }
        private List <MessagingProviderLog> GetGroupUsage(DateTime?fromDate, DateTime toDate)
        {
            ServicesSearchServiceClient searchServiceClient    = new ServicesSearchServiceClient(false);
            List <MessagingProviderLog> messagingProvidersLogs = new List <MessagingProviderLog>();

            if (Helper.CurrentTask.get_IncludeAllMessageSystems().GetValueOrDefault())
            {
                messagingProvidersLogs = searchServiceClient.GetMessagingProviderLog(Helper.CurrentTask.get_IdentityStoreId(), new List <string>(), true, fromDate, toDate);
            }
            else if ((Helper.CurrentTask.get_MessagingSystems() == null ? false : Helper.CurrentTask.get_MessagingSystems().Count > 0))
            {
                List <string> strs = new List <string>();
                Helper.CurrentTask.get_MessagingSystems().ForEach((SchedulingMessagingSystems server) => strs.Add(server.get_DisplayName()));
                messagingProvidersLogs = searchServiceClient.GetMessagingProviderLog(Helper.CurrentTask.get_IdentityStoreId(), strs, false, fromDate, toDate);
            }
            return(messagingProvidersLogs);
        }
        public virtual void SendNotificationToExpiringGroups()
        {
            int totalFound = 0;
            ServicesSearchServiceClient searchServiceClient = new ServicesSearchServiceClient(false);
            FilterCriteria            filterCriteria        = this.GetCriteriaForExpiringNotification();
            Dictionary <string, bool> containers            = null;

            if ((Helper.CurrentTask.get_Targets() == null ? false : Helper.CurrentTask.get_Targets().Count > 0))
            {
                containers = Helper.CurrentTask.get_Targets().ToDictionary <SchedulingTarget, string, bool>((SchedulingTarget target) => target.get_Target(), (SchedulingTarget target) => true);
            }
            SearchFilter searchFilter1 = new SearchFilter();

            searchFilter1.set_ExtensionDataCriteria(filterCriteria);
            searchFilter1.set_ProviderCriteria(new FilterCriteria());
            SearchFilter searchFilter = searchFilter1;
            List <IdentityStoreObject> expiringGroups = searchServiceClient.SearchEx(Helper.CurrentTask.get_IdentityStoreId(), 2, ref totalFound, searchFilter, containers, string.Empty, 1, -1, 20000, this.GetAttributesToLoad(), false);

            this.GetExcludedNestedGroups(expiringGroups);
            this.NotifyTheExpiringGroups(expiringGroups);
        }
 public void ProcessJob(TaskScheduling task)
 {
     try
     {
         ServicesAdministrationServiceClient adminClient  = new ServicesAdministrationServiceClient(true);
         ServicesSearchServiceClient         searchClient = new ServicesSearchServiceClient(false);
         IdentityStore   store                   = adminClient.GetIdentityStoreById(task.get_IdentityStoreId(), true);
         KnownAttributes knownAttributes         = searchClient.GetKnownAttributes(task.get_IdentityStoreId());
         List <PermissionAnalyzerServer> servers = new List <PermissionAnalyzerServer>();
         Dictionary <string, Dictionary <int, string> > configurations = this.LoadConfigurations(store, adminClient, servers, knownAttributes);
         List <Schema> schema = adminClient.GetIdentityStoreSchema(task.get_IdentityStoreId());
         if (servers.Count > 0)
         {
             (new Imanami.PermissionReplicationService.PermissionReplicationService(store, configurations, schema, knownAttributes)).ReplicatePermissions(1, servers);
         }
     }
     catch (Exception exception)
     {
         LogExtension.LogException(PermissionAnalyzer.logger, "Error While Replicating Permissions.", exception);
     }
     PermissionAnalyzer.logger.InfoFormat("Job processed successfully.", Array.Empty <object>());
 }
 public virtual void DeleteTheExpiredGroupsWhichAreDueForDeletion()
 {
     if (Helper.AppConfiguration.get_ShouldDeleteExpiredGroups())
     {
         if (Helper.AppConfiguration.get_DeletionDaysAfterExpiry() >= 1)
         {
             ServicesSearchServiceClient searchServiceClient = new ServicesSearchServiceClient(false);
             FilterCriteria            filterCriteria        = this.GetExpiredGroupsFilter();
             int                       totalFound            = 0;
             Dictionary <string, bool> containers            = null;
             if ((Helper.CurrentTask.get_Targets() == null ? false : Helper.CurrentTask.get_Targets().Count > 0))
             {
                 containers = Helper.CurrentTask.get_Targets().ToDictionary <SchedulingTarget, string, bool>((SchedulingTarget target) => target.get_Target(), (SchedulingTarget target) => false);
             }
             SearchFilter searchFilter1 = new SearchFilter();
             searchFilter1.set_ExtensionDataCriteria(filterCriteria);
             searchFilter1.set_ProviderCriteria(new FilterCriteria());
             SearchFilter searchFilter = searchFilter1;
             List <IdentityStoreObject> groupsToDelete = searchServiceClient.SearchEx(Helper.CurrentTask.get_IdentityStoreId(), 2, ref totalFound, searchFilter, containers, string.Empty, 1, -1, 20000, this.GetAttributesToLoad(), false);
             this.DeleteExpiredGroups(groupsToDelete);
         }
     }
 }
Esempio n. 8
0
        public void ProcessJob(long jobId)
        {
            TaskScheduling task = (new ServicesSchedulingServiceClient(true)).GetScheduledJob(jobId);

            Console.WriteLine(string.Concat("Task ", task.get_TaskSchedulerJobName(), " obtained using scheduling client."));
            Console.WriteLine(string.Format("Job ID: {0}", jobId));
            Imanami.GroupID.TaskScheduler.Helper.CurrentTask = task;
            if (Imanami.GroupID.TaskScheduler.Helper.CurrentTask != null)
            {
                if ((Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_JobType() == 6 || !Imanami.GroupID.TaskScheduler.Helper.IsSystemSecurityContext || Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_JobType() == 8 ? false : Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_JobType() != 13))
                {
                    string exMsg = string.Format("Unable to proceed. Authentication information has been expired for job {0} - {1}.", task.get_JobId(), task.get_Name());
                    Console.WriteLine(string.Concat("Throwing exception: ", exMsg));
                    throw new Exception(exMsg);
                }
                ServicesSearchServiceClient configurationService = new ServicesSearchServiceClient(false);
                Imanami.GroupID.TaskScheduler.Helper.AppConfiguration = configurationService.GetAppConfiguration(Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_IdentityStoreId());
                if (Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_JobType() != 6)
                {
                    Imanami.GroupID.TaskScheduler.Helper.KnownProviderAttributes = configurationService.GetKnownAttributes(Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_IdentityStoreId());
                }
                Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_JobId(), Imanami.GroupID.TaskScheduler.Helper.CurrentTask.get_JobName());
                if (task.get_JobType() == 9)
                {
                    IUserLifeCycleJob userLifeCycleProcessor = Imanami.GroupID.UserLifeCycleManagment.Helpers.Helper.GetUserLifeCycleJobProcessor();
                    Imanami.GroupID.UserLifeCycleManagment.Helpers.Helper.set_KnownProviderAttributes(Imanami.GroupID.TaskScheduler.Helper.KnownProviderAttributes);
                    userLifeCycleProcessor.Process(task);
                }
                else if (task.get_JobType() == 1)
                {
                    Console.WriteLine(string.Format("Job type is {0}", task.get_JobType()));
                    SmartGroupJobProcessor processor = new SmartGroupJobProcessor();
                    Console.WriteLine("Ready to process smart group job");
                    processor.ProcessSmartGroupUpdate(task);
                }
                else if (task.get_JobType() == 5)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    MembershipJob.RunMembershipLifeCycle(task.get_IdentityStoreId());
                }
                else if (task.get_JobType() == 11)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    ManagedByJobs.RunManagedByLifeCycle(task.get_IdentityStoreId());
                }
                else if (task.get_JobType() == 4)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new Imanami.GroupID.TaskScheduler.Glm.JobProcessor()).ProcessJob(task);
                }
                else if (task.get_JobType() == 6)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new SchemaReplicationProcessor()).ProcessJob(task);
                }
                else if (task.get_JobType() == 7)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new Imanami.GroupID.TaskScheduler.GUS.JobProcessor()).ProcessGroupUsage();
                }
                else if (task.get_JobType() == 8)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new ServicesSchedulingServiceClient(false)).HistoryRetention(task);
                }
                else if (task.get_JobType() == 10)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new OrphanGroupProcessor()).ProcessJob(task);
                }
                else if (task.get_JobType() == 12)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new WorkflowApproverAccelerationProcessor()).ProcessJob(task);
                }
                else if (task.get_JobType() == 13)
                {
                    Imanami.GroupID.TaskScheduler.JobProcessor.logger.InfoFormat("Processing job: {0}, Name: {1}", task.get_JobId(), task.get_JobName());
                    (new PermissionAnalyzer()).ProcessJob(task);
                }
            }
        }
        private List <IdentityStoreObject> GetOrphanGroups(List <string> attributesToLoad)
        {
            int totalFound = 0;
            List <IdentityStoreObject> owners = new List <IdentityStoreObject>();

            try
            {
                if (attributesToLoad == null)
                {
                    attributesToLoad = new List <string>();
                }
                if (!attributesToLoad.Contains("XAdditionalOwner"))
                {
                    attributesToLoad.Add("XAdditionalOwner");
                }
                if (!attributesToLoad.Contains(Helper.KnownProviderAttributes.get_DistinguishedName()))
                {
                    attributesToLoad.Add(Helper.KnownProviderAttributes.get_DistinguishedName());
                }
                if (!attributesToLoad.Contains(Helper.KnownProviderAttributes.get_Owner()))
                {
                    attributesToLoad.Add(Helper.KnownProviderAttributes.get_Owner());
                }
                FilterCriteria filterCriterium = new FilterCriteria();
                filterCriterium.set_Operator("and");
                filterCriterium.set_Child(new List <FilterCriteria>());
                FilterCriteria        filter           = filterCriterium;
                List <FilterCriteria> child            = filter.get_Child();
                FilterCriteria        filterCriterium1 = new FilterCriteria();
                filterCriterium1.set_Attribute(Helper.KnownProviderAttributes.get_Owner());
                filterCriterium1.set_Operator("not present");
                child.Add(filterCriterium1);
                FilterCriteria filterCriterium2 = new FilterCriteria();
                filterCriterium2.set_Operator("and");
                filterCriterium2.set_Child(new List <FilterCriteria>());
                FilterCriteria masterFilter = filterCriterium2;
                masterFilter.get_Child().Add(filter);
                List <FilterCriteria> filterCriterias  = masterFilter.get_Child();
                FilterCriteria        filterCriterium3 = new FilterCriteria();
                filterCriterium3.set_Attribute(Helper.KnownProviderAttributes.get_GroupType());
                filterCriterium3.set_Operator("is not");
                filterCriterium3.set_Value(Helper.KnownProviderAttributes.get_GroupTypeLocalSecurity_Builtin());
                filterCriterias.Add(filterCriterium3);
                FilterCriteria filterCriterium4 = new FilterCriteria();
                filterCriterium4.set_Operator("or");
                filterCriterium4.set_Child(new List <FilterCriteria>());
                FilterCriteria        childCriteria1   = filterCriterium4;
                List <FilterCriteria> child1           = childCriteria1.get_Child();
                FilterCriteria        filterCriterium5 = new FilterCriteria();
                filterCriterium5.set_Attribute(Helper.KnownProviderAttributes.get_IsCriticalSystemObject());
                filterCriterium5.set_Operator("is exactly");
                filterCriterium5.set_Value("FALSE");
                filterCriterium5.set_ValueType(5);
                child1.Add(filterCriterium5);
                List <FilterCriteria> filterCriterias1 = childCriteria1.get_Child();
                FilterCriteria        filterCriterium6 = new FilterCriteria();
                filterCriterium6.set_Attribute(Helper.KnownProviderAttributes.get_IsCriticalSystemObject());
                filterCriterium6.set_Operator("not present");
                filterCriterium6.set_Value(string.Empty);
                filterCriterium6.set_ValueType(5);
                filterCriterias1.Add(filterCriterium6);
                masterFilter.get_Child().Add(childCriteria1);
                FilterCriteria filterCriterium7 = new FilterCriteria();
                filterCriterium7.set_Operator("and");
                filterCriterium7.set_Child(new List <FilterCriteria>());
                FilterCriteria        extDataFilter    = filterCriterium7;
                List <FilterCriteria> child2           = extDataFilter.get_Child();
                FilterCriteria        filterCriterium8 = new FilterCriteria();
                filterCriterium8.set_Attribute("IMGIsExpired");
                filterCriterium8.set_Operator("is exactly");
                filterCriterium8.set_Value("false");
                filterCriterium8.set_ValueType(5);
                child2.Add(filterCriterium8);
                List <FilterCriteria> filterCriterias2 = extDataFilter.get_Child();
                FilterCriteria        filterCriterium9 = new FilterCriteria();
                filterCriterium9.set_Attribute("IMGIsDeleted");
                filterCriterium9.set_Operator("is exactly");
                filterCriterium9.set_Value("false");
                filterCriterium9.set_ValueType(5);
                filterCriterias2.Add(filterCriterium9);
                List <FilterCriteria> child3            = extDataFilter.get_Child();
                FilterCriteria        filterCriterium10 = new FilterCriteria();
                filterCriterium10.set_Attribute("XAdditionalOwner");
                filterCriterium10.set_Operator("present");
                child3.Add(filterCriterium10);
                SearchFilter sFilter = new SearchFilter(extDataFilter, masterFilter);
                sFilter.set_MergeCriteriaWithOrOperator(false);
                Dictionary <string, bool> containers = null;
                if ((Helper.CurrentTask.get_Targets() == null ? false : Helper.CurrentTask.get_Targets().Count > 0))
                {
                    containers = Helper.CurrentTask.get_Targets().ToDictionary <SchedulingTarget, string, bool>((SchedulingTarget target) => target.get_Target(), (SchedulingTarget target) => false);
                }
                ServicesSearchServiceClient searchServiceClient = new ServicesSearchServiceClient(false);
                owners = searchServiceClient.SearchEx(Helper.CurrentTask.get_IdentityStoreId(), 2, ref totalFound, sFilter, containers, string.Empty, 1, -1, 20000, attributesToLoad, false);
                owners = this.ExcludeSpecialGroups(owners);
            }
            catch (Exception exception)
            {
                Exception ex = exception;
                OrphanGroupProcessor.logger.Error(1022, 10294, ex.Message, ex, new object[0]);
            }
            return(owners);
        }