annotate mod_muc_block_pm/mod_muc_block_pm.lua @ 3965:2b10e51d85a6

mod_muc_limits: Add config option to limit to join stanzas only This is a bit more limited in pre-0.11 MUC modules, because it just detects stanzas sent to full JIDs (which would include all presence and nick changes). This option is useful for setups where users are typically unaffiliated, but trusted (e.g. if access to the room is gated through some other means such as password/token auth).
author Matthew Wild <mwild1@gmail.com>
date Fri, 03 Apr 2020 12:26:56 +0100
parents afedc2430b0d
children 291a45919988
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2588
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local bare_jid = require"util.jid".bare;
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local st = require"util.stanza";
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
3636
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
4 -- Support both old and new MUC code
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
5 local mod_muc = module:depends"muc";
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
6 local rooms = rawget(mod_muc, "rooms");
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
7 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
8 function (jid)
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
9 return rooms[jid];
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
10 end
2588
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 module:hook("message/full", function(event)
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local stanza, origin = event.stanza, event.origin;
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local to, from = stanza.attr.to, stanza.attr.from;
3636
afedc2430b0d mod_muc_block_pm: Add support for Prosody 0.11
JC Brand <jc@opkode.com>
parents: 2588
diff changeset
15 local room = get_room_from_jid(bare_jid(to));
2588
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local to_occupant = room and room._occupants[to];
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local from_occupant = room and room._occupants[room._jid_nick[from]]
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 if not ( to_occupant and from_occupant ) then return end
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 if from_occupant.affiliation then
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 to_occupant._pm_block_override = true;
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 elseif not from_occupant._pm_block_override then
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 origin.send(st.error_reply(stanza, "cancel", "not-authorized", "Private messages are disabled"));
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 return true;
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 end
69d3e0037435 mod_muc_block_pm: Prevent unaffiliated users from sending private messages in MUC
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 end, 1);