From 14328ffced6c1f131324b32028404beba913889e Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Fri, 9 Dec 2022 17:14:45 +0100 Subject: [PATCH] set two-factor props accordingly --- zero.Raven/Identity/RavenUserStore(TUser).cs | 38 ++++++++++---------- zero/Identity/Models/ZeroIdentityUser.cs | 2 +- zero/Localization/ZeroLocalizationModule.cs | 2 ++ 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/zero.Raven/Identity/RavenUserStore(TUser).cs b/zero.Raven/Identity/RavenUserStore(TUser).cs index 499a949c..420d14ce 100644 --- a/zero.Raven/Identity/RavenUserStore(TUser).cs +++ b/zero.Raven/Identity/RavenUserStore(TUser).cs @@ -33,10 +33,7 @@ public partial class RavenUserStore : } private StringComparison _comparer = StringComparison.InvariantCultureIgnoreCase; - private const string InternalLoginProvider = "[AspNetUserStore]"; - private const string AuthenticatorKeyTokenName = "AuthenticatorKey"; - private const string RecoveryCodeTokenName = "RecoveryCodes"; - + protected IdentityErrorDescriber ErrorDescriber { get; private set; } protected virtual IRavenOperations Ops { get; set; } @@ -478,15 +475,18 @@ public partial class RavenUserStore : /// - public Task SetAuthenticatorKeyAsync(TUser user, string key, CancellationToken cancellationToken) => - SetTokenAsync(user, InternalLoginProvider, AuthenticatorKeyTokenName, key, cancellationToken); + public Task SetAuthenticatorKeyAsync(TUser user, string key, CancellationToken cancellationToken) + { + user.TwoFactorAuthenticatorKey = key; + return Task.CompletedTask; + } /// public Task GetAuthenticatorKeyAsync(TUser user, CancellationToken cancellationToken) => - GetTokenAsync(user, InternalLoginProvider, AuthenticatorKeyTokenName, cancellationToken); + Task.FromResult(user.TwoFactorAuthenticatorKey); + - /// public Task SetTwoFactorEnabledAsync(TUser user, bool enabled, CancellationToken cancellationToken) { @@ -501,8 +501,11 @@ public partial class RavenUserStore : /// - public Task ReplaceCodesAsync(TUser user, IEnumerable recoveryCodes, CancellationToken cancellationToken) => - SetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, string.Join(";", recoveryCodes), cancellationToken); + public Task ReplaceCodesAsync(TUser user, IEnumerable recoveryCodes, CancellationToken cancellationToken) + { + user.TwoFactorRecoveryCodes = recoveryCodes; + return Task.CompletedTask; + } /// @@ -519,11 +522,10 @@ public partial class RavenUserStore : throw new ArgumentNullException(nameof(code)); } - var mergedCodes = await GetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, cancellationToken).ConfigureAwait(false) ?? ""; - var splitCodes = mergedCodes.Split(';'); - if (splitCodes.Contains(code)) + + if (user.TwoFactorRecoveryCodes.Contains(code)) { - var updatedCodes = new List(splitCodes.Where(s => s != code)); + List updatedCodes = new(user.TwoFactorRecoveryCodes.Where(s => s != code)); await ReplaceCodesAsync(user, updatedCodes, cancellationToken).ConfigureAwait(false); return true; } @@ -540,12 +542,8 @@ public partial class RavenUserStore : { throw new ArgumentNullException(nameof(user)); } - var mergedCodes = await GetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, cancellationToken).ConfigureAwait(false) ?? ""; - if (mergedCodes.Length > 0) - { - return mergedCodes.Split(';').Length; - } - return 0; + + return user.TwoFactorRecoveryCodes?.Count() ?? 0; } diff --git a/zero/Identity/Models/ZeroIdentityUser.cs b/zero/Identity/Models/ZeroIdentityUser.cs index 159c756a..89135488 100644 --- a/zero/Identity/Models/ZeroIdentityUser.cs +++ b/zero/Identity/Models/ZeroIdentityUser.cs @@ -81,7 +81,7 @@ public abstract class ZeroIdentityUser : ZeroEntity /// /// The list of two factor authentication recovery codes /// - public List TwoFactorRecoveryCodes { get; set; } = new(); + public IEnumerable TwoFactorRecoveryCodes { get; set; } = new List(); /// /// Store all external logins (Microsoft, Google, ...) diff --git a/zero/Localization/ZeroLocalizationModule.cs b/zero/Localization/ZeroLocalizationModule.cs index 2d6826b6..7ed73963 100644 --- a/zero/Localization/ZeroLocalizationModule.cs +++ b/zero/Localization/ZeroLocalizationModule.cs @@ -8,6 +8,8 @@ internal class ZeroLocalizationModule : ZeroModule { public override void ConfigureServices(IServiceCollection services, IConfiguration configuration) { + // hint: think about using https://github.com/nuages-io/nuages-localization + services.AddScoped(); services.AddScoped(); services.AddScoped();