summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorailin-nemui2016-12-07 14:19:36 +0100
committerGitHub2016-12-07 14:19:36 +0100
commit9835e818c8d83cf9f8ff97d182d29fd3838ae771 (patch)
treef3c53be6c29adbd3ad932b372f483febfbcf2bf0
parentcbed72aee90e754a19b6308248f51914cbbff024 (diff)
parent994d8ebc5abda99d3d672c4219ae42f083fa9c46 (diff)
downloadscripts.irssi.org-9835e818c8d83cf9f8ff97d182d29fd3838ae771.tar.bz2
Merge pull request #326 from IsaacG/add_ident.pl
Add ident.pl - automatically identify from file-based pws
-rw-r--r--scripts/ident.pl68
1 files changed, 68 insertions, 0 deletions
diff --git a/scripts/ident.pl b/scripts/ident.pl
new file mode 100644
index 0000000..a4854f2
--- /dev/null
+++ b/scripts/ident.pl
@@ -0,0 +1,68 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Irssi;
+use POSIX;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION = "1.0";
+%IRSSI = (
+ authors => 'Isaac Good',
+ contact => "irssi\@isaacgood.com; irc.freenode.net/yitz",
+ name => 'ident',
+ description => 'Ident to NickServs',
+ name => "ident",
+ description => "Automatically IDENTIFY when prompted",
+ license => 'MIT',
+);
+
+
+my %pw;
+
+
+sub LoadPasswords {
+ # Load the passwords from file.
+ delete @pw{keys %pw};
+ my $filename = Irssi::get_irssi_dir() . '/passwords';
+ my $FH;
+ unless(open $FH, "<", $filename)
+ {
+ print "Can not open $filename";
+ return 0;
+ }
+ while (my $line = <$FH>)
+ {
+ chomp $line;
+ next unless ($line);
+ my ($tag, $password) = split(/ */, $line, 2);
+ next unless ($tag and $password);
+ $pw{$tag} = $password;
+ }
+ return 1;
+}
+
+
+sub notice {
+ my ($server, $data, $nick, $host) = @_;
+ my ($channel, $msg) = split(/ :/, $data, 2);
+ my $l = 0;
+
+ # Test the notice. Must be from nickserv and be asking you to identify.
+ return undef unless (lc($nick) eq 'nickserv');
+ return undef unless (lc($msg) =~ /msg nickserv identify/);
+ # Check it's a direct message and we have a password for this network.
+ return undef unless (lc($channel) eq lc($server->{'nick'}));
+ return undef unless ($pw{$server->{'chatnet'}});
+
+ my $pw = $pw{$server->{'chatnet'}};
+ # Use the /quote nickserv approach to reduce chance of leaking the password to a bad actor, ie someone pretending to be nickserv.
+ $server->command("^quote nickserv identify $pw");
+
+ return undef;
+}
+
+
+if (LoadPasswords()) {
+ Irssi::signal_add('event notice', \&notice);
+}