public async Task <IEnumerable <FabricPrincipal> > SearchPrincipalsAsync( string searchText, FabricIdentityEnums.PrincipalType principalType, string searchType, string tenantId = null) { switch (searchType) { case FabricIdentityConstants.SearchTypes.Wildcard: _azureQuery = new AzureWildcardQuery(); break; case FabricIdentityConstants.SearchTypes.Exact: _azureQuery = new AzureExactMatchQuery(); break; default: throw new DirectorySearchException($"{searchType} is not a valid search type"); } switch (principalType) { case FabricIdentityEnums.PrincipalType.User: return(await GetUserPrincipalsAsync(searchText, tenantId).ConfigureAwait(false)); case FabricIdentityEnums.PrincipalType.Group: return(await GetGroupPrincipalsAsync(searchText, tenantId).ConfigureAwait(false)); default: return(await GetUserAndGroupPrincipalsAsync(searchText, tenantId).ConfigureAwait(false)); } }
public string QueryText(string searchText, FabricIdentityEnums.PrincipalType principalType) { string inputText = Regex.Replace(searchText, @"\s+", " ").Trim(); switch (principalType) { case FabricIdentityEnums.PrincipalType.User: string surname = inputText; string firstNameQuery = $"or startswith(GivenName, '{inputText}')"; // Check if user inputted two names and add query condition to eliminate matching last names string[] names = inputText.Split(' '); if (names.Length > 1) { surname = names[1]; firstNameQuery = $"and startswith(GivenName, '{names[0]}')"; } return ($"startswith(DisplayName, '{inputText}') or startswith(UserPrincipalName, '{inputText}') or startswith(Surname, '{surname}') {firstNameQuery} or startswith(Mail, '{inputText}')"); case FabricIdentityEnums.PrincipalType.Group: return($"startswith(DisplayName, '{inputText}')"); default: throw new DirectorySearchException($"Query type {principalType} not supported in Azure AD."); } }
public virtual string QueryText(string searchText, FabricIdentityEnums.PrincipalType principalType) { var encodedSearchText = Encoder.LdapFilterEncode(searchText); var filter = GetFilter(encodedSearchText); var nameFilter = $"(|(sAMAccountName={filter})(givenName={filter})(sn={filter})(cn={filter})(mail={filter}))"; return(GetCategoryFilter(nameFilter, principalType)); }
protected virtual string GetCategoryFilter(string nameFilter, FabricIdentityEnums.PrincipalType principalType) { switch (principalType) { case FabricIdentityEnums.PrincipalType.User: return($"(&(objectClass=user)(objectCategory=person){nameFilter})"); case FabricIdentityEnums.PrincipalType.Group: return($"(&(objectCategory=group){nameFilter})"); default: return($"(&(|(&(objectClass=user)(objectCategory=person))(objectCategory=group)){nameFilter})"); } }
public string QueryText(string searchText, FabricIdentityEnums.PrincipalType principalType) { switch (principalType) { case FabricIdentityEnums.PrincipalType.User: return ($"DisplayName eq '{searchText}' or GivenName eq '{searchText}' or UserPrincipalName eq '{searchText}' or Surname eq '{searchText}' or Mail eq '{searchText}'"); case FabricIdentityEnums.PrincipalType.Group: return($"DisplayName eq '{searchText}'"); default: throw new DirectorySearchException($"Query type {principalType} not supported in Azure AD."); } }
public async Task <IEnumerable <FabricPrincipal> > SearchPrincipalsAsync( string searchText, FabricIdentityEnums.PrincipalType principalType, string searchType, string tenantId = null) { switch (searchType) { case FabricIdentityConstants.SearchTypes.Wildcard: _activeDirectoryQuery = new ActiveDirectoryWildcardQuery(); break; case FabricIdentityConstants.SearchTypes.Exact: _activeDirectoryQuery = new ActiveDirectoryExactMatchQuery(); break; default: throw new Exception($"{searchType} is not a valid search type"); } var ldapQuery = _activeDirectoryQuery.QueryText(searchText, principalType); var principals = await Task.Run(() => FindPrincipalsWithDirectorySearcher(ldapQuery)).ConfigureAwait(false); return(principals); }
public async Task <IEnumerable <FabricPrincipal> > SearchPrincipalsAsync(string searchText, FabricIdentityEnums.PrincipalType principalType, string searchType, string tenantId = null) { if (principalType == FabricIdentityEnums.PrincipalType.Group) { return(new List <FabricPrincipal>()); } var users = await _userStore.SearchUsersAsync(searchText, searchType); return(_mapper.Map <IEnumerable <FabricPrincipal> >(users)); }