auth.rb 3.09 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# 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",
21
		"0.3",
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
		"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
55 56
		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)}", {}, {}, {})}")
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
	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
77
			Weechat.command("", "/quote -server #{server} PRIVMSG NickServ IDENTIFY #{Weechat.string_eval_expression("#{wee_string(sasl_username)}", {}, {}, {})} #{Weechat.string_eval_expression("#{wee_string(sasl_password)}", {}, {}, {})}")
78 79

			# Backwards compatibility hack for shitty servers that don't let you use [nick pass]
80
			Weechat.command("", "/quote -server #{server} PRIVMSG NickServ IDENTIFY #{Weechat.string_eval_expression("#{wee_string(sasl_password)}", {}, {}, {})}")
81
                end
82 83 84 85 86 87 88 89
	end

	return Weechat::WEECHAT_RC_OK
end

def wee_string(input)
	return Weechat.config_string(input)
end