diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/LockSettingsUtil.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/LockSettingsUtil.scala new file mode 100755 index 0000000000000000000000000000000000000000..47cef4d65df458beb8c82ede53719db98b109e0d --- /dev/null +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/LockSettingsUtil.scala @@ -0,0 +1,47 @@ +package org.bigbluebutton + +import org.bigbluebutton.common2.msgs.{ BbbCommonEnvCoreMsg, BbbCoreEnvelope, BbbCoreHeaderWithMeetingId, MessageTypes, MuteUserInVoiceConfSysMsg, MuteUserInVoiceConfSysMsgBody, Routing } +import org.bigbluebutton.core.models.{ Roles, Users2x, VoiceUserState, VoiceUsers } +import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter } +import org.bigbluebutton.core2.{ MeetingStatus2x } + +object LockSettingsUtil { + + def applyMutingOfUsers(mute: Boolean, liveMeeting: LiveMeeting, outGW: OutMsgRouter): Unit = { + + def muteUserInVoiceConf(vu: VoiceUserState, mute: Boolean): Unit = { + val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, liveMeeting.props.meetingProp.intId, vu.intId) + val envelope = BbbCoreEnvelope(MuteUserInVoiceConfSysMsg.NAME, routing) + val header = BbbCoreHeaderWithMeetingId(MuteUserInVoiceConfSysMsg.NAME, liveMeeting.props.meetingProp.intId) + + val body = MuteUserInVoiceConfSysMsgBody(liveMeeting.props.voiceProp.voiceConf, vu.voiceUserId, mute) + val event = MuteUserInVoiceConfSysMsg(header, body) + val msgEvent = BbbCommonEnvCoreMsg(envelope, event) + + outGW.send(msgEvent) + } + + VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu => + Users2x.findWithIntId(liveMeeting.users2x, vu.intId).foreach { user => + if (user.role == Roles.VIEWER_ROLE) { + if (mute) { + // Mute everyone. We also mute listenOnly users as sledgehammer to make sure + // audio can't be transmitted. (ralam dec 6, 2019) + muteUserInVoiceConf(vu, mute) + } else { + // Only unmute viewers and non-listenOnly users. + if (!vu.listenOnly) { + muteUserInVoiceConf(vu, mute) + } + } + } + } + } + } + + def enforceLockSettingsForVoice(liveMeeting: LiveMeeting, outGW: OutMsgRouter): Unit = { + val permissions = MeetingStatus2x.getPermissions(liveMeeting.status) + applyMutingOfUsers(permissions.disableMic, liveMeeting, outGW) + + } +} diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala index db446b8bf6e399c3f9c36334cbd31387b66d34db..df4a40a6e749ad2ec23ab888683e26449977fbf6 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala @@ -1,5 +1,6 @@ package org.bigbluebutton.core.apps.users +import org.bigbluebutton.LockSettingsUtil import org.bigbluebutton.common2.msgs._ import org.bigbluebutton.core.apps.{ PermissionCheck, RightsManagementTrait } import org.bigbluebutton.core.running.OutMsgRouter @@ -36,6 +37,8 @@ trait ChangeLockSettingsInMeetingCmdMsgHdlr extends RightsManagementTrait { MeetingStatus2x.setPermissions(liveMeeting.status, settings) + LockSettingsUtil.enforceLockSettingsForVoice(liveMeeting, outGW) + val routing = Routing.addMsgToClientRouting( MessageTypes.BROADCAST_TO_MEETING, props.meetingProp.intId,