diff --git a/src/Core/Models/Entry.cs b/src/Core/Models/Entry.cs index 54fa8206..a66a2812 100644 --- a/src/Core/Models/Entry.cs +++ b/src/Core/Models/Entry.cs @@ -18,11 +18,11 @@ namespace Bit.Core.Models public string Name { get; set; } public HashSet Members { get; set; } = new HashSet(); public List GroupMembers { get; set; } = new List(); - public List UserMembers { get; set; } = new List(); } public class UserEntry : Entry { public string Email { get; set; } + public List Groups { get; set; } = new List(); } } diff --git a/src/Core/Utilities/Sync.cs b/src/Core/Utilities/Sync.cs index cf2c83c5..f0a7f1d3 100644 --- a/src/Core/Utilities/Sync.cs +++ b/src/Core/Utilities/Sync.cs @@ -168,12 +168,12 @@ namespace Bit.Core.Utilities users = await SyncUsersAsync(); } - AssociateMembers(ref groups, ref users); + AssociateGroups(groups, users); } - private static void AssociateMembers(ref List groups, ref List users) + private static void AssociateGroups(List groups, List users) { - if(groups == null) + if(groups == null || !groups.Any()) { return; } @@ -186,12 +186,16 @@ namespace Bit.Core.Utilities if(users != null) { - group.UserMembers = users.Where(u => group.Members.Contains(u.DistinguishedName)).ToList(); + var usersInThisGroup = users.Where(u => group.Members.Contains(u.DistinguishedName)).ToList(); + foreach(var user in usersInThisGroup) + { + user.Groups.Add(group); + } } + + AssociateGroups(group.GroupMembers, users); } } - - // TODO: Handle nested group associations with recursion } private static DateTime? ParseDate(ResultPropertyCollection collection, string dateKey)