private IdentityMemberships ToIdentity(TeamFoundationIdentity identity, TFIdentityCategory parentCategory)
        {
            var category = ToCategory(identity, parentCategory);

            return(new IdentityMemberships
            {
                DisplayName = identity.DisplayName,
                Category = category,
                NestedIdentities = GetNestedIdentities(identity, category)
            });
        }
        private static TFIdentityCategory ToCategory(TeamFoundationIdentity current, TFIdentityCategory parentCategory)
        {
            var name             = current.DisplayName;
            var domainGroupToken = "[TEAM FOUNDATION]\\";

            var isAccount = !current.IsContainer;

            if (isAccount)
            {
                var isBuiltInAccount = name.Contains("(TEAM FOUNDATION)") || name.Contains("Microsoft");
                if (isBuiltInAccount)
                {
                    return(TFIdentityCategory.TFAccount);
                }

                if (parentCategory == TFIdentityCategory.TFGroup)
                {
                    return(TFIdentityCategory.DirectUserAccount);
                }

                return(TFIdentityCategory.UserAccount);
            }

            var isBuiltInGroup = current.UniqueName.Contains("vstfs") && !name.StartsWith(domainGroupToken);

            if (isBuiltInGroup)
            {
                return(TFIdentityCategory.TFGroup);
            }

            var groupName            = name.Replace(domainGroupToken, string.Empty);
            var isValidResourceGroup = groupName.StartsWith("R-VSTS");

            if (isValidResourceGroup)
            {
                return(TFIdentityCategory.ResourceGroup);
            }

            var isRoleGroup = groupName.StartsWith("RCSS-") || groupName.StartsWith("IXS-");

            if (isRoleGroup)
            {
                return(TFIdentityCategory.RoleGroup);
            }

            return(TFIdentityCategory.OtherGroup);
        }
        private IdentityMemberships[] GetNestedIdentities(TeamFoundationIdentity parentIdentity, TFIdentityCategory parentCategory)
        {
            if (!parentIdentity.IsContainer)
            {
                return(new IdentityMemberships[0]);
            }

            var nestedIdentities = _facade
                                   .GetIdentities(parentIdentity.Members)
                                   .Select(identity => ToIdentity(identity, parentCategory))
                                   .ToArray();

            return(nestedIdentities);
        }