SYNOPSIS

        use App::Genpass;
    
        my $genpass = App::Genpass->new();
        print $genpass->generate, "\n";
    
        $genpass = App::Genpass->new( readable => 0, length => 20 );
        print "$_\n" for $genpass->generate(10);

DESCRIPTION

    If you've ever needed to create 10 (or even 10,000) passwords on the
    fly with varying preferences (lowercase, uppercase, no confusing
    characters, special characters, minimum length, etc.), you know it can
    become a pretty pesky task.

    This module makes it possible to create flexible and secure passwords,
    quickly and easily.

        use App::Genpass;
        my $genpass = App::Genpass->new();
    
        my $single_password    = $genpass->generate(1);  # returns scalar
        my @single_password    = $genpass->generate(1);  # returns array
        my @multiple_passwords = $genpass->generate(10); # returns array again
        my $multiple_passwords = $genpass->generate(10); # returns arrayref

    This distribution includes a program called genpass, which is a command
    line interface to this module. If you need a program that generates
    passwords, use genpass.

SUBROUTINES/METHODS

 new

    Creates a new instance. It gets a lot of options.

 new_with_options

    Creates a new instance while reading the command line parameters.

 parse_opts

    Parses the command line options.

 configfile

    An attribute defining the configuration file that will be used. If one
    is not provided, it tries to find one on its own. It checks for a
    .genpass.yaml in your home directory (using File::HomeDir), and then
    for /etc/genpass.yaml.

    If one is available, that's what it uses. Otherwise nothing.

    You must use the new_with_options method described above for this.

  flags

    These are boolean flags which change the way App::Genpass works.

    number

      You can decide how many passwords to create. The default is 1.

      This can be overridden per generate so you can have a default of 30
      but in a specific case only generate 2, if that's what you want.

    readable

      Use only readable characters, excluding confusing characters: "o",
      "O", "0", "l", "1", "I", and special characters such as '#', '!', '%'
      and other symbols.

      You can overwrite what characters are considered unreadable under
      "character attributes" below.

      Default: on.

    verify

      Verify that every type of character wanted (lowercase, uppercase,
      numerical, specials, etc.) are present in the password. This makes it
      just a tad slower, but it guarantees the result. Best keep it on.

      To emphasize how "slower" it is: if you create 500 passwords of 500
      character length, using verify off, will make it faster by 0.1
      seconds.

      Default: on.

  attributes

    minlength

      The minimum length of password to generate.

      Default: 8.

    maxlength

      The maximum length of password to generate.

      Default: 10.

    length

      Use this if you want to explicitly specify the length of password to
      generate.

  character attributes

    These are the attributes that control the types of characters. One can
    change which lowercase characters will be used or whether they will be
    used at all, for example.

        # only a,b,c,d,e,g will be consdered lowercase and no uppercase at all
        my $gp = App::Genpass->new( lowercase => [ 'a' .. 'g' ], uppercase => [] );

    lowercase

      All lowercase characters, excluding those that are considered
      unreadable if the readable flag (described above) is turned on.

      Default: [ 'a' .. 'z' ] (not including excluded chars).

    uppercase

      All uppercase characters, excluding those that are considered
      unreadable if the readable flag (described above) is turned on.

      Default: [ 'A' .. 'Z' ] (not including excluded chars).

    numerical

      All numerical characters, excluding those that are considered
      unreadable if the readable flag (described above) is turned on.

      Default: [ '0' .. '9' ] (not including excluded chars).

    unreadable

      All characters which are considered (by me) unreadable. You can
      change this to what you consider unreadable characters. For example:

          my $gp = App::Genpass->new( unreadable => [ qw(jlvV) ] );

      After all the characters are set, unreadable characters will be
      removed from all sets.

      Thus, unreadable characters override all other sets. You can make
      unreadable characters not count by using the readable => 0 option,
      described by the readable flag above.

    specials

      All special characters.

      Default: [ '!', '@', '#', '$', '%', '^', '&', '*', '(', ')' ].

      (not including excluded chars)

 generate

    This method generates the password or passwords.

    It accepts an optional parameter indicating how many passwords to
    generate.

        $gp = App::Genpass->new();
        my @passwords = $gp->generate(300); # 300 passwords to go

    If you do not provide a parameter, it will use the default number of
    passwords to generate, defined by the attribute number explained above.

    This method tries to be tricky and DWIM (or rather, DWYM). That is, if
    you request it to generate only one password and use scalar context (my
    $p = $gp->generate(1)), it will return a single password.

    However, if you try to generate multiple passwords and use scalar
    context (my $p = $gp->generate(30)), it will return an array reference
    for the passwords.

    Generating passwords with list context (my @p = $gp->generate(...))
    will always return a list of the passwords, even if it's a single
    password.

 get_config_from_file

    Reads the configuration file using Config::Any.

    Shamelessly lifted from MooseX::SimpleConfig.

AUTHOR

    Sawyer X, <xsawyerx at cpan.org>

DEPENDENCIES

    Carp

    Moo

    MooX::Types::MooseLike

    Getopt::Long

    File::Spec

    Config::Any

    File::HomeDir

    List::AllUtils

BUGS AND LIMITATIONS

    Please report any bugs or feature requests to bug-app-genpass at
    rt.cpan.org, or through the web interface at
    http://rt.cpan.org/NoAuth/ReportBug.html?Queue=App-Genpass. I will be
    notified, and then you'll automatically be notified of progress on your
    bug as I make changes.

SUPPORT

    You can find documentation for this module with the perldoc command.

        perldoc App::Genpass

    You can also look for information at:

      * Github: App::Genpass repository

      http://github.com/xsawyerx/app-genpass

      * RT: CPAN's request tracker

      http://rt.cpan.org/NoAuth/Bugs.html?Dist=App-Genpass

      * AnnoCPAN: Annotated CPAN documentation

      http://annocpan.org/dist/App-Genpass

      * CPAN Ratings

      http://cpanratings.perl.org/d/App-Genpass

      * Search CPAN

      http://search.cpan.org/dist/App-Genpass/