diff options
Diffstat (limited to 'lib/App/Raps2.pm')
-rw-r--r-- | lib/App/Raps2.pm | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/lib/App/Raps2.pm b/lib/App/Raps2.pm index 00cbde4..6710d48 100644 --- a/lib/App/Raps2.pm +++ b/lib/App/Raps2.pm @@ -1,6 +1,31 @@ package App::Raps2; +=head1 NAME +App::Raps2 - A Password safe + +=head1 SYNOPSIS + + use App::Raps2; + + my $raps2 = App::Raps2->new(); + my ($action, @args) = @ARGV; + + $raps2->sanity_check(); + $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) } + } + +=head1 DESCRIPTION + +B<App::Raps2> is the backend for B<raps2>, a simple commandline password safe. + +=cut use strict; @@ -19,6 +44,14 @@ use File::Slurp qw(slurp write_file); our @EXPORT_OK = (); our $VERSION = '0.1'; +=head1 METHODS + +=head2 create_salt() + +Returns a 16-character random salt for App::Raps2::Password(3pm). + +=cut + sub create_salt { my $salt = q{}; @@ -29,6 +62,13 @@ sub create_salt { return $salt; } +=head2 file_to_hash($file) + +Reads $file (lines with key/value separated by whitespace) and returns a hash +with its key/value pairs. + +=cut + sub file_to_hash { my ($file) = @_; my %ret; @@ -45,6 +85,22 @@ sub file_to_hash { return %ret; } +=head2 new(%conf) + +Returns a new B<App::Raps2> object. + +Accepted configuration parameters are: + +=over + +=item B<cost> => I<int> + +B<cost> of key setup, passed on to App::Raps2::Password(3pm). + +=back + +=cut + sub new { my ($obj, %conf) = @_; my $ref = {}; @@ -60,6 +116,15 @@ sub new { return bless($ref, $obj); } +=head2 ->sanity_check() + +Create working directories (~/.config/raps2 and ~/.local/share/raps2, or the +respective XDG environment variable contents), if they don't exist yet. + +Calls B<create_config> if no raps2 config was found. + +=cut + sub sanity_check { my ($self) = @_; @@ -73,6 +138,12 @@ sub sanity_check { return; } +=head2 ->get_master_password() + +Asks the user for the master passphrase. + +=cut + sub get_master_password { my ($self) = @_; my $pass = $self->ui()->read_pw('Master Password', 0); @@ -86,6 +157,12 @@ sub get_master_password { $self->{'pass'}->verify($self->{'master_hash'}); } +=head2 ->create_config() + +Creates a default config and asks the user to set a master password. + +=cut + sub create_config { my ($self) = @_; my $cost = 12; @@ -107,6 +184,12 @@ sub create_config { ); } +=head2 ->load_config() + +Load config + +=cut + sub load_config { my ($self) = @_; my %cfg = file_to_hash($self->{'xdg_conf'} . '/password'); @@ -115,11 +198,23 @@ sub load_config { $self->{'default'}->{'cost'} //= $cfg{'cost'}; } +=head2 ->ui() + +Returns the App::Raps2::UI(3pm) object. + +=cut + sub ui { my ($self) = @_; return $self->{'ui'}; } +=head2 ->cmd_add($name) + +Adds a new password file called $name. + +=cut + sub cmd_add { my ($self, $name) = @_; my $pwfile = $self->{'xdg_data'} . "/${name}"; @@ -155,6 +250,12 @@ sub cmd_add { ); } +=head2 ->cmd_dump($name) + +Dumps the content of $name. + +=cut + sub cmd_dump { my ($self, $name) = @_; my $pwfile = $self->{'xdg_data'} . "/${name}"; @@ -179,6 +280,12 @@ sub cmd_dump { } } +=head2 ->cmd_get($name) + +Puts the password saved in $name into the X clipboard. + +=cut + sub cmd_get { my ($self, $name) = @_; my $pwfile = $self->{'xdg_data'} . "/${name}"; @@ -200,6 +307,11 @@ sub cmd_get { } } +=head2 ->cmd_info($name) + +Prints unencrypted information about $name. + +=cut sub cmd_info { my ($self, $name) = @_; |