using <Project>.Entities;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace <Project>.Validation
{
public class ValidPasswordAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var httpContextAccessor = (IHttpContextAccessor)validationContext.GetService(typeof(IHttpContextAccessor));
var userManager = (UserManager<User>)validationContext.GetService(typeof(UserManager<User>));
var claimsPrincipal = httpContextAccessor.HttpContext.User;
var user = userManager.GetUserAsync(claimsPrincipal).Result;
// Check each available validator
foreach(var validator in userManager.PasswordValidators)
{
var result = validator.ValidateAsync(userManager, user, (string)value).Result;
if (!result.Succeeded)
return new ValidationResult(result.Errors.First().Description);
}
return ValidationResult.Success;
}
}
}