aboutsummaryrefslogtreecommitdiff
path: root/gpigeonctl
diff options
context:
space:
mode:
Diffstat (limited to 'gpigeonctl')
-rwxr-xr-xgpigeonctl101
1 files changed, 0 insertions, 101 deletions
diff --git a/gpigeonctl b/gpigeonctl
deleted file mode 100755
index 47542bb..0000000
--- a/gpigeonctl
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /usr/bin/perl -T
-
-use warnings;
-use strict;
-use Email::Valid;
-use Term::ReadKey;
-use Crypt::Argon2 qw(argon2id_pass);
-use SQLite::DB;
-delete @ENV{qw(IFS PATH CDPATH BASH_ENV)};
-$ENV{'PATH'} = '/usr/bin';
-my $db_path = '/usr/share/gpigeon/the.db';
-my $escaddr = undef;
-
-sub EscapeArobase {
- my $escapedmailaddress = shift;
- $escapedmailaddress =~ s/@/\\@/;
- return $escapedmailaddress;
-}
-
-if (defined $ARGV[0] and $ARGV[0] eq 'init'){
- if ( -e $db_path){
- print "The database already exist !\n";
- print "Overwrite ? [o/n] ";
- my $ochoice = <STDIN>;
- chomp $ochoice;
- if ($ochoice eq "o"){
- unlink $db_path;
- }
- else {
- print "We won't overwrite.\n";
- exit 1;
- }
- }
- print "Your mail address: ";
- my $addr = <STDIN>;
-
- if (not Email::Valid->address($addr)){
- print "\nNot a valid email address.";
- exit 1;
- }
-
- print "\nYour nickname (optional): ";
- my $nick = <STDIN>;
- chomp $nick;
- if (length($nick) eq 0){
- $nick = $addr;
- }
- elsif (defined $nick and not $nick =~ /^([\w]+)$/){
- print "\nYour nickname must have only alphanumeric characters.\n";
- exit 1;
- }
-
- ReadMode 2;
- print "\nPassword: ";
- my $pass = <STDIN>;
- if (not length($pass) > 10){
- print "\nFor your safety, you should have a password at least 10 characters long.\n";
- ReadMode 1;
- exit 1;
- }
- ReadMode 1;
- chomp $pass;
- my $salt = `openssl rand 16`;
- my $hash = argon2id_pass($pass, $salt, 3, '32M', 1, 32);
-
- use GPG;
- #my $GHOMEDIR = 'testgpg/';
- #my $escaddr = EscapeArobase($addr);
- if ($addr =~ /^([-\@\w.]+)$/) {
- $addr = $1; # $data now untainted
- $escaddr = EscapeArobase($addr);
- } else {
- die "uh oh\n"; # log this somewhere
- }
- my $gpgid = `gpg --with-colons -k $escaddr | grep "pub:u" | cut -d':' -f5`;
- #my $gpgid = <STDIN>;
- chomp $gpgid;
- if (not $gpgid =~ /^([\w]+)$/ and not length($gpgid) eq 16){
- print "\nYour GPG 0xlong key id is not a correct one. It seems that no public key was assiocated with the provided e-mail address.\n";
- exit 1;
- }
- else{
- $gpgid = $1;
- }
- `gpg -a --export 0x$gpgid > key.asc && gpg --homedir /tmp/testgpg/ --no-default-keyring --keyring=test.kbx --import key.asc 2>&1 /dev/null`;
- my $gpg = new GPG(gnupg_path => "/usr/bin", homedir => "/tmp/testgpg");
- my $enc_msg = $gpg->encrypt("test", $gpgid)
- or die "\nOops, it seems gpg won't encrypt the test message. Here's why :\n",$gpg->error();
-
- my $db = SQLite::DB->new($db_path);
- $db->connect;
- $db->transaction_mode;
- $db->exec("create table pigeons (userid integer primary key, mail text, name text, pass text, gpgfp text, isadmin integer);");
- $db->exec("create table cookies (forid integer, value text);");
- $db->exec("create index idx_pigeonsid on pigeons(userid);");
- $db->exec("create index idx_cookiesforid on cookies(forid);");
- $db->exec("INSERT INTO pigeons VALUES( ?, '$addr', '$nick', '$hash', '0x$gpgid', 1)");
- $db->commit or die;
- $db->disconnect;
- print "\nThe database has been initialized.\n";
-}