use Irssi;
use Email::Send;
use strict;
use vars qw($VERSION %IRSSI);

$VERSION = "1";
%IRSSI = (
	authors	=> 'Tom Wesley',
	contact	=> 'tom@tomaw.net',
	name	=> 'Sends an email to a given nick, requesting confirmation',
	license	=> 'as-is',
	changed => '20070728',
);

my $requester = "";
my $active = 0;

sub cmd_passreset {
	my ($data, $server, $witem) = @_;

	$requester = $data;
	$server->send_raw("NS INFO $data");
	$active = 1;
}

sub event_notice {
	my ($server, $msg, $sender, $sender_host, $dest) = @_;
	return if $active ne 1;
	if ($sender eq "NickServ")
	{
		if ($msg =~ /Email Address: /) {
			$active = 0;
			my $add = substr($msg,21);
			my $mynick = $server->{nick};
			my $key;
			my @chars = ('a'..'z','A'..'Z','0'..'9','_','@');
			my $myadd = Irssi::settings_get_str('passreset_sender');
			$myadd =~ s/@/\@/;

			foreach (1..10)
			{
				$key .= $chars[rand @chars];
			}
			my $message = <<"__MESSAGE__";
To: $add
Bcc: $myadd
From: $myadd
Subject: freenode nickserv password reset

Hi,

Someone just requested that I reset the password on your nick '$requester'.  If
this was you please /msg $mynick $key.  If not, please disregard this email.

Thanks

-- 
$mynick

__MESSAGE__
		my $sender = Email::Send->new({mailer => 'SMTP'});
		$sender->mailer_args([Host => Irssi::settings_get_str('passreset_smtp_host')]);
		$sender->send($message);
		Irssi::print("Email sent to $add for $requester.  Code is '$key'.");
		} elsif ($msg =~ /Nickname Options: /) {
			$active = 0;
		}
	}
}

Irssi::command_bind('passreset', 'cmd_passreset');
Irssi::signal_add('message irc notice', 'event_notice');
Irssi::settings_add_str('passreset', 'passreset_sender', 'staff\@somewhere.com');
Irssi::settings_add_str('passreset', 'passreset_smtp_host', 'localhost');

