mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
Attaches the meeting id and the creator of the meeting into the iq sent to jibri. The data will be available in the metadata.json.
70 lines
2.9 KiB
Lua
70 lines
2.9 KiB
Lua
local json = require 'cjson';
|
|
|
|
local util = module:require 'util';
|
|
local room_jid_match_rewrite = util.room_jid_match_rewrite;
|
|
local get_room_from_jid = util.get_room_from_jid;
|
|
|
|
-- This needs to be attached to the main virtual host and the virtual host where jicofo is connected and authenticated.
|
|
-- The first pass is the iq coming from the client where we get the creator and attach it to the app_data.
|
|
-- The second pass is jicofo approving that and inviting jibri where we attach the session_id information to app_data
|
|
local function attachJibriSessionId(event)
|
|
local stanza = event.stanza;
|
|
if stanza.name == "iq" then
|
|
local jibri = stanza:get_child('jibri', 'http://jitsi.org/protocol/jibri');
|
|
if jibri then
|
|
if jibri.attr.action == 'start' then
|
|
|
|
local update_app_data = false;
|
|
local app_data = jibri.attr.app_data;
|
|
if app_data then
|
|
app_data = json.decode(app_data);
|
|
else
|
|
app_data = {};
|
|
end
|
|
if app_data.file_recording_metadata == nil then
|
|
app_data.file_recording_metadata = {};
|
|
end
|
|
|
|
if jibri.attr.room then
|
|
local jibri_room = jibri.attr.room;
|
|
jibri_room = room_jid_match_rewrite(jibri_room)
|
|
local room = get_room_from_jid(jibri_room);
|
|
if room then
|
|
local conference_details = {};
|
|
conference_details["session_id"] = room._data.meetingId;
|
|
app_data.file_recording_metadata.conference_details = conference_details;
|
|
update_app_data = true;
|
|
end
|
|
else
|
|
-- no room is because the iq received by the initiator in the room
|
|
local session = event.origin;
|
|
-- if a token is provided, add data to app_data
|
|
if session ~= nil then
|
|
local initiator = {};
|
|
|
|
if session.jitsi_meet_context_user ~= nil then
|
|
initiator.id = session.jitsi_meet_context_user.id;
|
|
end
|
|
if session.jitsi_meet_context_group ~= nil then
|
|
initiator.group = session.jitsi_meet_context_group;
|
|
end
|
|
|
|
app_data.file_recording_metadata.initiator = initiator
|
|
update_app_data = true;
|
|
end
|
|
|
|
end
|
|
|
|
if update_app_data then
|
|
app_data = json.encode(app_data);
|
|
jibri.attr.app_data = app_data;
|
|
jibri:up()
|
|
stanza:up()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
module:hook('pre-iq/full', attachJibriSessionId);
|