Mercurial > prosody-modules
changeset 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 |
parents | 8c879948a2cf |
children | 89a3f049689f |
files | mod_muc_block_pm/README.markdown mod_muc_block_pm/mod_muc_block_pm.lua |
diffstat | 2 files changed, 48 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_muc_block_pm/README.markdown Tue Feb 28 17:04:30 2017 +0100 @@ -0,0 +1,28 @@ +--- +summary: Prevent unaffiliated MUC participants from sending PMs +--- + +# Introduction + +This module prevents unaffiliated users from sending private messages in +chat rooms, unless someone with an affiliation (member, admin etc) +messages them first. + +# Configuration + +The module doesn't have any options, just load it onto a MUC component. + +``` lua +Component "muc" +modules_enabled = { + "muc_block_pm"; +} +``` + +# Compatibility + + Branch State + -------- ----------------- + 0.9 Works + 0.10 Should work + trunk *Does not work*
--- /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);