diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/EjectUserFromMeetingCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/EjectUserFromMeetingCmdMsgHdlr.scala index d7802a3515140a7c0ab38054271a4c718be49d7a..833824ef6d90d3ae1fc65e183921ee46a0d83631 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/EjectUserFromMeetingCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/EjectUserFromMeetingCmdMsgHdlr.scala @@ -16,6 +16,7 @@ trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait { val meetingId = liveMeeting.props.meetingProp.intId val userId = msg.body.userId val ejectedBy = msg.body.ejectedBy + val banUser = msg.body.banUser if (permissionFailed( PermissionCheck.MOD_LEVEL, @@ -38,7 +39,8 @@ trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait { // For the moment, just assume that is a user is ejected by another user, // then that user should be banned (ralam may 19, 2020) // see https://github.com/bigbluebutton/bigbluebutton/issues/9608 - val ban = true + val ban = banUser + // Eject users //println("****************** User " + ejectedBy + " ejecting user " + userId) // User might have joined using multiple browsers. diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala index 4936931676dc2eca0ec2a35691e219ec37f63d07..d658d5236580558a9890d4d7f01b0e75c3a6d3a5 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMgs.scala @@ -221,7 +221,7 @@ case class UserRoleChangedEvtMsgBody(userId: String, role: String, changedBy: St */ object EjectUserFromMeetingCmdMsg { val NAME = "EjectUserFromMeetingCmdMsg" } case class EjectUserFromMeetingCmdMsg(header: BbbClientMsgHeader, body: EjectUserFromMeetingCmdMsgBody) extends StandardMsg -case class EjectUserFromMeetingCmdMsgBody(userId: String, ejectedBy: String) +case class EjectUserFromMeetingCmdMsgBody(userId: String, ejectedBy: String, banUser: Boolean) /** * Sent from client to lock user in meeting. diff --git a/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js b/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js index afe41d6f9f83c3e34a23dd0932a67080b9bb77cc..6649b481ea15d6f55897e0470dbeea7ebfb1facb 100644 --- a/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js +++ b/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js @@ -3,7 +3,7 @@ import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function removeUser(userId) { +export default function removeUser(userId, banUser) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'EjectUserFromMeetingCmdMsg'; @@ -15,6 +15,7 @@ export default function removeUser(userId) { const payload = { userId, ejectedBy, + banUser, }; return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, ejectedBy, payload); diff --git a/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js b/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js index a29699dfb8890970590c72e4446621051fa00c7f..1039a83d9234fa2e47cad612d963c64e8dc81ab7 100644 --- a/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/methods/ejectUserFromVoice.js @@ -3,7 +3,7 @@ import { check } from 'meteor/check'; import RedisPubSub from '/imports/startup/server/redis'; import { extractCredentials } from '/imports/api/common/server/helpers'; -export default function ejectUserFromVoice(userId, banUser) { +export default function ejectUserFromVoice(userId) { const REDIS_CONFIG = Meteor.settings.private.redis; const CHANNEL = REDIS_CONFIG.channels.toAkkaApps; const EVENT_NAME = 'EjectUserFromVoiceCmdMsg'; diff --git a/bigbluebutton-html5/imports/startup/server/redis.js b/bigbluebutton-html5/imports/startup/server/redis.js index f8901d35204579f0cceb9bbd69f29daf9e21c6e8..5894152a5e2ac4f464aa6e13a3eacdc51c865c5a 100755 --- a/bigbluebutton-html5/imports/startup/server/redis.js +++ b/bigbluebutton-html5/imports/startup/server/redis.js @@ -239,6 +239,9 @@ class RedisPubSub { userId, }; + if (!meetingId || !userId) { + return Logger.warn(`Interrupted publishing of ${JSON.stringify(header)} due to missing data`); + } const envelope = makeEnvelope(channel, eventName, header, payload, { meetingId, userId }); return this.pub.publish(channel, envelope, RedisPubSub.handlePublishError); diff --git a/bigbluebutton-html5/imports/ui/components/user-list/service.js b/bigbluebutton-html5/imports/ui/components/user-list/service.js index a614699e8e09a08af4785139143b34139dae52d4..27788e40e35ed097fd416301db31d425481dce43 100755 --- a/bigbluebutton-html5/imports/ui/components/user-list/service.js +++ b/bigbluebutton-html5/imports/ui/components/user-list/service.js @@ -394,7 +394,7 @@ const assignPresenter = (userId) => { makeCall('assignPresenter', userId); }; const removeUser = (userId, banUser) => { if (isVoiceOnlyUser(userId)) { - makeCall('ejectUserFromVoice', userId, banUser); + makeCall('ejectUserFromVoice', userId); } else { makeCall('removeUser', userId, banUser); }