Diff

mod_muc_block_pm/mod_muc_block_pm.lua @ 2588:69d3e0037435

mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
author Kim Alvefur <zash@zash.se>
date Tue, 28 Feb 2017 17:04:30 +0100
child 3636:afedc2430b0d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_muc_block_pm/mod_muc_block_pm.lua	Tue Feb 28 17:04:30 2017 +0100
@@ -0,0 +1,20 @@
+local bare_jid = require"util.jid".bare;
+local st = require"util.stanza";
+
+local muc_rooms = module:depends"muc".rooms;
+
+module:hook("message/full", function(event)
+	local stanza, origin = event.stanza, event.origin;
+	local to, from = stanza.attr.to, stanza.attr.from;
+	local room = muc_rooms[bare_jid(to)];
+	local to_occupant = room and room._occupants[to];
+	local from_occupant = room and room._occupants[room._jid_nick[from]]
+	if not ( to_occupant and from_occupant ) then return end
+
+	if from_occupant.affiliation then
+		to_occupant._pm_block_override = true;
+	elseif not from_occupant._pm_block_override then
+		origin.send(st.error_reply(stanza, "cancel", "not-authorized", "Private messages are disabled"));
+		return true;
+	end
+end, 1);