Mercurial > prosody-modules
annotate mod_block_outgoing/mod_block_outgoing.lua @ 3955:017f60608fc8
mod_smacks: also count outgoing MAM messages
mod_smacks doesn't count outgoing MAM messages, which causes warnings in Prosody such as:
> The client says it handled 41 new stanzas, but we only sent 2
It seems mod_smacks is in the wrong here and that it's too strict in trying to determine what is a valid stanza to count.
In RFC6120:
> Definition of XML Stanza: An XML stanza is the basic unit of meaning
> in XMPP. A stanza is a first-level element (at depth=1 of the stream)
> whose element name is "message", "presence", or "iq" and whose
> qualifying namespace is 'jabber:client' or 'jabber:server'.
author | JC Brand <jc@opkode.com> |
---|---|
date | Thu, 26 Mar 2020 11:57:02 +0100 |
parents | dc1299ca0185 |
children |
rev | line source |
---|---|
2004
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Module to block all outgoing stanzas from a list of users |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local jid_bare = require "util.jid".bare; |
2005
c769ed3e5b2b
mod_block_outgoing: Make admins exempt from restrictions
Matthew Wild <mwild1@gmail.com>
parents:
2004
diff
changeset
|
4 local is_admin = require "core.usermanager".is_admin; |
2007
dc1299ca0185
mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents:
2006
diff
changeset
|
5 local set = require "util.set"; |
2004
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local block_users = module:get_option_set("block_outgoing_users", {}); |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local block_all = block_users:empty(); |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
2007
dc1299ca0185
mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents:
2006
diff
changeset
|
10 local stanza_types = module:get_option_set("block_outgoing_stanzas", { "message" }); |
dc1299ca0185
mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents:
2006
diff
changeset
|
11 local jid_types = set.new{ "host", "bare", "full" }; |
2004
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local function block_stanza(event) |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local stanza = event.stanza; |
2005
c769ed3e5b2b
mod_block_outgoing: Make admins exempt from restrictions
Matthew Wild <mwild1@gmail.com>
parents:
2004
diff
changeset
|
15 local from_jid = jid_bare(stanza.attr.from); |
2006
cb810a2bca47
mod_block_outgoing: Allow stanzas to user's login host (e.g. disco queries)
Matthew Wild <mwild1@gmail.com>
parents:
2005
diff
changeset
|
16 if stanza.attr.to == nil or stanza.attr.to == module.host or is_admin(from_jid, module.host) then |
2004
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 return; |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end |
2005
c769ed3e5b2b
mod_block_outgoing: Make admins exempt from restrictions
Matthew Wild <mwild1@gmail.com>
parents:
2004
diff
changeset
|
19 if block_all or block_users:contains(from_jid) then |
2004
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 module:log("debug", "Blocked outgoing %s stanza from %s", stanza.name, stanza.attr.from); |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 return true; |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 end |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 end |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 function module.load() |
2007
dc1299ca0185
mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents:
2006
diff
changeset
|
26 for stanza_type in stanza_types do |
dc1299ca0185
mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents:
2006
diff
changeset
|
27 for jid_type in jid_types do |
2004
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 module:hook("pre-"..stanza_type.."/"..jid_type, block_stanza, 10000); |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 end |
41fd55eba4a8
mod_block_outgoing: Module to block outgoing stanzas from users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |