First buggy but worked version :)
This commit is contained in:
parent
ea307156d8
commit
992d7268ef
@ -5,15 +5,14 @@ use Clipboard;
|
|||||||
sub new {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
|
|
||||||
my $self = { _password => shift, };
|
my $self = {};
|
||||||
|
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub copy {
|
sub copy {
|
||||||
my ($self) = @_;
|
my ( $self, $password ) = @_;
|
||||||
my $password = $self->{_password};
|
|
||||||
|
|
||||||
if ( 'Clipboard::Xclip' eq $Clipboard::driver ) {
|
if ( 'Clipboard::Xclip' eq $Clipboard::driver ) {
|
||||||
no warnings 'redefine';
|
no warnings 'redefine';
|
||||||
|
11
Database.pm
11
Database.pm
@ -3,6 +3,8 @@ package Database;
|
|||||||
use DBI;
|
use DBI;
|
||||||
use GPG;
|
use GPG;
|
||||||
|
|
||||||
|
use Password;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
|
|
||||||
@ -51,7 +53,7 @@ sub mdo {
|
|||||||
return $q_hash;
|
return $q_hash;
|
||||||
}
|
}
|
||||||
elsif ( $type eq 'do' ) {
|
elsif ( $type eq 'do' ) {
|
||||||
$dbh->do($q) or die "$!\n";
|
$dbh->do("$q") or die "$!\n";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -72,15 +74,19 @@ sub create_base {
|
|||||||
if ( !( -d $pm_dir ) ) {
|
if ( !( -d $pm_dir ) ) {
|
||||||
|
|
||||||
# Create dirrectory
|
# Create dirrectory
|
||||||
|
print "Creating configuration dirrectory...\n";
|
||||||
my @mkdir_cmd = ( "mkdir", "$pm_dir" );
|
my @mkdir_cmd = ( "mkdir", "$pm_dir" );
|
||||||
system(@mkdir_cmd) == 0 or die "Cannot create dir $pm_dir: $!\n";
|
system(@mkdir_cmd) == 0 or die "Cannot create dir $pm_dir: $!\n";
|
||||||
|
|
||||||
my $first_sqlite = '/tmp/db.sqlite';
|
my $pass = Password->new();
|
||||||
|
my $string = $pass->generate();
|
||||||
|
my $first_sqlite = "/tmp/$string";
|
||||||
|
|
||||||
# Create DB file
|
# Create DB file
|
||||||
my @createdb_cmd = ( "touch", "$first_sqlite" );
|
my @createdb_cmd = ( "touch", "$first_sqlite" );
|
||||||
system(@createdb_cmd) == 0 or die "Cannot create database file: $!\n";
|
system(@createdb_cmd) == 0 or die "Cannot create database file: $!\n";
|
||||||
|
|
||||||
|
print "Creating database...\n";
|
||||||
# Create table.
|
# Create table.
|
||||||
my $dbh = DBI->connect( "dbi:SQLite:dbname=$first_sqlite", "", "" );
|
my $dbh = DBI->connect( "dbi:SQLite:dbname=$first_sqlite", "", "" );
|
||||||
print "Create database schema\n";
|
print "Create database schema\n";
|
||||||
@ -88,6 +94,7 @@ sub create_base {
|
|||||||
= "create table passwords(name VARCHAR(32), resource TEXT, password TEXT)";
|
= "create table passwords(name VARCHAR(32), resource TEXT, password TEXT)";
|
||||||
$dbh->do($q_table);
|
$dbh->do($q_table);
|
||||||
|
|
||||||
|
print "Encrypt database...\n";
|
||||||
# Encrypt db
|
# Encrypt db
|
||||||
$gpg->encrypt_db($first_sqlite);
|
$gpg->encrypt_db($first_sqlite);
|
||||||
|
|
||||||
|
21
GPG.pm
21
GPG.pm
@ -1,12 +1,13 @@
|
|||||||
# GPG layer for encrypt/decrypt passwords database
|
# GPG layer for encrypt/decrypt passwords database
|
||||||
package GPG;
|
package GPG;
|
||||||
|
|
||||||
our $gpg = '/usr/bin/gpg';
|
# Debug
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
|
|
||||||
my $home = shift;
|
my $home = $ENV{HOME};
|
||||||
my $db = $home . "/.PM/db.sqlite";
|
my $db = $home . "/.PM/db.sqlite";
|
||||||
|
|
||||||
my $self = { _db => $db, };
|
my $self = { _db => $db, };
|
||||||
@ -25,13 +26,13 @@ sub encrypt_db {
|
|||||||
@rm_db = ( "rm", "-f", "$db" );
|
@rm_db = ( "rm", "-f", "$db" );
|
||||||
system(@rm_db) == 0 or die "Cannot remove old database: $!\n";
|
system(@rm_db) == 0 or die "Cannot remove old database: $!\n";
|
||||||
|
|
||||||
# gpg --output test.gpg --encrypt -a --default-recipient-self test
|
# gpg --output test.gpg --encrypt test -a --default-recipient-self
|
||||||
@enc_cmd = (
|
@enc_cmd = (
|
||||||
"$gpg", "--output",
|
"gpg", "--output", "$db",
|
||||||
"$db", "--encrypt",
|
"-a", "--default-recipient-self",
|
||||||
"-a", "--default-recipient-self",
|
"--encrypt", "$file",
|
||||||
"$file"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
system(@enc_cmd) == 0
|
system(@enc_cmd) == 0
|
||||||
or die "Cannot encrypt!\nDecrypted file: $file\nTraceback: $!\n";
|
or die "Cannot encrypt!\nDecrypted file: $file\nTraceback: $!\n";
|
||||||
|
|
||||||
@ -48,6 +49,8 @@ sub decrypt_db {
|
|||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
my $db = $self->{_db};
|
my $db = $self->{_db};
|
||||||
|
|
||||||
|
my $gpg = '/usr/bin/gpg';
|
||||||
|
|
||||||
# Generate random file name
|
# Generate random file name
|
||||||
my @chars = ( "A" .. "Z", "a" .. "z" );
|
my @chars = ( "A" .. "Z", "a" .. "z" );
|
||||||
my $string;
|
my $string;
|
||||||
@ -55,8 +58,8 @@ sub decrypt_db {
|
|||||||
my $file = '/tmp/' . 'pm.' . $string;
|
my $file = '/tmp/' . 'pm.' . $string;
|
||||||
|
|
||||||
# gpg --output /tmp/decryptfile --decrypt $db
|
# gpg --output /tmp/decryptfile --decrypt $db
|
||||||
@dec_cmd = ( "$gpg", "--decrypt", "$db", "--output", "$file" );
|
@dec_cmd = ( "$gpg", "--output", "$file", "--decrypt", "$db" );
|
||||||
system(@sys_dec_cmd) == 0 or die "Cannot decrypt $db: $!\n";
|
system(@dec_cmd) == 0 or die "Cannot decrypt $db: $!\n";
|
||||||
|
|
||||||
return $file;
|
return $file;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,9 @@ use utf8;
|
|||||||
use Database;
|
use Database;
|
||||||
use GPG;
|
use GPG;
|
||||||
|
|
||||||
|
# Debug
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
|
|
||||||
@ -67,7 +70,8 @@ sub save {
|
|||||||
# Decrypt database
|
# Decrypt database
|
||||||
my $dec_db_file = $gpg->decrypt_db();
|
my $dec_db_file = $gpg->decrypt_db();
|
||||||
my $q
|
my $q
|
||||||
= "insert into passwords(name, resource, password) values($name, $resource, $password)";
|
= "insert into passwords(name, resource, password)
|
||||||
|
values('$name', '$resource', '$password')";
|
||||||
my $mdo_q = {
|
my $mdo_q = {
|
||||||
file => $dec_db_file,
|
file => $dec_db_file,
|
||||||
name => $name,
|
name => $name,
|
||||||
@ -100,6 +104,7 @@ sub check_config {
|
|||||||
my $db = $self->{_db};
|
my $db = $self->{_db};
|
||||||
$db->create_base();
|
$db->create_base();
|
||||||
|
|
||||||
|
print "Done!\n";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
10
pm.pl
10
pm.pl
@ -7,7 +7,7 @@ use ClipPass;
|
|||||||
# Debug
|
# Debug
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
our $VERSION = '0.0.1c';
|
our $VERSION = '0.0.1-alpha';
|
||||||
|
|
||||||
sub usage() {
|
sub usage() {
|
||||||
print STDERR << "EOF";
|
print STDERR << "EOF";
|
||||||
@ -61,7 +61,7 @@ sub init() {
|
|||||||
my $pass = Password->new();
|
my $pass = Password->new();
|
||||||
|
|
||||||
# Don't use it's before GPG and Database
|
# Don't use it's before GPG and Database
|
||||||
# $pass->check_config() == 0 or die "$!\n";
|
$pass->check_config() == 0 or die "$!\n";
|
||||||
|
|
||||||
# Parse cmd line
|
# Parse cmd line
|
||||||
init();
|
init();
|
||||||
@ -73,9 +73,11 @@ my $copy = ClipPass->new();
|
|||||||
if ( defined($opt_s) and defined($opt_n) and !defined($opt_o) ) {
|
if ( defined($opt_s) and defined($opt_n) and !defined($opt_o) ) {
|
||||||
|
|
||||||
my $get_h = $pass->show($opt_n);
|
my $get_h = $pass->show($opt_n);
|
||||||
$copy->copy($get_h->{password});
|
my $get_pass = $get_h->{password};
|
||||||
|
|
||||||
print "Password copied to xclipboard.\nURI is " . $get_h->{resource};
|
$copy->copy($get_pass);
|
||||||
|
|
||||||
|
print "Password copied to xclipboard.\nURI is " . $get_h->{resource} . "\n";
|
||||||
}
|
}
|
||||||
elsif ( defined($opt_s) and defined($opt_n) and defined($opt_o) ) {
|
elsif ( defined($opt_s) and defined($opt_n) and defined($opt_o) ) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user