aboutsummaryrefslogtreecommitdiff
path: root/weechat/ruby/auth.rb
diff options
context:
space:
mode:
Diffstat (limited to 'weechat/ruby/auth.rb')
-rwxr-xr-xweechat/ruby/auth.rb89
1 files changed, 89 insertions, 0 deletions
diff --git a/weechat/ruby/auth.rb b/weechat/ruby/auth.rb
new file mode 100755
index 0000000..c304cab
--- /dev/null
+++ b/weechat/ruby/auth.rb
@@ -0,0 +1,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