Esempio n. 1
0
        // .................................................................................................

        public string Generate(int pLength, PasswordGeneratorOptionsEx pOptions)
        {
            if (pLength < PasswordMinLength)
            {
                pLength = PasswordMinLength;
            }

            Password password = new Password();

            while (password.PasswordLength < pLength)
            {
                PasswordChunk chunk = GenerateNextChunk(password);
                password.AppendChunk(chunk);
            }

            bool capitalsRandom = false;

            if (pOptions.Options.HasFlag(PasswordGeneratorOptions.Capitals))
            {
                if (pOptions.Options.HasFlag(PasswordGeneratorOptions.CapitalsFirstInChunks) ||
                    pOptions.Options.HasFlag(PasswordGeneratorOptions.CapitalsLastInChunks))
                {
                    CapitalizeChunks(password, pOptions.Options);
                }
                else
                {
                    capitalsRandom = true;
                }
            }

            if (pOptions.Options.HasFlag(PasswordGeneratorOptions.Specials))
            {
                InsertSpecialChunk(password, pOptions.SpecialGroupSymbols, !pOptions.Options.HasFlag(PasswordGeneratorOptions.SpecialsNotBlank), pOptions.SpecialGroupsMin, pOptions.SpecialGroupsMax);
            }

            if (capitalsRandom)
            {
                CapitalizeRandomPassword(password, pOptions.CapitalsMinimum, pOptions.CapitalsMaximum);
            }

            if (pOptions.Options.HasFlag(PasswordGeneratorOptions.Separators))
            {
                InsertSeparators(password, pOptions.Options.HasFlag(PasswordGeneratorOptions.SeparatorRotation), pOptions.FixedSeparatorChar);
            }

            LastPassword = password;

            return(password.Text);
        }