summaryrefslogtreecommitdiffstats
path: root/scripts/cap_sasl_fail.pl
diff options
context:
space:
mode:
authorAilin Nemui2016-03-24 11:01:05 +0100
committerAilin Nemui2016-03-29 21:47:40 +0200
commitf9c43a73dfe005c3e7d9b93c0ee4afce8b49e2b6 (patch)
tree738535cb57b840d288b5d03721331129b0dc5475 /scripts/cap_sasl_fail.pl
parent2713bb0b1b523a707d27fe21a7f82355f6a81b7d (diff)
downloadscripts.irssi.org-f9c43a73dfe005c3e7d9b93c0ee4afce8b49e2b6.tar.bz2
add cap_sasl_fail script
- provide /set sasl_disconnect_on_fail for Irssi 0.8.18
Diffstat (limited to 'scripts/cap_sasl_fail.pl')
-rw-r--r--scripts/cap_sasl_fail.pl50
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/cap_sasl_fail.pl b/scripts/cap_sasl_fail.pl
new file mode 100644
index 0000000..226bc2c
--- /dev/null
+++ b/scripts/cap_sasl_fail.pl
@@ -0,0 +1,50 @@
+use strict;
+use warnings;
+
+our $VERSION = '2.0'; # ed9e98e5d63cfb3
+our %IRSSI = (
+ authors => 'Nei',
+ name => 'cap_sasl_fail',
+ description => 'Disconnect from server if SASL authentication fails.',
+ license => 'GNU GPLv2 or later',
+ );
+
+use Irssi 20150920;
+use version;
+
+my %disconnect_next;
+
+my $irssi_version = qv(Irssi::parse_special('v$J') =~ s/-.*//r);
+die sprintf "Support for Irssi v%vd has not been written yet.\n", $irssi_version
+ if $irssi_version > v0.8.20;
+
+Irssi::signal_register({'server sasl fail' => [qw[iobject string]]});
+Irssi::signal_add_first('server sasl fail' => 'sasl_fail_failed');
+Irssi::signal_add_first('server sasl failure' => 'sasl_failure');
+Irssi::signal_add_first('server cap end' => 'server_cap_end' );
+
+sub sasl_fail_failed {
+ Irssi::signal_emit('server sasl failure', @_);
+}
+
+sub sasl_failure {
+ my ($server, $reason) = @_;
+ &Irssi::signal_continue;
+ my $disconnect = Irssi::settings_get_bool('sasl_disconnect_on_fail');
+ my $reconnect = Irssi::settings_get_bool('sasl_reconnect_on_fail');
+ if ($disconnect || $reconnect) {
+ $server->send_raw_now('QUIT');
+ }
+ unless ($reason =~ /timed out/ || $reconnect) {
+ $disconnect_next{ $server->{tag} } = 1;
+ }
+}
+
+sub server_cap_end {
+ my ($server) = @_;
+ $server->disconnect
+ if delete $disconnect_next{ $server->{tag} };
+}
+
+Irssi::settings_add_bool('server', 'sasl_disconnect_on_fail', 1);
+Irssi::settings_add_bool('server', 'sasl_reconnect_on_fail', 0);