mirror of
https://git.lapiole.org/dani/ansible-roles.git
synced 2025-08-02 23:05:41 +02:00
57 lines
2.3 KiB
Lua
57 lines
2.3 KiB
Lua
--- This module removes identity information from presence stanzas when the
|
|
--- hideDisplayNameForAll or hideDisplayNameForGuests options are enabled
|
|
--- for a room.
|
|
|
|
--- To be enabled under the main muc component
|
|
local filters = require 'util.filters';
|
|
local st = require 'util.stanza';
|
|
|
|
local util = module:require 'util';
|
|
local filter_identity_from_presence = util.filter_identity_from_presence;
|
|
local get_room_by_name_and_subdomain = util.get_room_by_name_and_subdomain;
|
|
local is_admin = util.is_admin;
|
|
local ends_with = util.ends_with;
|
|
local internal_room_jid_match_rewrite = util.internal_room_jid_match_rewrite;
|
|
|
|
-- we need to get the shared resource for joining moderators, as participants are marked as moderators
|
|
-- after joining which is after the filter for stanza/out, but we need to know will this participant be a moderator
|
|
local joining_moderator_participants = module:shared('moderators/joining_moderator_participants');
|
|
|
|
--- Filter presence sent to non-moderator members of a room when the hideDisplayNameForGuests option is set.
|
|
function filter_stanza_out(stanza, session)
|
|
if stanza.name ~= 'presence' or stanza.attr.type == 'error'
|
|
or stanza.attr.type == 'unavailable' or ends_with(stanza.attr.from, '/focus') then
|
|
return stanza;
|
|
end
|
|
|
|
local room = get_room_by_name_and_subdomain(session.jitsi_web_query_room, session.jitsi_web_query_prefix);
|
|
local shouldFilter = false;
|
|
|
|
if room and (room._data.hideDisplayNameForGuests == true or room._data.hideDisplayNameForAll == true) then
|
|
local occupant = room:get_occupant_by_real_jid(stanza.attr.to);
|
|
-- don't touch self-presence
|
|
if occupant and stanza.attr.from ~= internal_room_jid_match_rewrite(occupant.nick) then
|
|
local isModerator = (occupant.role == 'moderator' or joining_moderator_participants[occupant.bare_jid]);
|
|
shouldFilter = room._data.hideDisplayNameForAll or not isModerator;
|
|
end
|
|
end
|
|
|
|
if shouldFilter then
|
|
return filter_identity_from_presence(stanza);
|
|
else
|
|
return stanza;
|
|
end
|
|
end
|
|
|
|
function filter_session(session)
|
|
filters.add_filter(session, 'stanzas/out', filter_stanza_out, -100);
|
|
end
|
|
|
|
function module.load()
|
|
filters.add_filter_hook(filter_session);
|
|
end
|
|
|
|
function module.unload()
|
|
filters.remove_filter_hook(filter_session);
|
|
end
|