mirror of
https://github.com/bitwarden/server.git
synced 2025-02-01 23:31:41 +01:00
marry existing users before adding
This commit is contained in:
parent
2fc54889e3
commit
6110da4ba9
@ -1184,10 +1184,28 @@ namespace Bit.Core.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add new users
|
|
||||||
if(newUsers?.Any() ?? false)
|
if(newUsers?.Any() ?? false)
|
||||||
{
|
{
|
||||||
var existingUsersSet = new HashSet<string>(existingExternalUsers.Select(u => u.ExternalId));
|
// Marry existing users
|
||||||
|
var existingUsersEmailsDict = existingUsers
|
||||||
|
.Where(u => string.IsNullOrWhiteSpace(u.ExternalId))
|
||||||
|
.ToDictionary(u => u.Email);
|
||||||
|
var newUsersEmailsDict = newUsers.ToDictionary(u => u.Email);
|
||||||
|
var usersToAttach = existingUsersEmailsDict.Keys.Intersect(newUsersEmailsDict.Keys).ToList();
|
||||||
|
foreach(var user in usersToAttach)
|
||||||
|
{
|
||||||
|
var orgUserDetails = existingUsersEmailsDict[user];
|
||||||
|
var orgUser = await _organizationUserRepository.GetByIdAsync(orgUserDetails.Id);
|
||||||
|
if(orgUser != null)
|
||||||
|
{
|
||||||
|
orgUser.ExternalId = newUsersEmailsDict[user].ExternalId;
|
||||||
|
await _organizationUserRepository.UpsertAsync(orgUser);
|
||||||
|
existingExternalUsersIdDict.Add(orgUser.ExternalId, orgUser.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add new users
|
||||||
|
var existingUsersSet = new HashSet<string>(existingExternalUsersIdDict.Keys);
|
||||||
var usersToAdd = newUsersSet.Except(existingUsersSet).ToList();
|
var usersToAdd = newUsersSet.Except(existingUsersSet).ToList();
|
||||||
|
|
||||||
var seatsAvailable = int.MaxValue;
|
var seatsAvailable = int.MaxValue;
|
||||||
@ -1220,23 +1238,6 @@ namespace Bit.Core.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var existingUsersEmailsDict = existingUsers
|
|
||||||
.Where(u => string.IsNullOrWhiteSpace(u.ExternalId))
|
|
||||||
.ToDictionary(u => u.Email);
|
|
||||||
var newUsersEmailsDict = newUsers.ToDictionary(u => u.Email);
|
|
||||||
var usersToAttach = existingUsersEmailsDict.Keys.Intersect(newUsersEmailsDict.Keys).ToList();
|
|
||||||
foreach(var user in usersToAttach)
|
|
||||||
{
|
|
||||||
var orgUserDetails = existingUsersEmailsDict[user];
|
|
||||||
var orgUser = await _organizationUserRepository.GetByIdAsync(orgUserDetails.Id);
|
|
||||||
if(orgUser != null)
|
|
||||||
{
|
|
||||||
orgUser.ExternalId = newUsersEmailsDict[user].ExternalId;
|
|
||||||
await _organizationUserRepository.UpsertAsync(orgUser);
|
|
||||||
existingExternalUsersIdDict.Add(orgUser.ExternalId, orgUser.Id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Groups
|
// Groups
|
||||||
|
Loading…
Reference in New Issue
Block a user