mod_muc_restrict_avatars/mod_muc_restrict_avatars.lua
author Stephen Paul Weber <singpolyma@singpolyma.net>
Tue, 09 Apr 2024 14:44:52 -0500
changeset 5885 66e7d46b1d4b
parent 5653 2c69577b28c2
child 5900 5b95e06d75d5
permissions -rw-r--r--
mod_muc_restrict_avatars: Allow MUC admin to control restriction Thanks, Strix!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5653
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     1
local bare_jid = require"util.jid".bare;
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     2
local mod_muc = module:depends("muc");
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     3
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     4
local function filter_avatar_advertisement(tag)
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     5
	if tag.attr.xmlns == "vcard-temp:x:update" then
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     6
		return nil;
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     7
	end
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     8
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
     9
	return tag;
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    10
end
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    11
5885
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    12
-- Function to determine if avatar restriction is enabled
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    13
local function is_avatar_restriction_enabled(room)
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    14
	return room._data.restrict_avatars;
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    15
end
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    16
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    17
-- Add MUC configuration form option for avatar restriction
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    18
module:hook("muc-config-form", function(event)
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    19
	local room, form = event.room, event.form;
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    20
	table.insert(form, {
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    21
		name = "restrict_avatars",
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    22
		type = "boolean",
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    23
		label = "Restrict avatars to members only",
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    24
		value = is_avatar_restriction_enabled(room)
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    25
	});
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    26
end);
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    27
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    28
-- Handle MUC configuration form submission
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    29
module:hook("muc-config-submitted", function(event)
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    30
	local room, fields, changed = event.room, event.fields, event.changed;
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    31
	local restrict_avatars = fields["restrict_avatars"];
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    32
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    33
	if restrict_avatars ~= is_avatar_restriction_enabled(room) then
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    34
		-- Update room settings based on the submitted value
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    35
		room._data.restrict_avatars = restrict_avatars;
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    36
		-- Mark the configuration as changed
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    37
		if type(changed) == "table" then
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    38
			changed["restrict_avatars"] = true;
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    39
		else
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    40
			event.changed = true;
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    41
		end
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    42
	end
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    43
end);
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    44
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    45
-- Handle presence/full events to filter avatar advertisements
5653
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    46
module:hook("presence/full", function(event)
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    47
	local stanza = event.stanza;
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    48
	local room = mod_muc.get_room_from_jid(bare_jid(stanza.attr.to));
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    49
	if not room:get_affiliation(stanza.attr.from) then
5885
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    50
		if is_avatar_restriction_enabled(room) then
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    51
			stanza:maptags(filter_avatar_advertisement);
66e7d46b1d4b mod_muc_restrict_avatars: Allow MUC admin to control restriction
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 5653
diff changeset
    52
		end
5653
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    53
	end
2c69577b28c2 mod_muc_restrict_avatars: Block MUC participant avatars for non-members
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
    54
end, 1);