/// <summary>
        /// Generate a new password
        /// </summary>
        /// <param name="policy">Policy that should be used when generating a new password.</param>
        /// <returns>A password which is not encrypted.</returns>
        /// <remarks>Uses characters which can't be mixed up along with <![CDATA["@!?&%/\"]]> if non alphas are required</remarks>
        public static string GeneratePassword(this IAccountPolicy policy)
        {
            var length   = Random.Next(policy.PasswordMinimumLength, policy.PasswordMinimumLength + 3);
            var password = "";

            var allowedCharacters = AllowedChars;

            if (policy.MinRequiredNonAlphanumericCharacters > 0)
            {
                allowedCharacters += AllowedAlphas;
            }

            var nonAlphaLeft = policy.MinRequiredNonAlphanumericCharacters;

            for (var i = 0; i < length; i++)
            {
                var ch = allowedCharacters[Random.Next(0, allowedCharacters.Length)];
                if (AllowedAlphas.IndexOf(ch) != -1)
                {
                    nonAlphaLeft--;
                }

                if (length - i <= nonAlphaLeft)
                {
                    ch = AllowedAlphas[Random.Next(0, AllowedAlphas.Length)];
                }

                password += ch;
            }

            return(password);
        }
        /// <summary>
        /// Determines whether the password is valid by going through all defined policies.
        /// </summary>
        /// <param name="accountPolicy">The password policy.</param>
        /// <param name="password">The password.</param>
        /// <returns>
        ///   <c>true</c> if the password is valid; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsPasswordValid(this IAccountPolicy accountPolicy, string password)
        {
            var alphaCount = password.Count(ch => !char.IsLetterOrDigit(ch));

            if (alphaCount < accountPolicy.MinRequiredNonAlphanumericCharacters)
            {
                return(false);
            }
            return(password.Length >= accountPolicy.PasswordMinimumLength);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Checks if the specified password is valid
 /// </summary>
 /// <param name="password">Password being checked</param>
 /// <param name="accountPolicy">Policy used to validate password.</param>
 /// <returns></returns>
 public bool IsValid(string password, IAccountPolicy accountPolicy)
 {
     return(accountPolicy.IsPasswordValid(password));
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Generate a new password
 /// </summary>
 /// <param name="policy">Policy that should be used when generating a new password.</param>
 /// <returns>A password which is not encrypted.</returns>
 public string GeneratePassword(IAccountPolicy policy)
 {
     return(policy.GeneratePassword());
 }