/lib/AwesomeGrid/Keyring.pm
package AwesomeGrid::Keyring;
use strict;

use AwesomeGrid;
use AwesomeGrid::Config;

my $config = AwesomeGrid::Config::config();
my $gpg = $config->{gpg} || '/usr/bin/gpg';

sub gpg {
	system(qq!$gpg --no-default-keyring --keyring "$AwesomeGrid::confdir/keyring/pubring.gpg" --secret-keyring "$AwesomeGrid::confdir/keyring/secring.gpg" --trustdb-name "$AwesomeGrid::confdir/keyring/trustdb.gpg" ! . join(' ',@_));
}

sub gpgpass {
	my $passphrase = shift;
	open GPG, qq!|$gpg --batch --passphrase-fd 0 --no-default-keyring --keyring "$AwesomeGrid::confdir/keyring/pubring.gpg" --secret-keyring "$AwesomeGrid::confdir/keyring/secring.gpg" --trustdb-name "$AwesomeGrid::confdir/keyring/trustdb.gpg" ! . join(' ',@_);
	print GPG $passphrase;
	close GPG;
}

sub initialize {
	if (-e "$AwesomeGrid::confdir/keyring/secring.gpg") {
		print "Refusing to clobber existing keyring.\n";
		return;
	}
	if (!-d "$AwesomeGrid::confdir/keyring") {
	        mkdir "$AwesomeGrid::confdir/keyring";
	}
	gpg('--gen-key');
}

sub import_key {
	my $file = shift;
	gpg(qq{--import "$file"});
}

sub export_key {
	my $who = shift;
	gpg(qq{--output $who-pubkey.asc --armor --export $who});
	print "Wrote $who-pubkey.asc\n";
}

sub list {
	gpg('--list-keys');
}

sub encrypt {
	my $who = shift;
	my $in = shift;
	my $out = shift;
	my $passphrase = shift;

	gpgpass($passphrase,qq{--recipient $who --sign --encrypt --output "$out" "$in"});
}

1;