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);
}
}
}