Changeset

1281:f78661861e98

mod_admin_probe: Module allowing server administrators to probe any user
author Florian Zeitz <florob@babelmonkeys.de>
date Mon, 20 Jan 2014 16:07:00 +0100
parents 1280:42625801d15a
children 1282:17cb51496469
files mod_admin_probe/mod_admin_probe.lua
diffstat 1 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_admin_probe/mod_admin_probe.lua	Mon Jan 20 16:07:00 2014 +0100
@@ -0,0 +1,30 @@
+-- Prosody IM
+-- Copyright (C) 2014 Florian Zeitz
+--
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
+local presence = module:depends("presence");
+local send_presence_of_available_resources = presence.send_presence_of_available_resources;
+
+local hosts = prosody.hosts;
+local core_post_stanza = prosody.core_post_stanza;
+
+local st = require "util.stanza";
+local is_admin = require "core.usermanager".is_admin;
+local jid_split = require "util.jid".split;
+
+module:hook("presence/bare", function(data)
+	local origin, stanza = data.origin, data.stanza;
+	local to, from, type = stanza.attr.to, stanza.attr.from, stanza.attr.type;
+	local node, host = jid_split(to);
+
+	if type ~= "probe" then return; end
+	if not is_admin(from, module.host) then return; end
+
+	if 0 == send_presence_of_available_resources(node, host, from, origin) then
+		core_post_stanza(hosts[host], st.presence({from=to, to=from, type="unavailable"}), true);
+	end
+	return true;
+end, 10);