1
0
mirror of https://github.com/bitwarden/server synced 2026-02-21 20:03:40 +00:00

Validate loaded user's org matches pass-in organization when resetting password (#7019)

This commit is contained in:
sven-bitwarden
2026-02-20 15:58:50 -06:00
committed by GitHub
parent 414a6d037e
commit 993d3bc085
2 changed files with 67 additions and 1 deletions

View File

@@ -340,6 +340,72 @@ public class OrganizationUsersControllerTests
ou.EncryptedPrivateKey == r.EncryptedPrivateKey)));
}
[Theory]
[BitAutoData]
public async Task GetResetPasswordDetails_WhenOrganizationUserNotFound_ThrowsNotFound(
Guid orgId, Guid orgUserId,
SutProvider<OrganizationUsersController> sutProvider)
{
// Arrange
sutProvider.GetDependency<IOrganizationUserRepository>().GetByIdAsync(orgUserId).Returns((OrganizationUser)null);
// Act & Assert
await Assert.ThrowsAsync<NotFoundException>(() => sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId));
}
[Theory]
[BitAutoData]
public async Task GetResetPasswordDetails_WhenOrganizationIdMismatch_ThrowsNotFound(
Guid orgId, Guid orgUserId, OrganizationUser organizationUser,
SutProvider<OrganizationUsersController> sutProvider)
{
// Arrange
organizationUser.OrganizationId = Guid.NewGuid(); // Different org ID
organizationUser.UserId = Guid.NewGuid();
sutProvider.GetDependency<IOrganizationUserRepository>().GetByIdAsync(orgUserId).Returns(organizationUser);
// Act & Assert
await Assert.ThrowsAsync<NotFoundException>(() => sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId));
}
[Theory]
[BitAutoData]
public async Task GetResetPasswordDetails_WhenUserIdIsNull_ThrowsNotFound(
Guid orgId, Guid orgUserId, OrganizationUser organizationUser,
SutProvider<OrganizationUsersController> sutProvider)
{
// Arrange
organizationUser.OrganizationId = orgId;
organizationUser.UserId = null;
sutProvider.GetDependency<IOrganizationUserRepository>().GetByIdAsync(orgUserId).Returns(organizationUser);
// Act & Assert
await Assert.ThrowsAsync<NotFoundException>(() => sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId));
}
[Theory]
[BitAutoData]
public async Task GetResetPasswordDetails_WhenValid_ReturnsDetails(
Guid orgId, Guid orgUserId, OrganizationUser organizationUser, User user, Organization org,
SutProvider<OrganizationUsersController> sutProvider)
{
// Arrange
organizationUser.OrganizationId = orgId;
organizationUser.UserId = user.Id;
sutProvider.GetDependency<IOrganizationUserRepository>().GetByIdAsync(orgUserId).Returns(organizationUser);
sutProvider.GetDependency<IUserService>().GetUserByIdAsync(user.Id).Returns(user);
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(orgId).Returns(org);
// Act
var response = await sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId);
// Assert
Assert.Equal(organizationUser.Id, response.OrganizationUserId);
Assert.Equal(user.Kdf, response.Kdf);
Assert.Equal(user.KdfIterations, response.KdfIterations);
Assert.Equal(org.PrivateKey, response.EncryptedPrivateKey);
}
[Theory]
[BitAutoData]
public async Task DeleteAccount_WhenCurrentUserNotFound_ReturnsUnauthorizedResult(