diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala index 4dda9418cd4d6504fcf1967c3667e6189f6ac72b..210554fa0ae388bccb0c7b8186fc8e433f1fbf7e 100644 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala @@ -1,51 +1,18 @@ package org.bigbluebutton.core.apps.presentation import org.bigbluebutton.common2.msgs._ +import org.bigbluebutton.core.apps.presentationpod.PresentationPodsApp import org.bigbluebutton.core.bus.MessageBus +import org.bigbluebutton.core.domain.MeetingState2x +import org.bigbluebutton.core.models.Users2x import org.bigbluebutton.core.running.LiveMeeting -import org.bigbluebutton.core.util.RandomStringGenerator trait PresentationUploadTokenReqMsgHdlr { this: PresentationApp2x => - def handle( - msg: PresentationUploadTokenReqMsg, - liveMeeting: LiveMeeting, bus: MessageBus - ): Unit = { + def handle(msg: PresentationUploadTokenReqMsg, state: MeetingState2x, + liveMeeting: LiveMeeting, bus: MessageBus): Unit = { - // TODO move these in Pods - def generateToken(podId: String, userId: String): String = { - "LALA-" + RandomStringGenerator.randomAlphanumericString(8) + podId + "-" + userId - } - - def userIsAllowedToUploadInPod(podId: String, userId: String): Boolean = { - true - } - - def handlePresentationUploadTokenReqMsg(msg: PresentationUploadTokenReqMsg): Unit = { - log.info("handlePresentationUploadTokenReqMsg" + liveMeeting.props.meetingProp.intId + - " userId=" + msg.header.userId + " filename=" + msg.body.filename) - - /* for { - // pod <- findPodWithId(msg.body.podId) - token <- generateToken(msg.body.podId, msg.header.userId) - } yield { - broadcastEvent(msg, token) - } */ - - if (userIsAllowedToUploadInPod(msg.body.podId, msg.header.userId)) { - val token = generateToken(msg.body.podId, msg.header.userId) - broadcastPresentationUploadTokenPassResp(msg, token) - broadcastPresentationUploadTokenSysPubMsg(msg, token) - } else { - broadcastPresentationUploadTokenFailResp(msg) - } - - } - - handlePresentationUploadTokenReqMsg(msg) - - // helpers def broadcastPresentationUploadTokenPassResp(msg: PresentationUploadTokenReqMsg, token: String): Unit = { // send back to client val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, liveMeeting.props.meetingProp.intId, msg.header.userId) @@ -82,6 +49,29 @@ trait PresentationUploadTokenReqMsgHdlr { bus.outGW.send(msgEvent) } + + def userIsAllowedToUploadInPod(podId: String, userId: String): Boolean = { + if (Users2x.userIsInPresenterGroup(liveMeeting.users2x, userId)) { + for { + pod <- PresentationPodsApp.getPresentationPod(state, podId) + } yield { + return pod.currentPresenter == userId + } + } + + false + } + + log.info("handlePresentationUploadTokenReqMsg" + liveMeeting.props.meetingProp.intId + + " userId=" + msg.header.userId + " filename=" + msg.body.filename) + + if (userIsAllowedToUploadInPod(msg.body.podId, msg.header.userId)) { + val token = PresentationPodsApp.generateToken(msg.body.podId, msg.header.userId) + broadcastPresentationUploadTokenPassResp(msg, token) + broadcastPresentationUploadTokenSysPubMsg(msg, token) + } else { + broadcastPresentationUploadTokenFailResp(msg) + } } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala index 309de533df5c8b4c2f0b6d25cd97d97c0a26950d..868e8c1e4d5be697c5b36098ff2628ff7fd43bf7 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala @@ -3,6 +3,7 @@ package org.bigbluebutton.core.apps.presentationpod import org.bigbluebutton.common2.domain._ import org.bigbluebutton.core.domain._ import org.bigbluebutton.core.models._ +import org.bigbluebutton.core.util.RandomStringGenerator object PresentationPodsApp { @@ -75,5 +76,9 @@ object PresentationPodsApp { defPod.copy(ownerId = newOwnerId) } } + + def generateToken(podId: String, userId: String): String = { + "LALA-" + RandomStringGenerator.randomAlphanumericString(8) + podId + "-" + userId + } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala index 0c0933acb21b440af35b3601c0ef887eb73aa0de..c39d434ac0e3caa31196240ae13d706d9ef97a2f 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala @@ -289,7 +289,7 @@ class MeetingActor( // Presentation case m: ResizeAndMovePagePubMsg => presentationApp2x.handle(m, liveMeeting, msgBus) - case m: PresentationUploadTokenReqMsg => presentationApp2x.handle(m, liveMeeting, msgBus) + case m: PresentationUploadTokenReqMsg => presentationApp2x.handle(m, state, liveMeeting, msgBus) // passing state but not modifying it case m: PreuploadedPresentationsSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus) case m: PresentationConversionUpdateSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus) case m: PresentationPageCountErrorSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)