Automatically authenticate with NickServ using SASL username/password.
Author: Shawn Smith
— Version: 0.3
— License: GPL-3.0-or-later
For WeeChat ≥ 0.3.0.
Tags: irc, sasl
Added: 2014-04-04
— Updated: 2014-05-30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | # Copyright (c) 2013 Shawn Smith <ShawnSmith0828@gmail.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. def weechat_init # Register our plugin with WeeChat Weechat.register("auth", "Shawn Smith", "0.3", "GPL3", "Automatically authenticate with NickServ using your sasl_username and sasl_password.", "", "") Weechat.hook_command("auth", "Automatically authenticate with NickServ using your sasl_username and sasl_password.", "list [server]", "list: Displays your sasl_username and sasl_password", "", "auth_command_cb", "") # Grab the hook for notices. Weechat.hook_signal("*,irc_in_notice", "auth_notice_cb", "") return Weechat::WEECHAT_RC_OK end # The auth command def auth_command_cb(data, buffer, args) server = buffer.split(',')[0] arg = args.split(' ') # Check to make sure we were given a valid option. if arg[0] == "list" && arg[1] server = arg[1] # Grab the pointers from the config sasl_username = Weechat.config_get("irc.server.#{server}.sasl_username") sasl_password = Weechat.config_get("irc.server.#{server}.sasl_password") # Print the usernames/passwords Weechat.print("", "[Auth]: sasl_username: #{Weechat.string_eval_expression("#{wee_string(sasl_username)}", {}, {}, {})}") Weechat.print("", "[Auth]: sasl_password: #{Weechat.string_eval_expression("#{wee_string(sasl_password)}", {}, {}, {})}") else Weechat.command("", "/help auth") end return Weechat::WEECHAT_RC_OK end # The incoming notice. def auth_notice_cb(data, buffer, args) # Notice should come from nickserv, otherwise we ignore it. if /^:NickServ!.+:This nickname is registered/i =~ args # Get the server that we're on. server = buffer.split(',')[0] # Grab the username/passwords if we have them. sasl_username = Weechat.config_get("irc.server.#{server}.sasl_username") sasl_password = Weechat.config_get("irc.server.#{server}.sasl_password") # Prevents us from sending empty passwords. if sasl_password != nil Weechat.command("", "/quote -server #{server} PRIVMSG NickServ IDENTIFY #{Weechat.string_eval_expression("#{wee_string(sasl_username)}", {}, {}, {})} #{Weechat.string_eval_expression("#{wee_string(sasl_password)}", {}, {}, {})}") # Backwards compatibility hack for shitty servers that don't let you use [nick pass] Weechat.command("", "/quote -server #{server} PRIVMSG NickServ IDENTIFY #{Weechat.string_eval_expression("#{wee_string(sasl_password)}", {}, {}, {})}") end end return Weechat::WEECHAT_RC_OK end def wee_string(input) return Weechat.config_string(input) end |