changeset 786:e318a341d332

mod_broadcast: New module to set up a component that forwards received messages to all online users (similar to Openfire's broadcast module) (thanks Yann Verry)
author Matthew Wild <mwild1@gmail.com>
date Tue, 07 Aug 2012 15:51:15 +0100
parents e781e63a49f4
children cec49ee88c23
files mod_broadcast/mod_broadcast.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_broadcast/mod_broadcast.lua	Tue Aug 07 15:51:15 2012 +0100
@@ -0,0 +1,30 @@
+local allowed_senders = module:get_option_set("broadcast_senders", {});
+
+local jid_bare = require "util.jid".bare;
+
+function send_to_online(message)
+	local c = 0;
+	for hostname, host_session in pairs(hosts) do
+		if host_session.sessions then
+			for username in pairs(host_session.sessions) do
+				c = c + 1;
+				message.attr.to = username.."@"..hostname;
+				module:send(message);
+			end
+		end
+	end
+	return c;
+end
+
+function send_message(event)
+	local stanza = event.stanza;
+	if allowed_senders:contains(jid_bare(stanza.attr.from)) then
+		local c = send_to_online(stanza);
+		module:log("debug", "Broadcast stanza from %s to %d online users", stanza.attr.from, c);
+		return true;
+	else
+		module:log("warn", "Broadcasting is not allowed for %s", stanza.attr.from);
+	end
+end
+
+module:hook("message/bare", send_message);