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); } } }
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); }