Files
Umbraco-CMS/src/Umbraco.Core/Security/MembershipProviderPasswordValidator.cs
2019-01-23 00:03:39 +01:00

39 lines
1.5 KiB
C#

using System.Threading.Tasks;
using System.Web.Security;
using Microsoft.AspNet.Identity;
namespace Umbraco.Core.Security
{
/// <summary>
/// Ensure that both the normal password validator rules are processed along with the underlying membership provider rules
/// </summary>
public class MembershipProviderPasswordValidator : PasswordValidator
{
public MembershipProvider Provider { get; private set; }
public MembershipProviderPasswordValidator(MembershipProvider provider)
{
Provider = provider;
RequiredLength = Provider.MinRequiredPasswordLength;
RequireNonLetterOrDigit = Provider.MinRequiredNonAlphanumericCharacters > 0;
RequireDigit = false;
RequireLowercase = false;
RequireUppercase = false;
}
public override async Task<IdentityResult> ValidateAsync(string item)
{
var result = await base.ValidateAsync(item);
if (result.Succeeded == false)
return result;
var providerValidate = MembershipProviderBase.IsPasswordValid(item, Provider.MinRequiredNonAlphanumericCharacters, Provider.PasswordStrengthRegularExpression, Provider.MinRequiredPasswordLength);
if (providerValidate.Success == false)
{
return IdentityResult.Failed("Could not set password, password rules violated: " + providerValidate.Result);
}
return IdentityResult.Success;
}
}
}