diff plugins/auth/auth.js @ 0:1158cffe5a5e

Initial import
author David Demelier <markand@malikania.fr>
date Mon, 08 Feb 2016 16:43:14 +0100
parents
children d34c2f2381eb c234b8db1816
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/auth/auth.js	Mon Feb 08 16:43:14 2016 +0100
@@ -0,0 +1,84 @@
+/*
+ * auth.js -- generic plugin to authenticate to services
+ *
+ * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* Plugin information */
+info = {
+	author: "David Demelier <markand@malikania.fr>",
+	license: "ISC",
+	summary: "Generic plugin to authenticate to services",
+	version: "@IRCCD_VERSION@"
+};
+
+/* Modules */
+var Logger = Irccd.Logger;
+var Plugin = Irccd.Plugin;
+var Server = Irccd.Server;
+var Util = Irccd.Util;
+
+function authenticateNickserv(server, password)
+{
+	Logger.info("authenticating to NickServ on " + server.toString());
+
+	var username = Plugin.config[server.toString() + ".username"];
+	var str = Util.format("identify #{username}#{password}", {
+		"username": username ? (username + " ") : "",
+		"password": password
+	});
+
+	server.message("NickServ", str);
+}
+
+function authenticateQuakenet(server, password)
+{
+	var username = Plugin.config[server.toString() + ".username"];
+
+	if (!username) {
+		Logger.warning("missing username for quakenet backend on " + server.toString());
+	} else {
+		Logger.log("authenticating to Q on " + server.toString());
+		server.message("Q@CServe.quakenet.org", Util.format("AUTH #{username} #{password}", {
+			"username": username,
+			"password": password
+		}));
+	}
+}
+
+function onConnect(server)
+{
+	var type = Plugin.config[server.toString() + ".type"];
+
+	if (type) {
+		/* Password is mandatory */
+		var password = Plugin.config[server.toString() + ".password"];
+
+		if (!password)
+			Logger.warning("missing password for " + server.toString());
+
+		switch (type) {
+		case "nickserv":
+			authenticateNickserv(server, password);
+			break;
+		case "quakenet":
+			authenticateQuakenet(server, password);
+			break;
+		default:
+			Logger.warning("unknown '" + type + "' backend");
+			break;
+		}
+	}
+}