in src/Amazon.AspNetCore.Identity.Cognito/CognitoPasswordValidator.cs [38:83]
public async Task<IdentityResult> ValidateAsync(UserManager<CognitoUser> manager, CognitoUser user, string password)
{
// Retrieve the password policy set by the user's user pool
var passwordPolicy = await user.UserPool.GetPasswordPolicyTypeAsync().ConfigureAwait(false);
var errorDescriber = new IdentityErrorDescriber();
var errors = new List<IdentityError>();
if (password is null)
password = string.Empty;
if (password.Length < passwordPolicy.MinimumLength)
{
errors.Add(errorDescriber.PasswordTooShort(passwordPolicy.MinimumLength ?? 0));
}
if (!password.Any(char.IsLower) && (passwordPolicy.RequireLowercase ?? false))
{
errors.Add(errorDescriber.PasswordRequiresLower());
}
if (!password.Any(char.IsUpper) && (passwordPolicy.RequireUppercase ?? false))
{
errors.Add(errorDescriber.PasswordRequiresUpper());
}
if (!password.Any(char.IsNumber) && (passwordPolicy.RequireNumbers ?? false))
{
errors.Add(errorDescriber.PasswordRequiresDigit());
}
var passwordContainsASymbol = password.IndexOfAny(CognitoSymbols) >= 0;
if (!passwordContainsASymbol && (passwordPolicy.RequireSymbols ?? false))
{
errors.Add(errorDescriber.PasswordRequiresNonAlphanumeric());
}
if (errors.Count > 0)
{
return IdentityResult.Failed(errors.ToArray());
}
else
{
return IdentityResult.Success;
}
}