diff --git a/src/Core/Services/AzureDirectoryService.cs b/src/Core/Services/AzureDirectoryService.cs index 393133c4..85ecab8b 100644 --- a/src/Core/Services/AzureDirectoryService.cs +++ b/src/Core/Services/AzureDirectoryService.cs @@ -57,13 +57,20 @@ namespace Bit.Core.Services List groups = null; if(SettingsService.Instance.Sync.SyncGroups) { - groups = await GetGroupsAsync(force || (users?.Any(u => !u.Deleted && !u.Disabled) ?? false)); + var filter = CreateSetFromFilter(SettingsService.Instance.Sync.GroupFilter); + groups = await GetGroupsAsync(force || (users?.Any(u => !u.Deleted && !u.Disabled) ?? false), filter); + + if(filter != null && users != null) + { + users = users.Where(u => u.Disabled || u.Deleted || + groups.Any(g => g.UserMemberExternalIds.Contains(u.ExternalId))).ToList(); + } } return new Tuple, List>(groups, users); } - private async static Task> GetGroupsAsync(bool force = false) + private async static Task> GetGroupsAsync(bool force, Tuple> filter) { if(!SettingsService.Instance.Sync.SyncGroups) { @@ -88,7 +95,6 @@ namespace Bit.Core.Services var entries = new List(); var changedGroupIds = new List(); var getFullResults = SettingsService.Instance.GroupDeltaToken == null || force; - var filter = CreateSetFromFilter(SettingsService.Instance.Sync.GroupFilter); try { @@ -140,7 +146,7 @@ namespace Bit.Core.Services } catch { } - if(getFullResults || (!getFullResults && !changedGroupIds.Any())) + if(getFullResults || !changedGroupIds.Any()) { return entries; } @@ -197,7 +203,7 @@ namespace Bit.Core.Services return entry; } - private async static Task> GetUsersAsync(bool force = false) + private async static Task> GetUsersAsync(bool force) { if(!SettingsService.Instance.Sync.SyncUsers) {