Lobby required displayname (#7197)
* ref: Rename jitsi_bosh_query_room to jitsi_web_query_room. This is no longer bosh only and is available for both bosh and websocket sessions. * feat: Adds feature to disco-info indicating that display name is required. * feat: Adds option to disable checking whether display name is required. * ref: Clears auth_token when verification fails. * squash: Fixing comments. * squash: Updates to latest lib-jitsi-meet.
This commit is contained in:
parent
eac891585b
commit
a4ca247056
|
@ -10724,8 +10724,8 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lib-jitsi-meet": {
|
"lib-jitsi-meet": {
|
||||||
"version": "github:jitsi/lib-jitsi-meet#4fec06db7fc59a88021ec0b409eda47f21c42902",
|
"version": "github:jitsi/lib-jitsi-meet#8f9bd254bb3813808e6e1f7974aacc4d1414fcdb",
|
||||||
"from": "github:jitsi/lib-jitsi-meet#4fec06db7fc59a88021ec0b409eda47f21c42902",
|
"from": "github:jitsi/lib-jitsi-meet#8f9bd254bb3813808e6e1f7974aacc4d1414fcdb",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@jitsi/sdp-interop": "1.0.3",
|
"@jitsi/sdp-interop": "1.0.3",
|
||||||
"@jitsi/sdp-simulcast": "0.3.0",
|
"@jitsi/sdp-simulcast": "0.3.0",
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
"js-md5": "0.6.1",
|
"js-md5": "0.6.1",
|
||||||
"js-utils": "github:jitsi/js-utils#cf11996bd866fdb47326c59a5d3bc24be17282d4",
|
"js-utils": "github:jitsi/js-utils#cf11996bd866fdb47326c59a5d3bc24be17282d4",
|
||||||
"jwt-decode": "2.2.0",
|
"jwt-decode": "2.2.0",
|
||||||
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#4fec06db7fc59a88021ec0b409eda47f21c42902",
|
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#8f9bd254bb3813808e6e1f7974aacc4d1414fcdb",
|
||||||
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
|
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
|
||||||
"lodash": "4.17.13",
|
"lodash": "4.17.13",
|
||||||
"moment": "2.19.4",
|
"moment": "2.19.4",
|
||||||
|
|
|
@ -25,15 +25,25 @@ function init_session(event)
|
||||||
|
|
||||||
if query ~= nil then
|
if query ~= nil then
|
||||||
local params = formdecode(query);
|
local params = formdecode(query);
|
||||||
|
|
||||||
|
-- The following fields are filled in the session, by extracting them
|
||||||
|
-- from the query and no validation is beeing done.
|
||||||
|
-- After validating auth_token will be cleaned in case of error and few
|
||||||
|
-- other fields will be extracted from the token and set in the session
|
||||||
|
|
||||||
session.auth_token = query and params.token or nil;
|
session.auth_token = query and params.token or nil;
|
||||||
-- previd is used together with https://modules.prosody.im/mod_smacks.html
|
-- previd is used together with https://modules.prosody.im/mod_smacks.html
|
||||||
-- the param is used to find resumed session and re-use anonymous(random) user id
|
-- the param is used to find resumed session and re-use anonymous(random) user id
|
||||||
-- (see get_username_from_token)
|
-- (see get_username_from_token)
|
||||||
session.previd = query and params.previd or nil;
|
session.previd = query and params.previd or nil;
|
||||||
|
|
||||||
-- The room name and optional prefix from the bosh query
|
-- The room name and optional prefix from the web query
|
||||||
session.jitsi_bosh_query_room = params.room;
|
session.jitsi_web_query_room = params.room;
|
||||||
session.jitsi_bosh_query_prefix = params.prefix or "";
|
session.jitsi_web_query_prefix = params.prefix or "";
|
||||||
|
|
||||||
|
-- Deprecated, you should use jitsi_web_query_room and jitsi_web_query_prefix
|
||||||
|
session.jitsi_bosh_query_room = session.jitsi_web_query_room;
|
||||||
|
session.jitsi_bosh_query_prefix = session.jitsi_web_query_prefix;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -72,6 +82,7 @@ function provider.get_sasl_handler(session)
|
||||||
if (res == false) then
|
if (res == false) then
|
||||||
log("warn",
|
log("warn",
|
||||||
"Error verifying token err:%s, reason:%s", error, reason);
|
"Error verifying token err:%s, reason:%s", error, reason);
|
||||||
|
session.auth_token = nil;
|
||||||
return res, error, reason;
|
return res, error, reason;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,9 @@ local jid_bare = require 'util.jid'.bare;
|
||||||
local filters = require 'util.filters';
|
local filters = require 'util.filters';
|
||||||
local st = require 'util.stanza';
|
local st = require 'util.stanza';
|
||||||
local MUC_NS = 'http://jabber.org/protocol/muc';
|
local MUC_NS = 'http://jabber.org/protocol/muc';
|
||||||
|
local DISCO_INFO_NS = 'http://jabber.org/protocol/disco#info';
|
||||||
|
local DISPLAY_NAME_REQUIRED_FEATURE = 'http://jitsi.org/protocol/lobbyrooms#displayname_required';
|
||||||
|
local LOBBY_IDENTITY_TYPE = 'lobbyrooms';
|
||||||
|
|
||||||
local is_healthcheck_room = module:require "util".is_healthcheck_room;
|
local is_healthcheck_room = module:require "util".is_healthcheck_room;
|
||||||
|
|
||||||
|
@ -42,7 +45,14 @@ if lobby_muc_component_config == nil then
|
||||||
return ;
|
return ;
|
||||||
end
|
end
|
||||||
|
|
||||||
local whitelist = module:get_option_set("muc_lobby_whitelist", {});
|
local whitelist;
|
||||||
|
local check_display_name_required;
|
||||||
|
local function load_config()
|
||||||
|
whitelist = module:get_option_set("muc_lobby_whitelist", {});
|
||||||
|
check_display_name_required
|
||||||
|
= module:get_option_boolean("muc_lobby_check_display_name_required", true);
|
||||||
|
end
|
||||||
|
load_config();
|
||||||
|
|
||||||
local lobby_muc_service;
|
local lobby_muc_service;
|
||||||
local main_muc_service;
|
local main_muc_service;
|
||||||
|
@ -84,6 +94,9 @@ function filter_stanza(stanza)
|
||||||
end
|
end
|
||||||
|
|
||||||
return nil;
|
return nil;
|
||||||
|
elseif stanza.name == 'iq' and stanza:get_child('query', DISCO_INFO_NS) then
|
||||||
|
-- allow disco info from the lobby component
|
||||||
|
return stanza;
|
||||||
end
|
end
|
||||||
|
|
||||||
return nil;
|
return nil;
|
||||||
|
@ -125,7 +138,24 @@ function process_lobby_muc_loaded(lobby_muc, host_module)
|
||||||
filters.add_filter_hook(filter_session);
|
filters.add_filter_hook(filter_session);
|
||||||
|
|
||||||
-- Advertise lobbyrooms support on main domain so client can pick up the address and use it
|
-- Advertise lobbyrooms support on main domain so client can pick up the address and use it
|
||||||
module:add_identity('component', 'lobbyrooms', lobby_muc_component_config);
|
module:add_identity('component', LOBBY_IDENTITY_TYPE, lobby_muc_component_config);
|
||||||
|
|
||||||
|
-- Tag the disco#info response with a feature that display name is required
|
||||||
|
-- when the conference name from the web request has a lobby enabled.
|
||||||
|
host_module:hook("host-disco-info-node", function (event)
|
||||||
|
local session, reply, node = event.origin, event.reply, event.node;
|
||||||
|
if node == LOBBY_IDENTITY_TYPE
|
||||||
|
and session.jitsi_web_query_room
|
||||||
|
and main_muc_service
|
||||||
|
and check_display_name_required then
|
||||||
|
local room = main_muc_service.get_room_from_jid(
|
||||||
|
jid_bare(session.jitsi_web_query_room .. '@' .. main_muc_component_config));
|
||||||
|
if room and room._data.lobbyroom then
|
||||||
|
reply:tag("feature", { var = DISPLAY_NAME_REQUIRED_FEATURE }):up();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
event.exists = true;
|
||||||
|
end);
|
||||||
|
|
||||||
local room_mt = lobby_muc_service.room_mt;
|
local room_mt = lobby_muc_service.room_mt;
|
||||||
-- we base affiliations (roles) in lobby muc component to be based on the roles in the main muc
|
-- we base affiliations (roles) in lobby muc component to be based on the roles in the main muc
|
||||||
|
@ -256,3 +286,25 @@ process_host_module(main_muc_component_config, function(host_module, host)
|
||||||
end
|
end
|
||||||
end, -4); -- the default hook on members_only module is on -5
|
end, -4); -- the default hook on members_only module is on -5
|
||||||
end);
|
end);
|
||||||
|
|
||||||
|
-- Extract 'room' param from URL when session is created
|
||||||
|
function update_session(event)
|
||||||
|
local session = event.session;
|
||||||
|
|
||||||
|
if session.jitsi_web_query_room then
|
||||||
|
-- no need for an update
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
|
local query = event.request.url.query;
|
||||||
|
if query ~= nil then
|
||||||
|
local params = formdecode(query);
|
||||||
|
-- The room name and optional prefix from the web query
|
||||||
|
session.jitsi_web_query_room = params.room;
|
||||||
|
session.jitsi_web_query_prefix = params.prefix or "";
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module:hook_global("bosh-session", update_session);
|
||||||
|
module:hook_global("websocket-session", update_session);
|
||||||
|
module:hook_global('config-reloaded', load_config);
|
||||||
|
|
|
@ -106,8 +106,8 @@ prosody.events.add_handler("pre-jitsi-authentication", function(session)
|
||||||
|
|
||||||
if (session.jitsi_meet_context_user) then
|
if (session.jitsi_meet_context_user) then
|
||||||
local room = get_room(
|
local room = get_room(
|
||||||
session.jitsi_bosh_query_room,
|
session.jitsi_web_query_room,
|
||||||
session.jitsi_bosh_query_prefix);
|
session.jitsi_web_query_prefix);
|
||||||
|
|
||||||
if (not room) then
|
if (not room) then
|
||||||
return nil;
|
return nil;
|
||||||
|
|
|
@ -93,7 +93,8 @@ for event_name, method in pairs {
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
if not session.auth_token then
|
-- jitsi_meet_room is set after the token had been verified
|
||||||
|
if not session.auth_token or not session.jitsi_meet_room then
|
||||||
session.send(
|
session.send(
|
||||||
st.error_reply(
|
st.error_reply(
|
||||||
stanza, "cancel", "not-allowed", "Room modification disabled for guests"));
|
stanza, "cancel", "not-allowed", "Room modification disabled for guests"));
|
||||||
|
|
Loading…
Reference in New Issue