using DotBased.AspNet.Authority.Managers; using DotBased.AspNet.Authority.Models.Authority; using DotBased.AspNet.Authority.Models.Validation; namespace DotBased.AspNet.Authority.Validators; public class PasswordEqualsValidator : IPasswordValidator { private const string ValidatorId = "Authority.Validator.Password.Equals"; private const string ValidationBase = "Authority.Validation.Password"; public async Task ValidatePasswordAsync(AuthorityUserManager userManager, AuthorityUser user, string password) { List errors = []; var hashedPassword = await userManager.PasswordHasher.HashPasswordAsync(password); if (user.PasswordHash != null && user.PasswordHash.Equals(hashedPassword, StringComparison.Ordinal)) { errors.Add(new ValidationError(ValidatorId, $"{ValidationBase}.InUse", "User uses this password already!")); } return errors.Count > 0 ? ValidationResult.Failed(errors) : ValidationResult.Ok(); } }