mirror of
https://github.com/bitwarden/server.git
synced 2024-11-22 12:15:36 +01:00
[PM-5659] Add null check on policy query when building invite link (#3659)
* Added null check on policy query. * PM-5659 - OrganizationServiceTests.cs - Add test for scenario in which an org has never turned on the RequireSSO policy and it will be null * dotnet format --------- Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com> Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
This commit is contained in:
parent
b829812a3f
commit
b9c6e00c2d
@ -1126,7 +1126,7 @@ public class OrganizationService : IOrganizationService
|
|||||||
// need to check the policy if the org has SSO enabled.
|
// need to check the policy if the org has SSO enabled.
|
||||||
var orgSsoLoginRequiredPolicyEnabled = orgSsoEnabled &&
|
var orgSsoLoginRequiredPolicyEnabled = orgSsoEnabled &&
|
||||||
organization.UsePolicies &&
|
organization.UsePolicies &&
|
||||||
(await _policyRepository.GetByOrganizationIdTypeAsync(organization.Id, PolicyType.RequireSso)).Enabled;
|
(await _policyRepository.GetByOrganizationIdTypeAsync(organization.Id, PolicyType.RequireSso))?.Enabled == true;
|
||||||
|
|
||||||
// Generate the list of org users and expiring tokens
|
// Generate the list of org users and expiring tokens
|
||||||
// create helper function to create expiring tokens
|
// create helper function to create expiring tokens
|
||||||
|
@ -481,6 +481,57 @@ public class OrganizationServiceTests
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[OrganizationInviteCustomize, BitAutoData]
|
||||||
|
public async Task InviteUser_SsoOrgWithNeverEnabledRequireSsoPolicy_Passes(Organization organization, SsoConfig ssoConfig, OrganizationUser invitor,
|
||||||
|
[OrganizationUser(OrganizationUserStatusType.Confirmed, OrganizationUserType.Owner)] OrganizationUser owner,
|
||||||
|
OrganizationUserInvite invite, SutProvider<OrganizationService> sutProvider)
|
||||||
|
{
|
||||||
|
// Setup FakeDataProtectorTokenFactory for creating new tokens - this must come first in order to avoid resetting mocks
|
||||||
|
sutProvider.SetDependency(_orgUserInviteTokenDataFactory, "orgUserInviteTokenDataFactory");
|
||||||
|
sutProvider.Create();
|
||||||
|
|
||||||
|
// Org must be able to use SSO and policies to trigger this test case
|
||||||
|
organization.UseSso = true;
|
||||||
|
organization.UsePolicies = true;
|
||||||
|
|
||||||
|
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organization.Id).Returns(organization);
|
||||||
|
sutProvider.GetDependency<ICurrentContext>().OrganizationOwner(organization.Id).Returns(true);
|
||||||
|
sutProvider.GetDependency<ICurrentContext>().ManageUsers(organization.Id).Returns(true);
|
||||||
|
var organizationUserRepository = sutProvider.GetDependency<IOrganizationUserRepository>();
|
||||||
|
organizationUserRepository.GetManyByOrganizationAsync(organization.Id, OrganizationUserType.Owner)
|
||||||
|
.Returns(new[] { owner });
|
||||||
|
|
||||||
|
ssoConfig.Enabled = true;
|
||||||
|
sutProvider.GetDependency<ISsoConfigRepository>().GetByOrganizationIdAsync(organization.Id).Returns(ssoConfig);
|
||||||
|
|
||||||
|
|
||||||
|
// Return null policy to mimic new org that's never turned on the require sso policy
|
||||||
|
sutProvider.GetDependency<IPolicyRepository>().GetManyByOrganizationIdAsync(organization.Id).ReturnsNull();
|
||||||
|
|
||||||
|
// Must set guids in order for dictionary of guids to not throw aggregate exceptions
|
||||||
|
SetupOrgUserRepositoryCreateManyAsyncMock(organizationUserRepository);
|
||||||
|
|
||||||
|
// Mock tokenable factory to return a token that expires in 5 days
|
||||||
|
sutProvider.GetDependency<IOrgUserInviteTokenableFactory>()
|
||||||
|
.CreateToken(Arg.Any<OrganizationUser>())
|
||||||
|
.Returns(
|
||||||
|
info => new OrgUserInviteTokenable(info.Arg<OrganizationUser>())
|
||||||
|
{
|
||||||
|
ExpirationDate = DateTime.UtcNow.Add(TimeSpan.FromDays(5))
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
await sutProvider.Sut.InviteUsersAsync(organization.Id, invitor.UserId, new (OrganizationUserInvite, string)[] { (invite, null) });
|
||||||
|
|
||||||
|
await sutProvider.GetDependency<IMailService>().Received(1)
|
||||||
|
.SendOrganizationInviteEmailsAsync(Arg.Is<OrganizationInvitesInfo>(info =>
|
||||||
|
info.OrgUserTokenPairs.Count() == invite.Emails.Distinct().Count() &&
|
||||||
|
info.IsFreeOrg == (organization.PlanType == PlanType.Free) &&
|
||||||
|
info.OrganizationName == organization.Name));
|
||||||
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[OrganizationInviteCustomize(
|
[OrganizationInviteCustomize(
|
||||||
InviteeUserType = OrganizationUserType.Admin,
|
InviteeUserType = OrganizationUserType.Admin,
|
||||||
|
Loading…
Reference in New Issue
Block a user