mod_block_outgoing/mod_block_outgoing.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:41:15 +0100
changeset 5058 62480053c87b
parent 2011 dc1299ca0185
permissions -rw-r--r--
mod_cloud_notify_encrypted: Additional debug logging when enabling/skipping
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2008
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;
2009
c769ed3e5b2b mod_block_outgoing: Make admins exempt from restrictions
Matthew Wild <mwild1@gmail.com>
parents: 2008
diff changeset
     4
local is_admin = require "core.usermanager".is_admin;
2011
dc1299ca0185 mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents: 2010
diff changeset
     5
local set = require "util.set";
2008
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
2011
dc1299ca0185 mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents: 2010
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: 2010
diff changeset
    11
local jid_types = set.new{ "host", "bare", "full" };
2008
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;
2009
c769ed3e5b2b mod_block_outgoing: Make admins exempt from restrictions
Matthew Wild <mwild1@gmail.com>
parents: 2008
diff changeset
    15
	local from_jid = jid_bare(stanza.attr.from);
2010
cb810a2bca47 mod_block_outgoing: Allow stanzas to user's login host (e.g. disco queries)
Matthew Wild <mwild1@gmail.com>
parents: 2009
diff changeset
    16
	if stanza.attr.to == nil or stanza.attr.to == module.host or is_admin(from_jid, module.host) then
2008
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
2009
c769ed3e5b2b mod_block_outgoing: Make admins exempt from restrictions
Matthew Wild <mwild1@gmail.com>
parents: 2008
diff changeset
    19
	if block_all or block_users:contains(from_jid)  then
2008
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()
2011
dc1299ca0185 mod_block_outgoing: Make blocked stanza types configurable, and default to blocking messages only
Matthew Wild <mwild1@gmail.com>
parents: 2010
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: 2010
diff changeset
    27
		for jid_type in jid_types do
2008
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