Example #1
0
        /// <summary>
        /// Generates a password according to provided parameters.
        /// </summary>
        /// <param name="length">The length.</param>
        /// <param name="passwordPattern">The password pattern.</param>
        /// <param name="passwordCase">The password case.</param>
        /// <returns></returns>
        public string Generate(int length, PasswordPattern passwordPattern, PasswordCase passwordCase)
        {
            StringBuilder sb = new StringBuilder(length);
            char[] passwordValues = new char[0];
            int oldArrayLength = 0;

            switch(passwordPattern)
                {
                    case PasswordPattern.AlphaNumericExtended:
                        // Add Extended Chars
                        oldArrayLength = passwordValues.Length;
                        Array.Resize(ref passwordValues, extendedValues.Length);
                        extendedValues.CopyTo(passwordValues, oldArrayLength);
                        goto case PasswordPattern.Alpha;
                    case PasswordPattern.AlphaNumeric:
                    case PasswordPattern.Alpha:
                        oldArrayLength = passwordValues.Length;
                        switch(passwordCase)
                        {
                            case PasswordCase.Lowercase:
                                Array.Resize(ref passwordValues, passwordValues.Length + alphaLowValues.Length);
                                alphaLowValues.CopyTo(passwordValues, oldArrayLength);
                                break;
                            case PasswordCase.Uppercase:
                                Array.Resize(ref passwordValues, passwordValues.Length + alahaUpValues.Length);
                                alahaUpValues.CopyTo(passwordValues, oldArrayLength);
                                break;
                            case PasswordCase.Mixed:
                                Array.Resize(ref passwordValues, passwordValues.Length + alphaLowValues.Length + alahaUpValues.Length);
                                alphaLowValues.CopyTo(passwordValues, oldArrayLength);
                                alahaUpValues.CopyTo(passwordValues, oldArrayLength + alphaLowValues.Length);
                                break;
                        }
                        if(passwordPattern == PasswordPattern.AlphaNumeric || passwordPattern == PasswordPattern.AlphaNumericExtended)
                            goto case PasswordPattern.Numeric;
                        break;
                    case PasswordPattern.Numeric:
                        oldArrayLength = passwordValues.Length;
                        Array.Resize(ref passwordValues, passwordValues.Length + numericValues.Length);
                        numericValues.CopyTo(passwordValues, oldArrayLength);
                        break;
                }

            for (int i = 0; i < length; i++)
            {
                sb.Append(selectRandomChar(passwordValues));
            }

            return sb.ToString();
        }
        public void PasswordPatternNotMatches(string pattern, string password)
        {
            var passwordPattern = new PasswordPattern(pattern);

            passwordPattern.IsMatch(password).Should().BeFalse();
        }