]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
add cap_sasl_fail script
authorAilin Nemui <redacted>
Thu, 24 Mar 2016 10:01:05 +0000 (11:01 +0100)
committerAilin Nemui <redacted>
Tue, 29 Mar 2016 19:47:40 +0000 (21:47 +0200)
- provide /set sasl_disconnect_on_fail for Irssi 0.8.18

scripts/cap_sasl_fail.pl [new file with mode: 0644]

diff --git a/scripts/cap_sasl_fail.pl b/scripts/cap_sasl_fail.pl
new file mode 100644 (file)
index 0000000..226bc2c
--- /dev/null
@@ -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);
git clone https://git.99rst.org/PROJECT