mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 07:36:14 -05:00
feat(2FA): [PM-17129] Login with 2FA Recovery Code
* feat(2FA): [PM-17129] Login with 2FA Recovery Code - Login with Recovery Code working. * feat(2FA): [PM-17129] Login with 2FA Recovery Code - Feature flagged implementation. * style(2FA): [PM-17129] Login with 2FA Recovery Code - Code cleanup. * test(2FA): [PM-17129] Login with 2FA Recovery Code - Tests.
This commit is contained in:

committed by
GitHub

parent
465549b812
commit
ac6bc40d85
@ -730,6 +730,46 @@ public class UserServiceTests
|
||||
.RemoveAsync(Arg.Any<string>());
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task RecoverTwoFactorAsync_CorrectCode_ReturnsTrueAndProcessesPolicies(
|
||||
User user, SutProvider<UserService> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var recoveryCode = "1234";
|
||||
user.TwoFactorRecoveryCode = recoveryCode;
|
||||
|
||||
// Act
|
||||
var response = await sutProvider.Sut.RecoverTwoFactorAsync(user, recoveryCode);
|
||||
|
||||
// Assert
|
||||
Assert.True(response);
|
||||
Assert.Null(user.TwoFactorProviders);
|
||||
// Make sure a new code was generated for the user
|
||||
Assert.NotEqual(recoveryCode, user.TwoFactorRecoveryCode);
|
||||
await sutProvider.GetDependency<IMailService>()
|
||||
.Received(1)
|
||||
.SendRecoverTwoFactorEmail(Arg.Any<string>(), Arg.Any<DateTime>(), Arg.Any<string>());
|
||||
await sutProvider.GetDependency<IEventService>()
|
||||
.Received(1)
|
||||
.LogUserEventAsync(user.Id, EventType.User_Recovered2fa);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task RecoverTwoFactorAsync_IncorrectCode_ReturnsFalse(
|
||||
User user, SutProvider<UserService> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var recoveryCode = "1234";
|
||||
user.TwoFactorRecoveryCode = "4567";
|
||||
|
||||
// Act
|
||||
var response = await sutProvider.Sut.RecoverTwoFactorAsync(user, recoveryCode);
|
||||
|
||||
// Assert
|
||||
Assert.False(response);
|
||||
Assert.NotNull(user.TwoFactorProviders);
|
||||
}
|
||||
|
||||
private static void SetupUserAndDevice(User user,
|
||||
bool shouldHavePassword)
|
||||
{
|
||||
|
Reference in New Issue
Block a user