#!/usr/bin/perl -wT
## Skript, dass sich eine Mail via STDIN entgegen nimmt und darin mögliche
## PGP-KeyIDs bzw. UserIDs extrahiert. Der Benutzer kann nachher festlegen,
## welchen Key er via dem pgp.net-Keyserver-Mailinterface holen möchte.
##
## (c) 29.06.2000, Thomas Bader <thomasb@trash.net>
## Benutzung unter beliebiger GPL

#
# Die Perlmodule vorbereiten
# 

use Mail::Mailer;			# Bequem Mails verschicken
use Mail::Address;			# Headerzeilen parsen
use Term::ReadKey;			# Benutzereingaben lesen

#
# Konfiguration
#

# Deine eMailadresse
my $myaddr = 'thomasb@trash.net';

# Deine Topleveldomain (CH = Schweiz)
my $tld = 'ch';

#
# Beginn der Arbeit
#

$| = 1;										# Pufferung
my $mua = Mail::Mailer->new("sendmail");	# Ein Mail::Mailer-Objekt erstellen
my @addrs;									# Hierein kommen die potenziellen
											# KeyIDs bzw. UserIDs

foreach (<STDIN>) {

	if ($_ =~ /^From:/) {
		$_ =~ s/^From: //;
		my @temp_addrs = Mail::Address->parse($_);
		push(@addrs, $temp_addrs[0]->address);
		undef @temp_addrs;
	}

	if ($_ =~ /^Reply-To:/) {
		$_ =~ s/^Reply-To: //;
		my @temp_addrs = Mail::Address->parse($_);
		push(@addrs, $temp_addrs[0]->address);
		undef @temp_addrs;
	}

	if ($_ =~ /(0x[0-9A-Fa-f]+)/ ) {
		push(@addrs, $1);
	}

}

# Mindestens eine Adresse muss da sein
if (! defined( $addrs[0] ) ) {

	die("\nSorry, ich habe keine gültigen Key- bzw. UserIDs gefunden.\n\n");

}

print "\nWelchen Key möchtest Du holen?\n\n";
my $n = "1";

foreach (@addrs) {

	print "[$n] $_\n";
	$n++;
}

print "\nEingabe: ";

# Umständlich? Ja!
# Leider kann ich die Eingabe nicht mehr von STDIN holen, da darüber schon
# die Mail kam :-/
open(TTY,"</dev/tty");			# Direkt auf das Devicefile vom Terminal zugreifen
ReadMode 'raw';					# raw-Modus
my $choice = ReadKey 0, *TTY;	# gedrückte Taste holen
ReadMode 'normal';				# cooked-Modus
close(TTY);						# Filehandle aufgeben

# Die Auswahl müssen wir um eins verkleinern, da ein Array beginnend mit 0
# nummeriert wird.
$choice--;

my %header = 	('To'=>"pgp-public-keys\@keys." . $tld . ".pgp.net",
				'From'=>"$myaddr",
				'Subject'=>"get " . $addrs[$choice] );
$mua->open(\%header);
print $mua "Ich möchte den Schluessel $addrs[$choice], bitte!";
$mua->close;

print "\nKey " . $addrs[$choice] . " geholt.\n";
print "Du musst noch eine Weile warten, bis der Keyserver Dir eine Antwort geschickt\n";
print "hat.\n\n";

##
## Ende der Datei
##
# vim: tw=79 tabstop=4 expandtab!
