1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-03 00:52:49 -05:00

[AC-1139] Reverted changes on OrganizationService

This commit is contained in:
Rui Tome
2023-10-26 16:12:59 +01:00
parent c47ebedcfc
commit 5f3d35076a
2 changed files with 19 additions and 14 deletions

View File

@ -888,6 +888,7 @@ public class OrganizationService : IOrganizationService
throw new BadRequestException("Organization must have at least one confirmed owner."); throw new BadRequestException("Organization must have at least one confirmed owner.");
} }
var orgUsers = new List<OrganizationUser>();
var limitedCollectionOrgUsers = new List<(OrganizationUser, IEnumerable<CollectionAccessSelection>)>(); var limitedCollectionOrgUsers = new List<(OrganizationUser, IEnumerable<CollectionAccessSelection>)>();
var orgUserGroups = new List<(OrganizationUser, IEnumerable<Guid>)>(); var orgUserGroups = new List<(OrganizationUser, IEnumerable<Guid>)>();
var orgUserInvitedCount = 0; var orgUserInvitedCount = 0;
@ -930,7 +931,14 @@ public class OrganizationService : IOrganizationService
// grant Manage permission for all assigned collections // grant Manage permission for all assigned collections
invite.Collections = ApplyManageCollectionPermissions(orgUser, invite.Collections); invite.Collections = ApplyManageCollectionPermissions(orgUser, invite.Collections);
limitedCollectionOrgUsers.Add((orgUser, invite.Collections)); if (!orgUser.AccessAll && invite.Collections.Any())
{
limitedCollectionOrgUsers.Add((orgUser, invite.Collections));
}
else
{
orgUsers.Add(orgUser);
}
if (invite.Groups != null && invite.Groups.Any()) if (invite.Groups != null && invite.Groups.Any())
{ {
@ -955,6 +963,7 @@ public class OrganizationService : IOrganizationService
var prorationDate = DateTime.UtcNow; var prorationDate = DateTime.UtcNow;
try try
{ {
await _organizationUserRepository.CreateManyAsync(orgUsers);
foreach (var (orgUser, collections) in limitedCollectionOrgUsers) foreach (var (orgUser, collections) in limitedCollectionOrgUsers)
{ {
await _organizationUserRepository.CreateAsync(orgUser, collections); await _organizationUserRepository.CreateAsync(orgUser, collections);
@ -976,7 +985,7 @@ public class OrganizationService : IOrganizationService
await _updateSecretsManagerSubscriptionCommand.UpdateSubscriptionAsync(smSubscriptionUpdate); await _updateSecretsManagerSubscriptionCommand.UpdateSubscriptionAsync(smSubscriptionUpdate);
} }
await AutoAddSeatsAsync(organization, newSeatsRequired, prorationDate); await AutoAddSeatsAsync(organization, newSeatsRequired, prorationDate);
await SendInvitesAsync(limitedCollectionOrgUsers.Select(u => u.Item1), organization); await SendInvitesAsync(orgUsers.Concat(limitedCollectionOrgUsers.Select(u => u.Item1)), organization);
await _referenceEventService.RaiseEventAsync( await _referenceEventService.RaiseEventAsync(
new ReferenceEvent(ReferenceEventType.InvitedUsers, organization, _currentContext) new ReferenceEvent(ReferenceEventType.InvitedUsers, organization, _currentContext)
@ -987,7 +996,7 @@ public class OrganizationService : IOrganizationService
catch (Exception e) catch (Exception e)
{ {
// Revert any added users. // Revert any added users.
var invitedOrgUserIds = limitedCollectionOrgUsers.Select(u => u.Item1.Id); var invitedOrgUserIds = orgUsers.Select(u => u.Id).Concat(limitedCollectionOrgUsers.Select(u => u.Item1.Id));
await _organizationUserRepository.DeleteManyAsync(invitedOrgUserIds); await _organizationUserRepository.DeleteManyAsync(invitedOrgUserIds);
var currentOrganization = await _organizationRepository.GetByIdAsync(organization.Id); var currentOrganization = await _organizationRepository.GetByIdAsync(organization.Id);
@ -1017,7 +1026,7 @@ public class OrganizationService : IOrganizationService
throw new AggregateException("One or more errors occurred while inviting users.", exceptions); throw new AggregateException("One or more errors occurred while inviting users.", exceptions);
} }
return (limitedCollectionOrgUsers.Select(o => o.Item1).ToList(), events); return (orgUsers, events);
} }
public async Task<IEnumerable<Tuple<OrganizationUser, string>>> ResendInvitesAsync(Guid organizationId, Guid? invitingUserId, public async Task<IEnumerable<Tuple<OrganizationUser, string>>> ResendInvitesAsync(Guid organizationId, Guid? invitingUserId,

View File

@ -76,11 +76,8 @@ public class OrganizationServiceTests
.CreateAsync(default); .CreateAsync(default);
// Create new users // Create new users
await sutProvider.GetDependency<IOrganizationUserRepository>().Received(expectedNewUsersCount) await sutProvider.GetDependency<IOrganizationUserRepository>().Received(1)
.CreateAsync( .CreateManyAsync(Arg.Is<IEnumerable<OrganizationUser>>(users => users.Count() == expectedNewUsersCount));
Arg.Is<OrganizationUser>(user => user.Status == OrganizationUserStatusType.Invited
&& newUsers.Any(u => string.Equals(u.Email, user.Email, StringComparison.InvariantCultureIgnoreCase))),
Arg.Any<IEnumerable<CollectionAccessSelection>>());
await sutProvider.GetDependency<IMailService>().Received(1) await sutProvider.GetDependency<IMailService>().Received(1)
.BulkSendOrganizationInviteEmailAsync(org.Name, .BulkSendOrganizationInviteEmailAsync(org.Name,
Arg.Is<IEnumerable<(OrganizationUser, ExpiringToken)>>(messages => messages.Count() == expectedNewUsersCount), org.PlanType == PlanType.Free); Arg.Is<IEnumerable<(OrganizationUser, ExpiringToken)>>(messages => messages.Count() == expectedNewUsersCount), org.PlanType == PlanType.Free);
@ -129,17 +126,16 @@ public class OrganizationServiceTests
.UpsertAsync(default); .UpsertAsync(default);
await sutProvider.GetDependency<IOrganizationUserRepository>().DidNotReceiveWithAnyArgs() await sutProvider.GetDependency<IOrganizationUserRepository>().DidNotReceiveWithAnyArgs()
.CreateAsync(default); .CreateAsync(default);
await sutProvider.GetDependency<IOrganizationUserRepository>().DidNotReceiveWithAnyArgs()
.CreateAsync(default, default);
// Upserted existing user // Upserted existing user
await sutProvider.GetDependency<IOrganizationUserRepository>().Received(1) await sutProvider.GetDependency<IOrganizationUserRepository>().Received(1)
.UpsertManyAsync(Arg.Is<IEnumerable<OrganizationUser>>(users => users.Count() == 1)); .UpsertManyAsync(Arg.Is<IEnumerable<OrganizationUser>>(users => users.Count() == 1));
// Created and invited new users // Created and invited new users
await sutProvider.GetDependency<IOrganizationUserRepository>().Received(expectedNewUsersCount) await sutProvider.GetDependency<IOrganizationUserRepository>().Received(1)
.CreateAsync( .CreateManyAsync(Arg.Is<IEnumerable<OrganizationUser>>(users => users.Count() == expectedNewUsersCount));
Arg.Is<OrganizationUser>(user => user.Status == OrganizationUserStatusType.Invited
&& newUsers.Any(u => string.Equals(u.Email, user.Email, StringComparison.InvariantCultureIgnoreCase))),
Arg.Any<IEnumerable<CollectionAccessSelection>>());
await sutProvider.GetDependency<IMailService>().Received(1) await sutProvider.GetDependency<IMailService>().Received(1)
.BulkSendOrganizationInviteEmailAsync(org.Name, .BulkSendOrganizationInviteEmailAsync(org.Name,
Arg.Is<IEnumerable<(OrganizationUser, ExpiringToken)>>(messages => messages.Count() == expectedNewUsersCount), org.PlanType == PlanType.Free); Arg.Is<IEnumerable<(OrganizationUser, ExpiringToken)>>(messages => messages.Count() == expectedNewUsersCount), org.PlanType == PlanType.Free);