private TeamFoundationIdentity ResolveIdentityInternal(
     string id,
     MembershipQuery queryMembership,
     ReadIdentityOptions readIdentityOptions,
     IdentitySearchFactor searchFactor)
 {
     id = id.Trim();
     try
     {
         TeamFoundationIdentity resolvedId = m_identityManagement.ReadIdentity(searchFactor, id, queryMembership, readIdentityOptions);
         if (null == resolvedId)
         {
             resolvedId = ADSearchAssistResolveIdentityInternal(id, queryMembership, readIdentityOptions);
         }
         return(resolvedId);
     }
     catch (System.NotSupportedException notSupportedEx)
     {
         if (notSupportedEx.Message.Contains(searchFactor.ToString()) &&
             searchFactor == IdentitySearchFactor.DisplayName)
         {
             return(ADSearchAssistResolveIdentityInternal(id, queryMembership, readIdentityOptions));
         }
         else
         {
             throw;
         }
     }
 }
        private TeamFoundationIdentity ResolveIdentity(
            string id,
            MembershipQuery queryMembership,
            ReadIdentityOptions readIdentityOptions,
            IdentitySearchFactor searchFactor)
        {
            TraceManager.TraceInformation("Resolving Identity: {0}", id);
            TeamFoundationIdentity i = ResolveIdentityInternal(id, queryMembership, readIdentityOptions, searchFactor);

            if (i == null)
            {
                throw new IdentityUnresolvedException(
                          string.Format("Identity '{0}' cannot be resolved", id ?? string.Empty));
            }

            IdentityType type = Identity.GetType(i.Descriptor.IdentityType, i.IsContainer);

            if (type == IdentityType.InvalidIdentity)
            {
                throw new IdentityUnresolvedException(
                          string.Format("Searching '{0}' returned invalid identity.", id ?? string.Empty));
            }

            return(i);
        }
        private TeamFoundationIdentity ADSearchAssistResolveIdentityInternal(
            string id,
            MembershipQuery queryMembership,
            ReadIdentityOptions readIdentityOptions)
        {
            /*
             * obsoleting the usage of m_userIdCache to by-pass the TFS user idenitity scalability issue
             *
             * if (null == m_userIdCache)
             * {
             *  return null;
             * }
             * string accountName = m_userIdCache.FindAccountName(id);
             *
             */
            string accountName = ADUserSearcher.GetAccountName(id);

            if (string.IsNullOrEmpty(accountName))
            {
                return(null);
            }
            else
            {
                return(m_identityManagement.ReadIdentity(IdentitySearchFactor.AccountName, accountName, queryMembership, readIdentityOptions));
            }
        }
        public IEnumerable <KeyValuePair <string, IEnumerable <ITeamFoundationIdentity> > > ReadIdentities(
            IdentitySearchFactor searchFactor,
            IEnumerable <string> searchFactorValues,
            MembershipQuery queryMembership)
        {
            if (searchFactorValues == null)
            {
                throw new ArgumentNullException(nameof(searchFactorValues));
            }

            var searchFactorArray = searchFactorValues.ToArray();
            var factor            = (Microsoft.TeamFoundation.Framework.Common.IdentitySearchFactor)searchFactor;
            var identities        = _identityManagementService2.ReadIdentities(
                factor,
                searchFactorArray,
                (Microsoft.TeamFoundation.Framework.Common.MembershipQuery)queryMembership,
                ReadIdentityOptions.IncludeReadFromSource);

            if (searchFactorArray.Length != identities.Length)
            {
                throw new IndexOutOfRangeException(
                          "A call to IIdentityManagementService2.ReadIdentities resulted in a return set where there was not a one to one mapping between search terms and search results. This is unexpected behavior and execution cannot continue. Please check if the underlying service implementation has changed and update the consuming code as appropriate.");
            }

            for (var i = 0; i < searchFactorArray.Length; i++)
            {
                // TODO: Use configuration options from IWorkItemStore to control proxy creation
                var proxiedIdentities = identities[i].Select(id => id.AsProxy());
                yield return(new KeyValuePair <string, IEnumerable <ITeamFoundationIdentity> >(searchFactorArray[i], proxiedIdentities));
            }
        }
        public ITeamFoundationIdentity ReadIdentity(
            IdentitySearchFactor searchFactor,
            string searchFactorValue,
            MembershipQuery queryMembership)
        {
            if (string.IsNullOrEmpty(searchFactorValue))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(searchFactorValue));
            }

            // TODO: Use configuration options from IWorkItemStore to control proxy creation
            return(_identityManagementService2.ReadIdentity(
                       (Microsoft.TeamFoundation.Framework.Common.IdentitySearchFactor)searchFactor,
                       searchFactorValue,
                       (Microsoft.TeamFoundation.Framework.Common.MembershipQuery)queryMembership,
                       ReadIdentityOptions.IncludeReadFromSource)
                   .AsProxy());
        }
        public IEnumerable <KeyValuePair <string, IEnumerable <ITeamFoundationIdentity> > > ReadIdentities(
            IdentitySearchFactor searchFactor,
            IEnumerable <string> searchFactorValues,
            MembershipQuery queryMembership)
        {
            Trace.TraceInformation($"Searching for {searchFactor}: {string.Join(", ", searchFactorValues)}");

            switch (searchFactor)
            {
            // Alternate login username
            case IdentitySearchFactor.Alias:
                foreach (var keyValuePair in SearchByAlias(searchFactorValues))
                {
                    yield return(keyValuePair);
                }
                break;

            // Windows NT account name: domain\alias or [email protected]
            case IdentitySearchFactor.AccountName:
                foreach (var keyValuePair1 in SearchByAccountName(searchFactorValues))
                {
                    yield return(keyValuePair1);
                }
                break;

            // Display name
            case IdentitySearchFactor.DisplayName:
                foreach (var keyValuePair2 in SearchByDisplayName(searchFactorValues))
                {
                    yield return(keyValuePair2);
                }
                break;

            case IdentitySearchFactor.AdministratorsGroup:
            case IdentitySearchFactor.Identifier:
            case IdentitySearchFactor.MailAddress:
            case IdentitySearchFactor.General:
                throw new NotSupportedException();
            }
        }
        public IEnumerable <ITeamFoundationIdentity> ReadIdentities(
            IEnumerable <IIdentityDescriptor> descriptors,
            MembershipQuery queryMembership)
        {
            if (descriptors == null)
            {
                throw new ArgumentNullException(nameof(descriptors));
            }

            var rawDescriptors = descriptors.Select(
                descriptor => new Microsoft.TeamFoundation.Framework.Client.IdentityDescriptor(
                    descriptor.IdentityType,
                    descriptor.Identifier))
                                 .ToArray();

            var identities =
                _identityManagementService2.ReadIdentities(
                    rawDescriptors,
                    (Microsoft.TeamFoundation.Framework.Common.MembershipQuery)queryMembership,
                    ReadIdentityOptions.IncludeReadFromSource);

            // TODO: Use configuration options from IWorkItemStore to control proxy creation
            return(identities.Select(identity => identity?.AsProxy()));
        }
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(MembershipQuery obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
 public TeamFoundationIdentity ReadIdentity(IdentitySearchFactor searchFactor, string searchFactorValue,
                                            MembershipQuery queryMembership, ReadIdentityOptions readOptions)
 {
     throw new NotImplementedException();
 }
 public TeamFoundationIdentity[][] ReadIdentities(TeamFoundation.Framework.Common.IdentitySearchFactor searchFactor, string[] searchFactorValues,
                                                  MembershipQuery queryMembership, ReadIdentityOptions readOptions)
 {
     return(new [] { GetNullIdentities() });
 }
 public TeamFoundationIdentity[] ReadIdentities(Guid[] teamFoundationIds, MembershipQuery queryMembership)
 {
     throw new NotImplementedException();
 }
 public TeamFoundationIdentity ReadIdentity(IdentityDescriptor descriptor, MembershipQuery queryMembership,
                                            ReadIdentityOptions readOptions)
 {
     throw new NotImplementedException();
 }
 public TeamFoundationIdentity[][] ReadIdentities(TeamFoundation.Framework.Common.IdentitySearchFactor searchFactor, string[] searchFactorValues,
                                                  MembershipQuery queryMembership, ReadIdentityOptions readOptions, IEnumerable <string> propertyNameFilters,
                                                  IdentityPropertyScope propertyScope)
 {
     throw new NotImplementedException();
 }
 public TeamFoundationIdentity ReadIdentity(IdentitySearchFactor searchFactor, string searchFactorValue,
                                            MembershipQuery queryMembership, ReadIdentityOptions readOptions, IEnumerable <string> propertyNameFilters,
                                            IdentityPropertyScope propertyScope)
 {
     throw new NotImplementedException();
 }
 public TeamFoundationIdentity[] ReadIdentities(IdentityDescriptor[] descriptors, MembershipQuery queryMembership,
                                                ReadIdentityOptions readOptions)
 {
     return(GetNullIdentities());
 }
 /// <inheritdoc />
 public ITeamFoundationIdentity ReadIdentity(IdentitySearchFactor searchFactor, string searchFactorValue, MembershipQuery queryMembership)
 {
     return(ReadIdentities(searchFactor, new[] { searchFactorValue }, queryMembership).First().Value.SingleOrDefault());
 }
 public TeamFoundationIdentity[] ReadIdentities(IdentityDescriptor[] descriptors, MembershipQuery queryMembership,
                                                ReadIdentityOptions readOptions, IEnumerable <string> propertyNameFilters, IdentityPropertyScope propertyScope)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        ///     Read identities for given descriptors.
        /// </summary>
        /// <param name="descriptors">
        ///     Collection of <see cref="IIdentityDescriptor" />
        /// </param>
        /// <param name="queryMembership"></param>
        /// <returns>
        ///     An array of <see cref="ITeamFoundationIdentity" />, corresponding 1 to 1 with input descriptor array.
        /// </returns>
        public IEnumerable <ITeamFoundationIdentity> ReadIdentities(IEnumerable <IIdentityDescriptor> descriptors, MembershipQuery queryMembership)
        {
            foreach (var descriptor in descriptors)
            {
                var success = _descriptorMappings.TryGetValue(descriptor, out ITeamFoundationIdentity identity);

                Trace.TraceInformation($"{nameof(MockIdentityManagementService)}: Searching for {descriptor}; Success: {success}");

                yield return(identity);
            }
        }