Software /
code /
prosody-modules
File
mod_muc_block_pm/mod_muc_block_pm.lua @ 4953:7d6ae8bb95dc
mod_delegation: use clean_xmlns to remove jabber:client namespace from node:
for the same reason as in mod_privilege, `jabber:client` namespace is removed with the
clean_xmlns method coming from there.
Furthermore, the forwarded <iq> stanza use the `jabber:client` xmlns while the stanza may
come from a component with e.g. `jabber:component:accept` xmlns, this can lead to
inconsistencies between the <iq> stanza and children (like <error> element).
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 28 May 2022 16:42:13 +0200 |
parent | 4027:291a45919988 |
child | 5598:c7e532ac6bf7 |
line wrap: on
line source
local bare_jid = require"util.jid".bare; local st = require"util.stanza"; -- Support both old and new MUC code local mod_muc = module:depends"muc"; local rooms = rawget(mod_muc, "rooms"); local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or function (jid) return rooms[jid]; end module:hook("message/full", function(event) local stanza, origin = event.stanza, event.origin; if stanza.attr.type == "error" then return end local to, from = stanza.attr.to, stanza.attr.from; local room = get_room_from_jid(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);