1
0
mirror of https://github.com/bitwarden/server.git synced 2025-06-28 06:36:15 -05:00
This commit is contained in:
Brandon 2025-05-15 17:03:50 -04:00
parent 57e035bf51
commit da7c961729
No known key found for this signature in database
GPG Key ID: A0E0EF0B207BA40D

View File

@ -95,7 +95,7 @@ public class ImportOrganizationUserCommand : IImportOrganizationUserCommand
await OverwriteExisting(events, importUserData); await OverwriteExisting(events, importUserData);
} }
await RemoveExistingUsers(existingUsers, newUsers, organization, importUserData); await UpsertExistingUsers(existingUsers, newUsers, organization, importUserData);
await AddNewUsers(organization, newUsers, eventSystemUser, importUserData); await AddNewUsers(organization, newUsers, eventSystemUser, importUserData);
@ -144,7 +144,7 @@ public class ImportOrganizationUserCommand : IImportOrganizationUserCommand
); );
} }
private async Task RemoveExistingUsers(IEnumerable<OrganizationUserUserDetails> existingUsers, private async Task UpsertExistingUsers(IEnumerable<OrganizationUserUserDetails> existingUsers,
IEnumerable<ImportedOrganizationUser> newUsers, IEnumerable<ImportedOrganizationUser> newUsers,
Organization organization, Organization organization,
OrganizationUserImportData importUserData) OrganizationUserImportData importUserData)
@ -159,19 +159,19 @@ public class ImportOrganizationUserCommand : IImportOrganizationUserCommand
.Where(u => string.IsNullOrWhiteSpace(u.ExternalId)) .Where(u => string.IsNullOrWhiteSpace(u.ExternalId))
.ToDictionary(u => u.Email); .ToDictionary(u => u.Email);
var newUsersEmailsDict = newUsers.ToDictionary(u => u.Email); var newUsersEmailsDict = newUsers.ToDictionary(u => u.Email);
var usersToAttach = existingUsersEmailsDict.Keys.Intersect(newUsersEmailsDict.Keys).ToList(); var newAndExistingUsersIntersection = existingUsersEmailsDict.Keys.Intersect(newUsersEmailsDict.Keys).ToList();
var organizationUsers = (await _organizationUserRepository.GetManyAsync(existingUsers.Select(u => u.Id).ToList())).ToDictionary(u => u.Id);
var usersToUpsert = new List<OrganizationUser>(); var usersToUpsert = new List<OrganizationUser>();
var orgUsers = (await _organizationUserRepository.GetManyAsync(existingUsers.Select(u => u.Id).ToList())).ToDictionary(u => u.Id);
foreach (var user in usersToAttach) foreach (var user in newAndExistingUsersIntersection)
{ {
var orgUser = orgUsers[existingUsersEmailsDict[user].Id]; var organizationUser = organizationUsers[existingUsersEmailsDict[user].Id];
if (orgUser != null) if (organizationUser != null)
{ {
orgUser.ExternalId = newUsersEmailsDict[user].ExternalId; organizationUser.ExternalId = newUsersEmailsDict[user].ExternalId;
usersToUpsert.Add(orgUser); usersToUpsert.Add(organizationUser);
importUserData.ExistingExternalUsersIdDict.Add(orgUser.ExternalId, orgUser.Id); importUserData.ExistingExternalUsersIdDict.Add(organizationUser.ExternalId, organizationUser.Id);
} }
} }
await _organizationUserRepository.UpsertManyAsync(usersToUpsert); await _organizationUserRepository.UpsertManyAsync(usersToUpsert);