Beispiel #1
0
        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);
        }
Beispiel #7
0
        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));
        }