Пример #1
0
        public async Task GetGroupMembersAsync(GroupMemberCollection memberCollection, Guid groupId)
        {
            await AssureGraphClient();

            try
            {
                var members = await _graphClient.Groups[groupId.ToString()].Members.Request().GetAsync();
                do
                {
                    foreach (var member in members)
                    {
                        if (member is User u)
                        {
                            memberCollection.Add(new GroupMember(Guid.Parse(u.Id), u.UserPrincipalName, GroupMemberTypes.AzureAd));
                        }
                        else
                        {
                            memberCollection.Add(new GroupMember(Guid.Parse(member.Id), member.Id, GroupMemberTypes.AzureAd));
                        }
                    }
                }while (members.NextPageRequest != null && (members = await members.NextPageRequest.GetAsync()).Count > 0);
            }
            catch (ServiceException ex)
            {
                if (IsNotFoundError(ex))
                {
                    throw GroupNotFoundException.Create(groupId, ex);
                }
                throw;
            }
        }
        public void TestAddCollection()
        {
            GroupMemberCollection collection1 = new GroupMemberCollection();
            GroupMemberCollection collection2 = new GroupMemberCollection();

            collection1.Add(azureMember1);
            collection2.Add(azureMember2);
            collection1.Add(collection2);
            Assert.Equal(2, collection1.Count);
        }
        public void TestExceptWith()
        {
            GroupMemberCollection collection1 = new GroupMemberCollection();
            GroupMemberCollection collection2 = new GroupMemberCollection();

            collection1.Add(azureMember1);
            collection1.Add(azureMember2);
            collection2.Add(azureMember2);
            collection1.ExceptWith(collection2);
            Assert.Equal(1, collection1.Count);
            Exception exception = Record.Exception(() => collection1.AsEnumerable().First(m => m.Id == azureMember1.Id));

            Assert.Null(exception);
        }
Пример #4
0
        private async Task GetMembersAsync(string storedProcedure, GroupMemberTypes memberType, GroupMemberCollection memberCollection, IDictionary <string, object> parameters)
        {
            using (var conn = new SqlConnection(_connectionString))
            {
                await conn.OpenAsync();

                using (var cmd = new SqlCommand())
                {
                    cmd.Connection  = conn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = storedProcedure;
                    // Something makes queries that normally takes seconds to sometimes time out
                    // This is a workaround until I can find the root cause.
                    cmd.CommandTimeout = 300;
                    cmd.AddParameters(parameters);
                    using (var reader = await cmd.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            if (memberType == GroupMemberTypes.OnPremAd)
                            {
                                Guid id = reader.GetNullable <Guid>(1);
                                if (id != Guid.Empty)
                                {
                                    memberCollection.Add(new GroupMember(
                                                             id: id,
                                                             displayName: reader.GetNullable <string>(0),
                                                             memberType: GroupMemberTypes.OnPremAd
                                                             ));
                                }
                            }
                            else
                            {
                                Guid id = reader.GetNullable <Guid>(2);
                                if (id != Guid.Empty)
                                {
                                    memberCollection.Add(new GroupMember(
                                                             id: id,
                                                             displayName: reader.GetNullable <string>(0),
                                                             memberType: GroupMemberTypes.AzureAd
                                                             ));
                                }
                            }
                        }
                    }
                }
            }
        }
        public void TestCountOne()
        {
            GroupMemberCollection collection = new GroupMemberCollection();

            collection.Add(azureMember1);
            Assert.Equal(1, collection.Count);
        }
Пример #6
0
        public async Task GetGroupMembersAsync(GroupMemberCollection memberCollection, Guid groupId)
        {
            string command = $"Get-DistributionGroupMember -Identity '{groupId.ToString()}' -ErrorAction 'Stop'";
            Collection <PSObject> result;

            try
            {
                result = InvokeCommand(command);
            }
            catch (RemoteException ex)
            {
                if (IsNotFoundError(ex))
                {
                    Exception notFoundException = CreateNotFoundException(groupId, null, ex);
                    if (notFoundException != null)
                    {
                        throw notFoundException;
                    }
                }
                throw;
            }
            if (result != null)
            {
                foreach (var member in result)
                {
                    memberCollection.Add(new GroupMember(
                                             id: (string)member.Properties["ExternalDirectoryObjectId"].Value,
                                             displayName: (string)member.Properties["PrimarySmtpAddress"].Value,
                                             memberType: GroupMemberTypes.AzureAd
                                             ));
                }
            }
            await Task.FromResult(0);
        }
Пример #7
0
 private void QueryGroupMembers(GroupMemberCollection memberCollection, string ldapFilter, string searchBase)
 {
     if (ldapFilter == null)
     {
         throw new ArgumentNullException(nameof(ldapFilter));
     }
     using (DirectoryEntry searchRoot = GetDirectoryEntry(searchBase))
         using (DirectorySearcher directorySearcher = new DirectorySearcher(searchRoot, ldapFilter, new string[] { "objectGUID", "userPrincipalName" }))
         {
             directorySearcher.PageSize = 1000;
             SearchResultCollection result = directorySearcher.FindAll();
             foreach (SearchResult item in result)
             {
                 Guid   identity = new Guid((byte[])item.Properties["objectGuid"][0]);
                 string displayName;
                 if (item.Properties["userPrincipalName"].Count == 1)
                 {
                     displayName = (string)item.Properties["userPrincipalName"][0];
                 }
                 else
                 {
                     displayName = identity.ToString();
                 }
                 memberCollection.Add(new GroupMember(identity, displayName, GroupMemberTypes.OnPremAd));
             }
         }
 }
        public void TestAddMember()
        {
            GroupMemberCollection collection = new GroupMemberCollection();

            collection.Add(azureMember1);
            GroupMember member = collection.AsEnumerable().First();

            Assert.Equal(azureMember1.Id, member.Id);
        }
Пример #9
0
        private async Task <GroupMemberCollection> GetTargetMembersAsync(GrouperDocument document, GroupMemberCollection currentMembers)
        {
            var include = new GroupMemberCollection();
            var exclude = new GroupMemberCollection();

            if (!(document.Members.Any(m => m.Action == GroupMemberActions.Include)))
            {
                include.Add(currentMembers);
            }
            foreach (GrouperDocumentMember member in document.Members)
            {
                var           memberCollection = member.Action == GroupMemberActions.Exclude ? exclude : include;
                IMemberSource source           = GetMemberSource(member);
                await source.GetMembersFromSourceAsync(memberCollection, member, document.MemberType);
            }
            include.ExceptWith(exclude);
            return(include);
        }
Пример #10
0
        public async Task GetGroupMembersAsync(GroupMemberCollection memberCollection, Guid groupId)
        {
            using (var conn = new SqlConnection(_connectionString))
            {
                await conn.OpenAsync();

                using (var cmd = new SqlCommand())
                {
                    cmd.Connection  = conn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "dbo.spOpenEGetGroupMember";
                    cmd.Parameters.AddWithValue("groupId", groupId);
                    SqlDataReader reader = null;
                    try
                    {
                        reader = await cmd.ExecuteReaderAsync();

                        while (await reader.ReadAsync())
                        {
                            memberCollection.Add(new GroupMember(
                                                     reader.GetGuid(1),
                                                     reader.GetString(2),
                                                     GroupMemberTypes.OnPremAd
                                                     ));
                        }
                    }
                    catch (SqlException e)
                    {
                        if (e.Number == 50001)
                        {
                            throw GroupNotFoundException.Create(groupId, e);
                        }
                        throw;
                    }
                    finally
                    {
                        if (reader != null)
                        {
                            reader.Dispose();
                        }
                    }
                }
            }
        }
Пример #11
0
        public void TestConstruction()
        {
            double                ratio = 0.5;
            GrouperDocument       doc   = TestHelpers.MakeDocument();
            GroupMemberCollection add   = new GroupMemberCollection();

            add.Add(new GroupMember(Guid.Empty, "M1", GroupMemberTypes.AzureAd));
            GroupMemberCollection remove = new GroupMemberCollection();

            remove.Add(new GroupMember(Guid.Empty, "M2", GroupMemberTypes.AzureAd));
            GroupMemberCollection unchanged = new GroupMemberCollection();

            unchanged.Add(new GroupMember(Guid.Empty, "M3", GroupMemberTypes.AzureAd));
            GroupMemberDiff diff = new GroupMemberDiff(doc, add, remove, unchanged, ratio);

            Assert.NotNull(diff.Add.FirstOrDefault(m => m.DisplayName == "M1"));
            Assert.NotNull(diff.Remove.FirstOrDefault(m => m.DisplayName == "M2"));
            Assert.NotNull(diff.Unchanged.FirstOrDefault(m => m.DisplayName == "M3"));
            Assert.Equal(ratio, diff.ChangeRatio);
            Assert.Equal(doc, diff.Document);
        }