public async Task <HashSet <string> > Groups() { try { var groupsCollectionPage = await GraphServiceHelper.GetGroupsAsync(_graphClient, _httpContext); var groups = new HashSet <string>(); await groupsCollectionPage.ForEachAsync(async _ => { var groupOwner = await GraphServiceHelper.GetGroupOwnersAsync(_graphClient, _httpContext, _.Id); var groupOwnership = BloodHoundHelper.BuildGroupOwnership(groupOwner); var groupMembersList = await GraphServiceHelper.GetGroupMembers(_graphClient, _httpContext, _.Id); var groupMembers = BloodHoundHelper.BuildGroupMembersList(groupMembersList); BloodHoundHelper.GroupMembership(_, groupMembers); if (Startup.IsCosmosDbGraphEnabled) { CosmosDbGraphHelper.GroupMembership(_, groupMembers); CosmosDbGraphHelper.GroupMembership(_, groupOwnership); } groups.Add(_.DisplayName); }); return(groups); } catch (Exception ex) { _logger.Error(ex, $"{nameof(Groups)} {ex.Message} {ex.InnerException}"); return(null); } }