diff --git a/RavenDB.Identity/IdentityUser.cs b/RavenDB.Identity/IdentityUser.cs index 8e98a64..0271b14 100644 --- a/RavenDB.Identity/IdentityUser.cs +++ b/RavenDB.Identity/IdentityUser.cs @@ -92,6 +92,11 @@ namespace Raven.Identity /// public virtual List Logins { get; private set; } + /// + /// The list of two factor authentication recovery codes. + /// + public virtual List TwoFactorRecoveryCodes { get; set; } + /// /// Creates a new IdentityUser. /// diff --git a/RavenDB.Identity/IdentityUserAuthToken.cs b/RavenDB.Identity/IdentityUserAuthToken.cs index b8dd8a2..c25c7ad 100644 --- a/RavenDB.Identity/IdentityUserAuthToken.cs +++ b/RavenDB.Identity/IdentityUserAuthToken.cs @@ -7,7 +7,7 @@ using System.Text; namespace Raven.Identity { /// - /// A two-factor authentication authorization token. + /// A authorization token created by a login provider. /// public class IdentityUserAuthToken { diff --git a/RavenDB.Identity/RavenDB.Identity.csproj b/RavenDB.Identity/RavenDB.Identity.csproj index 600d2ca..818be6e 100644 --- a/RavenDB.Identity/RavenDB.Identity.csproj +++ b/RavenDB.Identity/RavenDB.Identity.csproj @@ -19,7 +19,7 @@ false false false - 4.2.0 + 4.3.0 False Raven.Identity diff --git a/RavenDB.Identity/UserStore.cs b/RavenDB.Identity/UserStore.cs index 8e43733..ead0009 100644 --- a/RavenDB.Identity/UserStore.cs +++ b/RavenDB.Identity/UserStore.cs @@ -26,7 +26,8 @@ namespace Raven.Identity IUserTwoFactorStore, IUserPhoneNumberStore, IUserAuthenticatorKeyStore, - IUserAuthenticationTokenStore + IUserAuthenticationTokenStore, + IUserTwoFactorRecoveryCodeStore where TUser : IdentityUser { private bool _disposed; @@ -699,6 +700,25 @@ namespace Raven.Identity return tokenOrNull.Value; } + + /// + public Task ReplaceCodesAsync(TUser user, IEnumerable recoveryCodes, CancellationToken cancellationToken) + { + user.TwoFactorRecoveryCodes = new List(recoveryCodes); + return Task.CompletedTask; + } + + /// + public Task RedeemCodeAsync(TUser user, string code, CancellationToken cancellationToken) + { + return Task.FromResult(user.TwoFactorRecoveryCodes.Remove(code)); + } + + /// + public Task CountCodesAsync(TUser user, CancellationToken cancellationToken) + { + return Task.FromResult(user.TwoFactorRecoveryCodes.Count); + } #endregion