#!/usr/bin/perl --
# 
# $Id: rndpassword 8 2006-10-19 23:59:11Z ryo $

use strict;
use Getopt::Std;
use Data::SimplePassword;

# getopts
Getopt::Std::getopts 'ht:n:' => my $opt = {};

# help
&HELP_MESSAGE if defined $opt->{h};

# length
my $n = $opt->{n} || 8;
&usage unless $n =~ /^\d+$/o;

# type
my $chars = {
	default => [ 0..9, 'a'..'z', 'A'..'Z' ],
	base64 => [ 0..9, 'a'..'z', 'A'..'Z', qw(+ /) ],
	simple => [ 0..9, 'a'..'z' ],
	digit => [ 0..9 ],
};

my $type = $opt->{t} || 'default';
&usage unless scalar grep { $type eq $_ } keys %{ $chars };

my $sp = Data::SimplePassword->new;
$sp->chars( @{ $chars->{ $type } } );

print $sp->make_password( $n ), "\n";

sub usage {
	require File::Basename;
	printf STDERR "usage: %s [-h] [-t (default|base64|simple|digit)] [-n <length>] \n", File::Basename::basename( $0 );
	exit 1;
}

sub HELP_MESSAGE {
	eval { system("perldoc $0") };
	exit 0;
}

__END__

=pod

=head1 NAME

rndpassword - a commandline frontend to Data::SimplePassword

=head1 USAGE

usage: rndpassword [-h] [-t (default|base64|simple|digit)] [-n <length>]

=head1 OPTIONS

    -h  show usage
    -t  set charactor type
    -n  set length (default: 8 byte)

=head1 EXAMPLES

 shell> rndpassword
 shell> rndpassword -t simple -n 12
 shell> rndpassword -t digit -n 32

=head1 DEPENDENCY

Data::SimplePassword

=cut
