App-Raps2
view release on metacpan or search on metacpan
#!/usr/bin/env perl
## Copyright © 2011-2015 by Daniel Friesel <derf@finalrewind.org>
## License: WTFPL:
## 0. You just DO WHAT THE FUCK YOU WANT TO.
use strict;
use warnings;
use 5.010;
no if $] >= 5.018, warnings => 'experimental::smartmatch';
use App::Raps2;
use File::BaseDir qw(data_files data_home);
use File::Slurp qw(read_dir);
use Getopt::Long qw(:config no_ignore_case);
my ( $chrome, $default_cost, $no_echo, $paste, $pwgen_cmd, $xclip_cmd );
our $VERSION = '0.54';
GetOptions(
'c|cost=i' => \$default_cost,
'C|chrome' => \$chrome,
'E|no-echo' => \$no_echo,
'h|help' => sub { cmd_help(0) },
'p|pwgen-cmd=s' => \$pwgen_cmd,
'P|paste' => \$paste,
'V|version' => sub { say "raps2 version ${VERSION}"; exit 0 },
'x|xclip-cmd=s' => \$xclip_cmd,
) or cmd_help(1);
if ($chrome) {
$xclip_cmd = 'xclip -l 2';
}
my ( $action, @args ) = @ARGV;
my $raps2 = App::Raps2->new(
cost => $default_cost,
pwgen_cmd => $pwgen_cmd,
xclip_cmd => $xclip_cmd,
);
sub file_must_exist {
my ( $file, $name ) = @_;
if ( not defined $file ) {
say STDERR "No such account: ${name}";
exit 2;
}
return;
}
sub file_must_not_exist {
my ( $file, $name ) = @_;
if ( -e $file ) {
say STDERR "Account already exists: ${name}";
exit 2;
}
return;
}
sub cmd_add {
my ($name) = @_;
if ( not $name ) {
cmd_help( 1, 'add <account>' );
}
my $pwfile = data_home('raps2') . "/${name}";
file_must_not_exist( $pwfile, $name );
$raps2->get_master_password();
my $url = $raps2->ui->read_line('URL');
my $login = $raps2->ui->read_line('Login');
my $pass = $raps2->ui->read_pw( 'Password', 1 );
my $extra = $raps2->ui->read_multiline('Additional content');
if ( length($pass) == 0 ) {
$pass = $raps2->generate_password();
if ( not $pass ) {
say STDERR "Password generation failed: ${!}: "
. $raps2->conf('pwgen_cmd');
exit 3;
}
if ($paste) {
$raps2->ui->to_clipboard( $pass, $raps2->conf('xclip_cmd') );
}
elsif ( not $no_echo ) {
$raps2->ui->output( [ 'Generated password', $pass ] );
}
}
$raps2->pw_save(
file => $pwfile,
url => $url,
login => $login,
password => $pass,
extra => $extra,
);
return;
}
sub cmd_dump {
my ($name) = @_;
if ( not $name ) {
cmd_help( 1, 'dump <account>' );
}
my $pwfile = data_files("raps2/${name}");
file_must_exist( $pwfile, $name );
$raps2->get_master_password();
my $key = $raps2->pw_load( file => $pwfile );
$raps2->ui->output(
[ 'URL', $key->{url} ],
[ 'Login', $key->{login} ],
[ 'Password', $key->{password} ],
);
if ( $key->{extra} ) {
print $key->{extra};
}
( run in 2.365 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )