App-locket

 view release on metacpan or  search on metacpan

lib/App/locket/Locket.pm  view on Meta::CPAN

package App::locket::Locket;

use strict;
use warnings;

use Crypt::Rijndael;
use Crypt::Random qw/ makerandom_octet /;
use Digest::SHA qw/ sha256 sha256_hex /;
use MIME::Base64;
use JSON; my $JSON = JSON->new->pretty;
use File::HomeDir;
use Path::Class;
use Term::ReadKey;
use YAML::XS();
use File::Temp;
use Try::Tiny;
use String::Util qw/ trim /;

use App::locket::Store;
 
use App::locket::Moose;

has_file cfg_file => qw/ is ro required 1 /;

sub open {
    my $self = shift;
    my $file = shift;
    return $self->new( cfg_file => $file );
}

has passphrase => qw/ is rw isa Maybe[Str] /;

sub require_passphrase {
    my $self = shift;
    return 0 if ! -f $self->cfg_file;
    my $ciphercfg = $self->read_cfg;
    return $ciphercfg =~ m/^\s*\{/;
}

has cfg => qw/ is ro isa HashRef lazy_build 1 clearer clear_cfg /;
sub _build_cfg {
    my $self = shift;
    return $self->load_cfg;
}

has ciphercfg => qw/ is ro isa Str lazy_build 1 clearer clear_ciphercfg/;
sub _build_ciphercfg {
    my $self = shift;
    return $self->read_cfg;
}

has plaincfg => qw/ is ro isa Maybe[Str] lazy_build 1 clearer clear_plaincfg /;
sub _build_plaincfg {
    my $self = shift;
    my $ciphercfg = $self->read_cfg;
    if ( $self->require_passphrase ) {
        my $passphrase = $self->passphrase;
        my $plaincfg = $self->unpickle( $passphrase, $ciphercfg, plaintext => 1 );
    }
    else {
        return $ciphercfg; # Actually not a "ciphercfg"
    }
}

has plainstore => qw/ is ro isa Str lazy_build 1 clearer clear_plainstore /;
sub _build_plainstore {
    my $self = shift;
    return $self->read;
}

has store => qw/ is ro isa App::locket::Store lazy_build 1 clearer clear_store /;
sub _build_store {
    my $self = shift;
    return $self->load;
}



( run in 1.361 second using v1.01-cache-2.11-cpan-39bf76dae61 )