plugins/mod_mimicking.lua
changeset 9984 73a447249fe4
child 9985 8758febbaca2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/mod_mimicking.lua	Mon Aug 06 15:35:27 2012 +0200
@@ -0,0 +1,49 @@
+-- Prosody IM
+-- Copyright (C) 2012 Florian Zeitz
+--
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
+local skeleton = require "util.confusable".skeleton;
+local datamanager = require "util.datamanager";
+local usage = require "util.prosodyctl".show_usage;
+local warn = require "util.prosodyctl".show_warning;
+local users = require "usermanager".users;
+
+module:hook("user-registered", function(user)
+	datamanager.store(skeleton(user.username), user.host, "skeletons", {username = user.username});
+end);
+
+module:hook("user-deregistered", function(user)
+	datamanager.store(skeleton(user.username), user.host, "skeletons", nil);
+end);
+
+module:hook("registration-attempt", function(user)
+	if datamanager.load(skeleton(user.username), user.host, "skeletons") then
+		user.allowed = false;
+	end
+end);
+
+function module.command(arg)
+	if (arg[1] ~= "bootstrap" or not arg[2]) then
+		usage("mod_mimicking bootstrap <host>", "Initialize skeleton database");
+		return;
+	end
+
+	local host = arg[2];
+
+	local host_session = prosody.hosts[host];
+	if not host_session then
+		return "No such host";
+	end
+	local provider = host_session.users;
+	if not(provider) or provider.name == "null" then
+		usermanager.initialize_host(host);
+	end
+	storagemanager.initialize_host(host);
+
+	for user in users(host) do
+		datamanager.store(skeleton(user), host, "skeletons", {username = user});
+	end
+end