Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Added null check for checking if members array is not null #694

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 56 additions & 53 deletions src/lib/PnP.Framework/Graph/UnifiedGroupsUtility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -313,84 +313,87 @@ public static UnifiedGroupEntity CreateUnifiedGroup(string displayName, string d
/// <param name="removeOtherMembers">If set to true, all existing members which are not specified through <paramref name="members"/> will be removed as a member from the group</param>
private static async Task UpdateMembers(string[] members, GraphServiceClient graphClient, string groupId, bool removeOtherMembers)
{
foreach (var m in members)
if (members != null && members.Length > 0)
{
// Search for the user object
var memberQuery = await graphClient.Users
.Request()
.Filter($"userPrincipalName eq '{Uri.EscapeDataString(m.Replace("'", "''"))}'")
.GetAsync();
foreach (var m in members)
{
// Search for the user object
var memberQuery = await graphClient.Users
.Request()
.Filter($"userPrincipalName eq '{Uri.EscapeDataString(m.Replace("'", "''"))}'")
.GetAsync();

var member = memberQuery.FirstOrDefault();
var member = memberQuery.FirstOrDefault();

if (member != null)
{
try
if (member != null)
{
// And if any, add it to the collection of group's owners
await graphClient.Groups[groupId].Members.References.Request().AddAsync(member);
}
catch (Exception ex)
{
if (ex.Message.Contains("Request_BadRequest") &&
ex.Message.Contains("added object references already exist"))
try
{
// Skip any already existing member
// And if any, add it to the collection of group's owners
await graphClient.Groups[groupId].Members.References.Request().AddAsync(member);
}
else
catch (Exception ex)
{
if (ex.Message.Contains("Request_BadRequest") &&
ex.Message.Contains("added object references already exist"))
{
// Skip any already existing member
}
else
{
#pragma warning disable CA2200
throw ex;
throw ex;
#pragma warning restore CA2200
}
}
}
}
}

// Check if all other members not provided should be removed
if (!removeOtherMembers)
{
return;
}
// Check if all other members not provided should be removed
if (!removeOtherMembers)
{
return;
}

// Remove any leftover member
var fullListOfMembers = await graphClient.Groups[groupId].Members.Request().Select("userPrincipalName, Id").GetAsync();
var pageExists = true;
// Remove any leftover member
var fullListOfMembers = await graphClient.Groups[groupId].Members.Request().Select("userPrincipalName, Id").GetAsync();
var pageExists = true;

while (pageExists)
{
foreach (var member in fullListOfMembers)
while (pageExists)
{
var currentMemberPrincipalName = (member as Microsoft.Graph.User)?.UserPrincipalName;
if (!string.IsNullOrEmpty(currentMemberPrincipalName) &&
!members.Contains(currentMemberPrincipalName, StringComparer.InvariantCultureIgnoreCase))
foreach (var member in fullListOfMembers)
{
try
{
// If it is not in the list of current owners, just remove it
await graphClient.Groups[groupId].Members[member.Id].Reference.Request().DeleteAsync();
}
catch (ServiceException ex)
var currentMemberPrincipalName = (member as Microsoft.Graph.User)?.UserPrincipalName;
if (!string.IsNullOrEmpty(currentMemberPrincipalName) &&
!members.Contains(currentMemberPrincipalName, StringComparer.InvariantCultureIgnoreCase))
{
if (ex.Error.Code == "Request_BadRequest")
try
{
// Skip any failing removal
// If it is not in the list of current owners, just remove it
await graphClient.Groups[groupId].Members[member.Id].Reference.Request().DeleteAsync();
}
else
catch (ServiceException ex)
{
throw ex;
if (ex.Error.Code == "Request_BadRequest")
{
// Skip any failing removal
}
else
{
throw ex;
}
}
}
}
}

if (fullListOfMembers.NextPageRequest != null)
{
fullListOfMembers = await fullListOfMembers.NextPageRequest.GetAsync();
}
else
{
pageExists = false;
if (fullListOfMembers.NextPageRequest != null)
{
fullListOfMembers = await fullListOfMembers.NextPageRequest.GetAsync();
}
else
{
pageExists = false;
}
}
}
}
Expand Down