From e4771e20354a2080638d266659595a5596bcadaf Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 10 Apr 2011 16:30:11 +0200 Subject: Add raps2 get (to clipboard) --- bin/raps2 | 1 + lib/App/Raps2.pm | 45 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/bin/raps2 b/bin/raps2 index c810fec..b7d1bc2 100755 --- a/bin/raps2 +++ b/bin/raps2 @@ -18,6 +18,7 @@ $raps2->load_config(); given ($action) { when ('add') { $raps2->cmd_add(@args) } when ('dump') { $raps2->cmd_dump(@args) } + when ('get') { $raps2->cmd_get(@args) } when ('info') { $raps2->cmd_info(@args) } } diff --git a/lib/App/Raps2.pm b/lib/App/Raps2.pm index 8078653..00cbde4 100644 --- a/lib/App/Raps2.pm +++ b/lib/App/Raps2.pm @@ -75,7 +75,7 @@ sub sanity_check { sub get_master_password { my ($self) = @_; - my $pass = $self->{'ui'}->read_pw('Master Password', 0); + my $pass = $self->ui()->read_pw('Master Password', 0); $self->{'pass'} = App::Raps2::Password->new( cost => $self->{'default'}->{'cost'}, @@ -90,7 +90,7 @@ sub create_config { my ($self) = @_; my $cost = 12; my $salt = create_salt(); - my $pass = $self->{'ui'}->read_pw('Master Password', 1); + my $pass = $self->ui()->read_pw('Master Password', 1); $self->{'pass'} = App::Raps2::Password->new( cost => $cost, @@ -115,10 +115,14 @@ sub load_config { $self->{'default'}->{'cost'} //= $cfg{'cost'}; } +sub ui { + my ($self) = @_; + return $self->{'ui'}; +} + sub cmd_add { my ($self, $name) = @_; my $pwfile = $self->{'xdg_data'} . "/${name}"; - my $ui = $self->{'ui'}; if (-e $pwfile) { confess('Password file already exists'); @@ -127,10 +131,10 @@ sub cmd_add { $self->get_master_password(); my $salt = create_salt(); - my $url = $ui->read_line('URL'); - my $login = $ui->read_line('Login'); - my $pass = $ui->read_pw('Password', 1); - my $extra = $ui->read_multiline('Additional content'); + my $url = $self->ui()->read_line('URL'); + my $login = $self->ui()->read_line('Login'); + my $pass = $self->ui()->read_pw('Password', 1); + my $extra = $self->ui()->read_multiline('Additional content'); $self->{'pass'}->salt($salt); my $pass_hash = $self->{'pass'}->encrypt($pass); @@ -165,13 +169,34 @@ sub cmd_dump { $self->{'pass'}->salt($key{'salt'}); - $self->{'ui'}->output( + $self->ui()->output( ['URL', $key{'url'}], ['Login', $key{'login'}], ['Password', $self->{'pass'}->decrypt($key{'hash'})], ); if ($key{'extra'}) { - say $self->{'pass'}->decrypt($key{'extra'}); + print $self->{'pass'}->decrypt($key{'extra'}); + } +} + +sub cmd_get { + my ($self, $name) = @_; + my $pwfile = $self->{'xdg_data'} . "/${name}"; + + if (not -e $pwfile) { + confess('Password file does not exist'); + } + + my %key = file_to_hash($pwfile); + + $self->get_master_password(); + + $self->{'pass'}->salt($key{'salt'}); + + $self->ui()->to_clipboard($self->{'pass'}->decrypt($key{'hash'})); + + if ($key{'extra'}) { + print $self->{'pass'}->decrypt($key{'extra'}) } } @@ -185,7 +210,7 @@ sub cmd_info { } my %key = file_to_hash($pwfile); - $self->{'ui'}->output( + $self->ui()->output( ['URL', $key{'url'}], ['Login', $key{'login'}], ); -- cgit v1.2.3