public async Task <bool> EvaluateMasterPassword(int passwordStrength, string newPassword, MasterPasswordPolicyOptions enforcedPolicyOptions) { if (enforcedPolicyOptions == null) { return(true); } if (enforcedPolicyOptions.MinComplexity > 0 && enforcedPolicyOptions.MinComplexity > passwordStrength) { return(false); } if (enforcedPolicyOptions.MinLength > 0 && enforcedPolicyOptions.MinLength > newPassword.Length) { return(false); } if (enforcedPolicyOptions.RequireUpper && newPassword.ToLower() == newPassword) { return(false); } if (enforcedPolicyOptions.RequireLower && newPassword.ToUpper() == newPassword) { return(false); } if (enforcedPolicyOptions.RequireNumbers && !newPassword.Any(char.IsDigit)) { return(false); } if (enforcedPolicyOptions.RequireSpecial && !Regex.IsMatch(newPassword, "^.*[!@#$%\\^&*].*$")) { return(false); } return(true); }
public async Task <MasterPasswordPolicyOptions> GetMasterPasswordPolicyOptions( IEnumerable <Policy> policies = null, string userId = null) { MasterPasswordPolicyOptions enforcedOptions = null; if (policies == null) { policies = await GetAll(PolicyType.MasterPassword, userId); } else { policies = policies.Where(p => p.Type == PolicyType.MasterPassword); } if (policies == null || !policies.Any()) { return(enforcedOptions); } foreach (var currentPolicy in policies) { if (!currentPolicy.Enabled || currentPolicy.Data == null) { continue; } if (enforcedOptions == null) { enforcedOptions = new MasterPasswordPolicyOptions(); } var minComplexity = GetPolicyInt(currentPolicy, "minComplexity"); if (minComplexity != null && (int)(long)minComplexity > enforcedOptions.MinComplexity) { enforcedOptions.MinComplexity = (int)(long)minComplexity; } var minLength = GetPolicyInt(currentPolicy, "minLength"); if (minLength != null && (int)(long)minLength > enforcedOptions.MinLength) { enforcedOptions.MinLength = (int)(long)minLength; } var requireUpper = GetPolicyBool(currentPolicy, "requireUpper"); if (requireUpper != null && (bool)requireUpper) { enforcedOptions.RequireUpper = true; } var requireLower = GetPolicyBool(currentPolicy, "requireLower"); if (requireLower != null && (bool)requireLower) { enforcedOptions.RequireLower = true; } var requireNumbers = GetPolicyBool(currentPolicy, "requireNumbers"); if (requireNumbers != null && (bool)requireNumbers) { enforcedOptions.RequireNumbers = true; } var requireSpecial = GetPolicyBool(currentPolicy, "requireSpecial"); if (requireSpecial != null && (bool)requireSpecial) { enforcedOptions.RequireSpecial = true; } } return(enforcedOptions); }