public void TestGetAttributeFilter() { var logger = ContainerFactory.GetContainer().GetInstance <ILogger>(); var userFilterFactory = new UserFilterFactory(); var attributeFilterFactory = new AttributeFilterFactory(); var service = new ActiveDirectoryService(logger, userFilterFactory, attributeFilterFactory); var filters = new Dictionary <string, IAttributeFilter>(); var filter = service.GetAttributeFilter("ReadLdapFilter", filters); Assert.IsNotNull(filter); }
public void TestGetAttributeFilterMissing() { var logger = ContainerFactory.GetContainer().GetInstance <ILogger>(); var userFilterFactory = new UserFilterFactory(); var attributeFilterFactory = new AttributeFilterFactory(); var service = new ActiveDirectoryService(logger, userFilterFactory, attributeFilterFactory); try { var filters = new Dictionary <string, IAttributeFilter>(); service.GetAttributeFilter("Missing filter", filters); Assert.Fail(); } catch (Exception) { Assert.Pass(); } }
public void TestBuildActiveDirectoryUser() { var logger = ContainerFactory.GetContainer().GetInstance <ILogger>(); var config = ContainerFactory.GetContainer().GetInstance <IConfigurationService>().GetConfig(); var jobConfig = config.Jobs[0]; var userFilterFactory = new UserFilterFactory(); var attributeFilterFactory = new AttributeFilterFactory(); var service = new ActiveDirectoryService(logger, userFilterFactory, attributeFilterFactory); var searchResult = SearchResultFactory.Construct(new { sAMAccountName = "leetho0", manager = "Mike Gilbert", department = "development", givenName = "Thomas", sn = "Lee" }); var filters = new Dictionary <string, IAttributeFilter>(); var user = service.BuildActiveDirectoryUser(searchResult, jobConfig, filters); Assert.AreEqual(user.Attributes["sAMAccountName"], "leetho0"); }
/// <summary> /// Gets the LDAP users based on the job configuration. /// </summary> /// <param name="jobConfig">Job configuration</param> /// <returns>IEnumerable of ActiveDirectoryUser</returns> public IEnumerable <ActiveDirectoryUser> GetActiveDirectoryUsers(JobElement jobConfig) { var attribFilters = new Dictionary <string, IAttributeFilter>(); var userFilters = new List <IUserFilter> { UserFilterFactory.CreateUserFilter(ContainerRegistry.PluginNameUserCacheFilter), UserFilterFactory.CreateUserFilter(ContainerRegistry.PluginNameUserGroupFilter) }; var entry = BuildRootDirectoryEntry(jobConfig); // create the query string to find users that // are not exchange rooms Logger.Debug("Begining search for users: {0}", jobConfig.LdapQuery); var search = new DirectorySearcher(entry, jobConfig.LdapQuery); // once page size is set, all of the users that match the query will // be return a page at a time. The DirectorySearcher handles the // return trips to the server to fetch the next page. search.PageSize = 1000; // setting this value to true tell the seacher to return // deleted entries search.Tombstone = true; var propertyNames = GetPropertyNamesForJob(jobConfig.Attributes); search.PropertiesToLoad.AddRange(propertyNames); using (var results = search.FindAll()) { foreach (SearchResult result in results) { var user = BuildActiveDirectoryUser(result, jobConfig, attribFilters); string userName = null; if (Logger.IsDebugEnabled) { userName = $"{user.Attributes["givenName"]} {user.Attributes["sn"]} ({user.Attributes["sAMAccountName"]})"; } foreach (var filter in userFilters) { user = filter.Execute(user, jobConfig); if (user == null) { break; } } if (user != null) { Logger.Debug("{0} needs to be processed.", userName); yield return(user); } else { Logger.Debug("{0} did not meet the filter criteria or has not changed", userName); } } } attribFilters.Values.ToList().ForEach(f => (f as IDisposable)?.Dispose()); attribFilters.Clear(); userFilters.ForEach(f => (f as IDisposable)?.Dispose()); userFilters.Clear(); }