password reset fixes

This commit is contained in:
vfedosevich 2015-04-16 07:18:14 -07:00
parent 097378bc50
commit 736e83746f
10 changed files with 318 additions and 319 deletions

View file

@ -13,23 +13,18 @@ namespace WebsitePanel.WebDavPortal.CustomAttributes
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class OrganizationPasswordPolicyAttribute : ValidationAttribute, IClientValidatable
{
public OrganizationPasswordSettings Settings { get; private set; }
public int ItemId { get; private set; }
public OrganizationPasswordPolicyAttribute()
{
int itemId = -1;
if (WspContext.User != null)
{
itemId = WspContext.User.ItemId;
ItemId = WspContext.User.ItemId;
}
else if (HttpContext.Current != null && HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.ItemId] != null)
{
itemId = (int) HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.ItemId];
ItemId = (int)HttpContext.Current.Session[WebDavAppConfigManager.Instance.SessionKeys.ItemId];
}
Settings = WspContext.Services.Organizations.GetOrganizationPasswordSettings(itemId);
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
@ -38,44 +33,46 @@ namespace WebsitePanel.WebDavPortal.CustomAttributes
{
var resultMessages = new List<string>();
if (Settings != null)
var settings = WspContext.Services.Organizations.GetOrganizationPasswordSettings(ItemId);
if (settings != null)
{
var valueString = value.ToString();
if (valueString.Length < Settings.MinimumLength)
if (valueString.Length < settings.MinimumLength)
{
resultMessages.Add(string.Format(Resources.Messages.PasswordMinLengthFormat,
Settings.MinimumLength));
settings.MinimumLength));
}
if (valueString.Length > Settings.MaximumLength)
if (valueString.Length > settings.MaximumLength)
{
resultMessages.Add(string.Format(Resources.Messages.PasswordMaxLengthFormat,
Settings.MaximumLength));
settings.MaximumLength));
}
if (Settings.PasswordComplexityEnabled)
if (settings.PasswordComplexityEnabled)
{
var symbolsCount = valueString.Count(Char.IsSymbol);
var numbersCount = valueString.Count(Char.IsDigit);
var upperLetterCount = valueString.Count(Char.IsUpper);
if (upperLetterCount < Settings.UppercaseLettersCount)
if (upperLetterCount < settings.UppercaseLettersCount)
{
resultMessages.Add(string.Format(Resources.Messages.PasswordUppercaseCountFormat,
Settings.UppercaseLettersCount));
settings.UppercaseLettersCount));
}
if (numbersCount < Settings.NumbersCount)
if (numbersCount < settings.NumbersCount)
{
resultMessages.Add(string.Format(Resources.Messages.PasswordNumbersCountFormat,
Settings.NumbersCount));
settings.NumbersCount));
}
if (symbolsCount < Settings.SymbolsCount)
if (symbolsCount < settings.SymbolsCount)
{
resultMessages.Add(string.Format(Resources.Messages.PasswordSymbolsCountFormat,
Settings.SymbolsCount));
settings.SymbolsCount));
}
}
@ -89,44 +86,46 @@ namespace WebsitePanel.WebDavPortal.CustomAttributes
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var settings = WspContext.Services.Organizations.GetOrganizationPasswordSettings(ItemId);
var rule = new ModelClientValidationRule();
rule.ErrorMessage = string.Format(Resources.Messages.PasswordMinLengthFormat, Settings.MinimumLength);
rule.ValidationParameters.Add("count", Settings.MinimumLength);
rule.ErrorMessage = string.Format(Resources.Messages.PasswordMinLengthFormat, settings.MinimumLength);
rule.ValidationParameters.Add("count", settings.MinimumLength);
rule.ValidationType = "minimumlength";
yield return rule;
rule = new ModelClientValidationRule();
rule.ErrorMessage = string.Format(Resources.Messages.PasswordMaxLengthFormat, Settings.MaximumLength);
rule.ValidationParameters.Add("count", Settings.MaximumLength);
rule.ErrorMessage = string.Format(Resources.Messages.PasswordMaxLengthFormat, settings.MaximumLength);
rule.ValidationParameters.Add("count", settings.MaximumLength);
rule.ValidationType = "maximumlength";
yield return rule;
if (Settings.PasswordComplexityEnabled)
if (settings.PasswordComplexityEnabled)
{
rule = new ModelClientValidationRule();
rule.ErrorMessage = string.Format(Resources.Messages.PasswordUppercaseCountFormat, Settings.UppercaseLettersCount);
rule.ValidationParameters.Add("count", Settings.UppercaseLettersCount);
rule.ErrorMessage = string.Format(Resources.Messages.PasswordUppercaseCountFormat, settings.UppercaseLettersCount);
rule.ValidationParameters.Add("count", settings.UppercaseLettersCount);
rule.ValidationType = "uppercasecount";
yield return rule;
rule = new ModelClientValidationRule();
rule.ErrorMessage = string.Format(Resources.Messages.PasswordNumbersCountFormat, Settings.NumbersCount);
rule.ValidationParameters.Add("count", Settings.NumbersCount);
rule.ErrorMessage = string.Format(Resources.Messages.PasswordNumbersCountFormat, settings.NumbersCount);
rule.ValidationParameters.Add("count", settings.NumbersCount);
rule.ValidationType = "numberscount";
yield return rule;
rule = new ModelClientValidationRule();
rule.ErrorMessage = string.Format(Resources.Messages.PasswordSymbolsCountFormat, Settings.SymbolsCount);
rule.ValidationParameters.Add("count", Settings.SymbolsCount);
rule.ErrorMessage = string.Format(Resources.Messages.PasswordSymbolsCountFormat, settings.SymbolsCount);
rule.ValidationParameters.Add("count", settings.SymbolsCount);
rule.ValidationType = "symbolscount";
yield return rule;

View file

@ -16,25 +16,9 @@ namespace WebsitePanel.WebDavPortal.CustomAttributes
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
Type type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(validationtype => validationtype.Name == string.Format("{0}controller", this.RouteData["controller"].ToString()));
var valueString = value as string;
object response = null;
if (type != null)
{
MethodInfo method = type.GetMethods()
.FirstOrDefault(callingMethod => callingMethod.Name.ToLower() == (string.Format("{0}", this.RouteData["action"]).ToString().ToLower()));
if (method != null)
{
object instance = Activator.CreateInstance(type);
response = method.Invoke(instance, new [] { value });
}
}
if (response is bool)
if (!string.IsNullOrEmpty(valueString) && WspContext.User != null)
{
var attributes =
validationContext.ObjectType.GetProperty(validationContext.MemberName)
@ -45,11 +29,13 @@ namespace WebsitePanel.WebDavPortal.CustomAttributes
: validationContext.DisplayName;
return (bool)response ? ValidationResult.Success :
var result = !WspContext.Services.Organizations.CheckPhoneNumberIsInUse(WspContext.User.ItemId, valueString, WspContext.User.Login);
return result ? ValidationResult.Success :
new ValidationResult(string.Format(Resources.Messages.AlreadyInUse, displayName));
}
return ValidationResult.Success;
return ValidationResult.Success;
}
public UniqueAdPhoneNumberAttribute(string routeName) : base(routeName) { }