From 478cfb67dd365ab060fca13ce14b575a7414d1d3 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Guerraz <861556+jbguerraz@users.noreply.github.com> Date: Wed, 29 Apr 2020 18:53:27 +0200 Subject: [PATCH] Jitsi room name hash or plain --- app/livechat/server/api/v1/videoCall.js | 9 +++++++-- app/livechat/server/methods/startVideoCall.js | 8 +++++++- app/videobridge/client/views/videoFlexTab.js | 9 ++++++++- app/videobridge/server/methods/jitsiGenerateToken.js | 9 +++++++-- app/videobridge/server/settings.js | 11 +++++++++++ packages/rocketchat-i18n/i18n/en.i18n.json | 2 ++ 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/app/livechat/server/api/v1/videoCall.js b/app/livechat/server/api/v1/videoCall.js index 76c084c083f80..4f7b5cfd524f9 100644 --- a/app/livechat/server/api/v1/videoCall.js +++ b/app/livechat/server/api/v1/videoCall.js @@ -36,12 +36,17 @@ API.v1.addRoute('livechat/video.call/:token', { Messages.createWithTypeRoomIdMessageAndUser('livechat_video_call', room._id, '', guest, { actionLinks: config.theme.actionLinks, }); - + let rname; + if (rcSettings.get('Jitsi_URL_Room_Hash')) { + rname = rcSettings.get('uniqueID') + rid; + } else { + rname = encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); + } const videoCall = { rid, domain: rcSettings.get('Jitsi_Domain'), provider: 'jitsi', - room: rcSettings.get('Jitsi_URL_Room_Prefix') + rcSettings.get('uniqueID') + rid + rcSettings.get('Jitsi_URL_Room_Suffix'), + room: rcSettings.get('Jitsi_URL_Room_Prefix') + rname + rcSettings.get('Jitsi_URL_Room_Suffix'), timeout: new Date(Date.now() + 3600 * 1000), }; diff --git a/app/livechat/server/methods/startVideoCall.js b/app/livechat/server/methods/startVideoCall.js index 709ef4b98162f..58e51ec30087e 100644 --- a/app/livechat/server/methods/startVideoCall.js +++ b/app/livechat/server/methods/startVideoCall.js @@ -30,10 +30,16 @@ Meteor.methods({ ], }); + let rname; + if (settings.get('Jitsi_URL_Room_Hash')) { + rname = settings.get('uniqueID') + roomId; + } else { + rname = encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); + } return { roomId: room._id, domain: settings.get('Jitsi_Domain'), - jitsiRoom: settings.get('Jitsi_URL_Room_Prefix') + settings.get('uniqueID') + roomId + settings.get('Jitsi_URL_Room_Suffix'), + jitsiRoom: settings.get('Jitsi_URL_Room_Prefix') + rname + settings.get('Jitsi_URL_Room_Suffix'), }; }, }); diff --git a/app/videobridge/client/views/videoFlexTab.js b/app/videobridge/client/views/videoFlexTab.js index ecb1ac30ec79a..94e8112489611 100644 --- a/app/videobridge/client/views/videoFlexTab.js +++ b/app/videobridge/client/views/videoFlexTab.js @@ -110,7 +110,14 @@ Template.videoFlexTab.onRendered(function() { } const domain = settings.get('Jitsi_Domain'); - const jitsiRoom = settings.get('Jitsi_URL_Room_Prefix') + settings.get('uniqueID') + rid + settings.get('Jitsi_URL_Room_Suffix'); + let rname; + if (settings.get('Jitsi_URL_Room_Hash')) { + rname = settings.get('uniqueID') + rid; + } else { + const room = Rooms.findOne({ _id: rid }); + rname = encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); + } + const jitsiRoom = settings.get('Jitsi_URL_Room_Prefix') + rname + settings.get('Jitsi_URL_Room_Suffix'); const noSsl = !settings.get('Jitsi_SSL'); const isEnabledTokenAuth = settings.get('Jitsi_Enabled_TokenAuth'); diff --git a/app/videobridge/server/methods/jitsiGenerateToken.js b/app/videobridge/server/methods/jitsiGenerateToken.js index d987ec5d3bcc4..2d0dbe6bd3ba7 100644 --- a/app/videobridge/server/methods/jitsiGenerateToken.js +++ b/app/videobridge/server/methods/jitsiGenerateToken.js @@ -17,8 +17,13 @@ Meteor.methods({ throw new Meteor.Error('error-not-allowed', 'not allowed', { method: 'jitsi:generateToken' }); } - const jitsiRoom = settings.get('Jitsi_URL_Room_Prefix') + settings.get('uniqueID') + rid + settings.get('Jitsi_URL_Room_Suffix'); - + let rname; + if (settings.get('Jitsi_URL_Room_Hash')) { + rname = settings.get('uniqueID') + rid; + } else { + rname = encodeURIComponent(room.t === 'd' ? room.usernames.join(' x ') : room.name); + } + const jitsiRoom = settings.get('Jitsi_URL_Room_Prefix') + rname + settings.get('Jitsi_URL_Room_Suffix'); const jitsiDomain = settings.get('Jitsi_Domain'); const jitsiApplicationId = settings.get('Jitsi_Application_ID'); const jitsiApplicationSecret = settings.get('Jitsi_Application_Secret'); diff --git a/app/videobridge/server/settings.js b/app/videobridge/server/settings.js index 97705a94a8658..17b9daafaef9f 100644 --- a/app/videobridge/server/settings.js +++ b/app/videobridge/server/settings.js @@ -99,6 +99,17 @@ Meteor.startup(function() { public: true, }); + this.add('Jitsi_URL_Room_Hash', true, { + type: 'boolean', + enableQuery: { + _id: 'Jitsi_Enabled', + value: true, + }, + i18nLabel: 'URL_room_hash', + i18nDescription: 'URL_room_hash_description', + public: true, + }); + this.add('Jitsi_SSL', true, { type: 'boolean', enableQuery: { diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 2b74e0618568f..3cf55c5b8e9c5 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -3644,6 +3644,8 @@ "URL": "URL", "URL_room_prefix": "URL room prefix", "URL_room_suffix": "URL room suffix", + "URL_room_hash": "Enable room name hash", + "URL_room_hash_description": "Recommended to enable if the Jitsi instance doesn't use any authentication mechanism.", "Use_Server_configuration": "Use server configuration", "Use_Room_configuration": "Overwrites the server configuration and use room config", "Use_account_preference": "Use account preference",