diff --git a/resources/extra-large-conference/README.md b/resources/extra-large-conference/README.md index 124c09dc68..6a16e52dc4 100644 --- a/resources/extra-large-conference/README.md +++ b/resources/extra-large-conference/README.md @@ -80,6 +80,7 @@ s2s_whitelist = { - Make sure s2s is not in modules_disabled - Enable `"visitors";` module under the main virtual host (e.g. [here](https://github.com/jitsi/jitsi-meet/blob/f42772ec5bcc87ff6de17423d36df9bcad6e770d/doc/debian/jitsi-meet-prosody/prosody.cfg.lua-jvb.example#L57)) + You can add under main virtual host the config: `visitors_ignore_list = { "recorder.jitmeet.example.com" }` to ignore jibri and transcribers from the visitor logic and use them only in the main prosody conference. - Create the visitors component in /etc/prosody/conf.d/jitmeet.example.com.cfg.lua: ``` Component "visitors.jitmeet.example.com" "visitors_component" diff --git a/resources/prosody-plugins/mod_visitors.lua b/resources/prosody-plugins/mod_visitors.lua index ee6fe2929f..48e347d46d 100644 --- a/resources/prosody-plugins/mod_visitors.lua +++ b/resources/prosody-plugins/mod_visitors.lua @@ -40,6 +40,10 @@ if main_muc_component_config == nil then return ; end +-- A list of domains which to be ignored for visitors. For occupants using those domain we do not propagate them +-- to visitor nodes and we do not update them with presence changes +local ignore_list = module:get_option_set('visitors_ignore_list', {}); + -- Advertise the component for discovery via disco#items module:add_identity('component', 'visitors', 'visitors.'..module.host); @@ -150,8 +154,9 @@ process_host_module(main_muc_component_config, function(host_module, host) host_module:hook('muc-occupant-pre-change', function (event) local room, stanza, occupant = event.room, event.stanza, event.dest_occupant; - -- filter focus - if is_admin(stanza.attr.from) or visitors_nodes[room.jid] == nil then + -- filter focus and configured domains (used for jibri and transcribers) + if is_admin(stanza.attr.from) or visitors_nodes[room.jid] == nil + or ignore_list:contains(jid.host(occupant.bare_jid)) then return; end @@ -170,7 +175,9 @@ process_host_module(main_muc_component_config, function(host_module, host) host_module:hook('muc-occupant-left', function (event) local room, stanza, occupant = event.room, event.stanza, event.occupant; - if is_admin(occupant.bare_jid) or visitors_nodes[room.jid] == nil or visitors_nodes[room.jid].nodes == nil then + -- ignore configured domains (jibri and transcribers) + if is_admin(occupant.bare_jid) or visitors_nodes[room.jid] == nil or visitors_nodes[room.jid].nodes == nil + or ignore_list:contains(jid.host(occupant.bare_jid)) then return; end @@ -198,8 +205,9 @@ process_host_module(main_muc_component_config, function(host_module, host) host_module:hook('muc-occupant-joined', function (event) local room, stanza, occupant = event.room, event.stanza, event.occupant; - -- filter focus - if is_admin(stanza.attr.from) or visitors_nodes[room.jid] == nil then + -- filter focus, ignore configured domains (jibri and transcribers) + if is_admin(stanza.attr.from) or visitors_nodes[room.jid] == nil + or ignore_list:contains(jid.host(occupant.bare_jid)) then return; end @@ -217,7 +225,8 @@ process_host_module(main_muc_component_config, function(host_module, host) host_module:hook("muc-occupant-groupchat", function(event) local room, stanza, occupant = event.room, event.stanza, event.occupant; - if not visitors_nodes[room.jid] then + -- filter sending messages from transcribers/jibris to visitors + if not visitors_nodes[room.jid] or ignore_list:contains(jid.host(occupant.bare_jid)) then return; end