using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Localization; namespace gehGassi.Pwned { /// /// An for verifying a given password has not appeared in a data breach /// /// [ExcludeFromCodeCoverage] public class PwnedPasswordValidator : IPasswordValidator where TUser : class { private readonly IPwnedPasswordService _passwordService; private readonly IStringLocalizer _localizer; /// /// Constructor for . /// /// /// Instanz eines IStringLocalizer public PwnedPasswordValidator(IPwnedPasswordService passwordService, IStringLocalizer localizer) { _passwordService = passwordService; _localizer = localizer; } /// public async Task ValidateAsync( UserManager manager, TUser user, string password) { var (pwned, count) = await _passwordService.IsPasswordPwnedAsync(password); if (pwned) { var errorMessage = _localizer["Err_PwnedPassword", count]; return await Task.FromResult(IdentityResult.Failed(new IdentityError { Code = "PwnedPassword", Description = errorMessage })).ConfigureAwait(false); } return await Task.FromResult(IdentityResult.Success).ConfigureAwait(false); } } }