From df60295d228a6a7b3e6afce1fd3bd4b2df31e65b Mon Sep 17 00:00:00 2001 From: Gustavo Trott Date: Fri, 26 Nov 2021 14:07:03 -0300 Subject: [PATCH] Implements join param excludeFromDashboard --- .../apps/users/RegisterUserReqMsgHdlr.scala | 10 ++++--- .../core/models/RegisteredUsers.scala | 6 ++-- .../core2/testdata/FakeUserGenerator.scala | 2 +- .../redis/LearningDashboardActor.scala | 29 +++++++++++++++++-- .../common2/msgs/UsersMsgs.scala | 5 ++-- .../org/bigbluebutton/api/MeetingService.java | 8 ++--- .../api/domain/RegisteredUser.java | 12 +++++++- .../bigbluebutton/api/domain/UserSession.java | 1 + .../api/messaging/messages/RegisterUser.java | 4 ++- .../api/pub/IPublisherService.java | 2 +- .../bigbluebutton/api2/IBbbWebApiGWApp.java | 2 +- .../bigbluebutton/api2/BbbWebApiGWApp.scala | 5 ++-- .../org/bigbluebutton/api2/MsgBuilder.scala | 3 +- .../api2/meeting/MeetingsManagerActor.scala | 2 +- .../api2/meeting/ToAkkaAppsSendersTrait.scala | 3 +- .../web/controllers/ApiController.groovy | 11 ++++++- 16 files changed, 80 insertions(+), 25 deletions(-) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala index c319e6fa8d..f2c2bc2622 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/RegisterUserReqMsgHdlr.scala @@ -13,11 +13,12 @@ trait RegisterUserReqMsgHdlr { def handleRegisterUserReqMsg(msg: RegisterUserReqMsg): Unit = { - def buildUserRegisteredRespMsg(meetingId: String, userId: String, name: String, role: String, registeredOn: Long): BbbCommonEnvCoreMsg = { + def buildUserRegisteredRespMsg(meetingId: String, userId: String, name: String, + role: String, excludeFromDashboard: Boolean, registeredOn: Long): BbbCommonEnvCoreMsg = { val routing = collection.immutable.HashMap("sender" -> "bbb-apps-akka") val envelope = BbbCoreEnvelope(UserRegisteredRespMsg.NAME, routing) val header = BbbCoreHeaderWithMeetingId(UserRegisteredRespMsg.NAME, meetingId) - val body = UserRegisteredRespMsgBody(meetingId, userId, name, role, registeredOn) + val body = UserRegisteredRespMsgBody(meetingId, userId, name, role, excludeFromDashboard, registeredOn) val event = UserRegisteredRespMsg(header, body) BbbCommonEnvCoreMsg(envelope, event) } @@ -26,14 +27,15 @@ trait RegisterUserReqMsgHdlr { val regUser = RegisteredUsers.create(msg.body.intUserId, msg.body.extUserId, msg.body.name, msg.body.role, msg.body.authToken, - msg.body.avatarURL, msg.body.guest, msg.body.authed, guestStatus, false) + msg.body.avatarURL, msg.body.guest, msg.body.authed, guestStatus, msg.body.excludeFromDashboard, false) RegisteredUsers.add(liveMeeting.registeredUsers, regUser) log.info("Register user success. meetingId=" + liveMeeting.props.meetingProp.intId + " userId=" + msg.body.extUserId + " user=" + regUser) - val event = buildUserRegisteredRespMsg(liveMeeting.props.meetingProp.intId, regUser.id, regUser.name, regUser.role, regUser.registeredOn) + val event = buildUserRegisteredRespMsg(liveMeeting.props.meetingProp.intId, regUser.id, regUser.name, + regUser.role, regUser.excludeFromDashboard, regUser.registeredOn) outGW.send(event) def notifyModeratorsOfGuestWaiting(guests: Vector[GuestWaiting], users: Users2x, meetingId: String): Unit = { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/RegisteredUsers.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/RegisteredUsers.scala index b2db60e631..ab706e9534 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/RegisteredUsers.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/models/RegisteredUsers.scala @@ -5,7 +5,7 @@ import com.softwaremill.quicklens._ object RegisteredUsers { def create(userId: String, extId: String, name: String, roles: String, token: String, avatar: String, guest: Boolean, authenticated: Boolean, - guestStatus: String, loggedOut: Boolean): RegisteredUser = { + guestStatus: String, excludeFromDashboard: Boolean, loggedOut: Boolean): RegisteredUser = { new RegisteredUser( userId, extId, @@ -16,12 +16,13 @@ object RegisteredUsers { guest, authenticated, guestStatus, + excludeFromDashboard, System.currentTimeMillis(), 0, false, false, false, - loggedOut + loggedOut, ) } @@ -177,6 +178,7 @@ case class RegisteredUser( guest: Boolean, authed: Boolean, guestStatus: String, + excludeFromDashboard: Boolean, registeredOn: Long, lastAuthTokenValidatedOn: Long, joined: Boolean, diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/testdata/FakeUserGenerator.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/testdata/FakeUserGenerator.scala index 7b7f62a6d3..09ae9566eb 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/testdata/FakeUserGenerator.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/testdata/FakeUserGenerator.scala @@ -54,7 +54,7 @@ object FakeUserGenerator { RandomStringGenerator.randomAlphanumericString(10) + ".png" val ru = RegisteredUsers.create(userId = id, extId, name, role, - authToken, avatarURL, guest, authed, guestStatus = GuestStatus.ALLOW, false) + authToken, avatarURL, guest, authed, guestStatus = GuestStatus.ALLOW, false, false) RegisteredUsers.add(users, ru) ru } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala index f5f1d5ce93..e4d621e752 100644 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/LearningDashboardActor.scala @@ -92,6 +92,7 @@ class LearningDashboardActor( private var meetings: Map[String, Meeting] = Map() private var meetingsLastJsonHash : Map[String,String] = Map() + private var meetingExcludedUserIds : Map[String,Vector[String]] = Map() system.scheduler.schedule(10.seconds, 10.seconds, self, SendPeriodicReport) @@ -109,6 +110,7 @@ class LearningDashboardActor( case m: GroupChatMessageBroadcastEvtMsg => handleGroupChatMessageBroadcastEvtMsg(m) // User + case m: UserRegisteredRespMsg => handleUserRegisteredRespMsg(m) case m: UserJoinedMeetingEvtMsg => handleUserJoinedMeetingEvtMsg(m) case m: UserLeftMeetingEvtMsg => handleUserLeftMeetingEvtMsg(m) case m: UserEmojiChangedEvtMsg => handleUserEmojiChangedEvtMsg(m) @@ -151,6 +153,18 @@ class LearningDashboardActor( } } + private def handleUserRegisteredRespMsg(msg: UserRegisteredRespMsg): Unit = { + for { + meeting <- meetings.values.find(m => m.intId == msg.header.meetingId) + } yield { + if(msg.body.excludeFromDashboard == true) { + meetingExcludedUserIds += (meeting.intId -> { + meetingExcludedUserIds.get(meeting.intId).getOrElse(Vector()) :+ msg.body.userId + }) + } + } + } + private def handleUserJoinedMeetingEvtMsg(msg: UserJoinedMeetingEvtMsg): Unit = { for { meeting <- meetings.values.find(m => m.intId == msg.header.meetingId) @@ -161,7 +175,7 @@ class LearningDashboardActor( ) }) - meetings += (meeting.intId -> meeting.copy(users = meeting.users + (user.intId -> user.copy(leftOn = 0)))) + this.addUserToMeeting(meeting.intId, user) } } @@ -241,7 +255,7 @@ class LearningDashboardActor( ) }) - meetings += (meeting.intId -> meeting.copy(users = meeting.users + (user.intId -> user.copy(leftOn = 0)))) + this.addUserToMeeting(meeting.intId, user) } } } @@ -404,10 +418,21 @@ class LearningDashboardActor( sendReport(updatedMeeting) meetings = meetings.-(updatedMeeting.intId) + meetingExcludedUserIds = meetingExcludedUserIds.-(updatedMeeting.intId) log.info(" removed for meeting {}.",updatedMeeting.intId) } } + private def addUserToMeeting(meetingIntId: String, user: User): Unit = { + for { + meeting <- meetings.values.find(m => m.intId == meetingIntId) + } yield { + if(!meetingExcludedUserIds.get(meeting.intId).getOrElse(Vector()).contains(user.extId)) { + meetings += (meeting.intId -> meeting.copy(users = meeting.users + (user.intId -> user.copy(leftOn = 0)))) + } + } + } + private def sendPeriodicReport(): Unit = { meetings.map(meeting => { sendReport(meeting._2) diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMsgs.scala index d4c95f00d0..c306264ce8 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMsgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/UsersMsgs.scala @@ -15,14 +15,15 @@ case class RegisterUserReqMsg( ) extends BbbCoreMsg case class RegisterUserReqMsgBody(meetingId: String, intUserId: String, name: String, role: String, extUserId: String, authToken: String, avatarURL: String, - guest: Boolean, authed: Boolean, guestStatus: String) + guest: Boolean, authed: Boolean, guestStatus: String, excludeFromDashboard: Boolean) object UserRegisteredRespMsg { val NAME = "UserRegisteredRespMsg" } case class UserRegisteredRespMsg( header: BbbCoreHeaderWithMeetingId, body: UserRegisteredRespMsgBody ) extends BbbCoreMsg -case class UserRegisteredRespMsgBody(meetingId: String, userId: String, name: String, role: String, registeredOn: Long) +case class UserRegisteredRespMsgBody(meetingId: String, userId: String, name: String, + role: String, excludeFromDashboard: Boolean, registeredOn: Long) object RegisteredUserJoinTimeoutMsg { val NAME = "RegisteredUserJoinTimeoutMsg" } case class RegisteredUserJoinTimeoutMsg( diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java index fa8b4f3fea..3234239c89 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java @@ -139,13 +139,13 @@ public class MeetingService implements MessageListener { public void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL, Boolean guest, - Boolean authed, String guestStatus) { + Boolean authed, String guestStatus, Boolean excludeFromDashboard) { handle(new RegisterUser(meetingID, internalUserId, fullname, role, - externUserID, authToken, avatarURL, guest, authed, guestStatus)); + externUserID, authToken, avatarURL, guest, authed, guestStatus, excludeFromDashboard)); Meeting m = getMeeting(meetingID); if (m != null) { - RegisteredUser ruser = new RegisteredUser(authToken, internalUserId, guestStatus); + RegisteredUser ruser = new RegisteredUser(authToken, internalUserId, guestStatus, excludeFromDashboard); m.userRegistered(ruser); } } @@ -460,7 +460,7 @@ public class MeetingService implements MessageListener { gw.registerUser(message.meetingID, message.internalUserId, message.fullname, message.role, message.externUserID, message.authToken, message.avatarURL, message.guest, - message.authed, message.guestStatus); + message.authed, message.guestStatus, message.excludeFromDashboard); } public Meeting getMeeting(String meetingId) { diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/RegisteredUser.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/RegisteredUser.java index 6d27fbe86b..761bd3f2ed 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/RegisteredUser.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/RegisteredUser.java @@ -6,12 +6,14 @@ public class RegisteredUser { public final Long registeredOn; private String guestStatus; + private Boolean excludeFromDashboard; private Long guestWaitedOn; - public RegisteredUser(String authToken, String userId, String guestStatus) { + public RegisteredUser(String authToken, String userId, String guestStatus, Boolean excludeFromDashboard) { this.authToken = authToken; this.userId = userId; this.guestStatus = guestStatus; + this.excludeFromDashboard = excludeFromDashboard; Long currentTimeMillis = System.currentTimeMillis(); this.registeredOn = currentTimeMillis; @@ -26,6 +28,14 @@ public class RegisteredUser { return guestStatus; } + public void setExcludeFromDashboard(Boolean excludeFromDashboard) { + this.excludeFromDashboard = excludeFromDashboard; + } + + public Boolean getExcludeFromDashboard() { + return excludeFromDashboard; + } + public void updateGuestWaitedOn() { this.guestWaitedOn = System.currentTimeMillis(); } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/UserSession.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/UserSession.java index cb90ac3b9a..06d8c54586 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/UserSession.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/domain/UserSession.java @@ -44,6 +44,7 @@ public class UserSession { public String avatarURL; public String guestStatus = GuestPolicy.ALLOW; public String clientUrl = null; + public Boolean excludeFromDashboard = false; private AtomicInteger connections = new AtomicInteger(0); diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java index faf89f8afd..81e344e3ef 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/RegisterUser.java @@ -13,10 +13,11 @@ public class RegisterUser implements IMessage { public final Boolean guest; public final Boolean authed; public final String guestStatus; + public final Boolean excludeFromDashboard; public RegisterUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL, Boolean guest, - Boolean authed, String guestStatus) { + Boolean authed, String guestStatus, Boolean excludeFromDashboard) { this.meetingID = meetingID; this.internalUserId = internalUserId; this.fullname = fullname; @@ -27,5 +28,6 @@ public class RegisterUser implements IMessage { this.guest = guest; this.authed = authed; this.guestStatus = guestStatus; + this.excludeFromDashboard = excludeFromDashboard; } } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/pub/IPublisherService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/pub/IPublisherService.java index 28261c318e..ada7abcf52 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/pub/IPublisherService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/pub/IPublisherService.java @@ -18,7 +18,7 @@ public interface IPublisherService { void endMeeting(String meetingId); void send(String channel, String message); void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, - String authToken, String avatarURL, Boolean guest, Boolean authed); + String authToken, String avatarURL, Boolean guest, Boolean excludeFromDashboard, Boolean authed); void sendKeepAlive(String system, Long bbbWebTimestamp, Long akkaAppsTimestamp); void sendStunTurnInfo(String meetingId, String internalUserId, Set stuns, Set turns); } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java b/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java index fd32c7759a..ead14ba784 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java @@ -37,7 +37,7 @@ public interface IBbbWebApiGWApp { void registerUser(String meetingID, String internalUserId, String fullname, String role, String externUserID, String authToken, String avatarURL, - Boolean guest, Boolean authed, String guestStatus); + Boolean guest, Boolean authed, String guestStatus, Boolean excludeFromDashboard); void ejectDuplicateUser(String meetingID, String internalUserId, String fullname, String externUserID); void guestWaitingLeft(String meetingID, String internalUserId); diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala index fbd8b01fae..fa440c0936 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala @@ -226,7 +226,7 @@ class BbbWebApiGWApp( def registerUser(meetingId: String, intUserId: String, name: String, role: String, extUserId: String, authToken: String, avatarURL: String, guest: java.lang.Boolean, authed: java.lang.Boolean, - guestStatus: String): Unit = { + guestStatus: String, excludeFromDashboard: java.lang.Boolean): Unit = { // meetingManagerActorRef ! new RegisterUser(meetingId = meetingId, intUserId = intUserId, name = name, // role = role, extUserId = extUserId, authToken = authToken, avatarURL = avatarURL, @@ -234,7 +234,8 @@ class BbbWebApiGWApp( val regUser = new RegisterUser(meetingId = meetingId, intUserId = intUserId, name = name, role = role, extUserId = extUserId, authToken = authToken, avatarURL = avatarURL, - guest = guest.booleanValue(), authed = authed.booleanValue(), guestStatus = guestStatus) + guest = guest.booleanValue(), authed = authed.booleanValue(), guestStatus = guestStatus, + excludeFromDashboard = excludeFromDashboard) val event = MsgBuilder.buildRegisterUserRequestToAkkaApps(regUser) msgToAkkaAppsEventBus.publish(MsgToAkkaApps(toAkkaAppsChannel, event)) diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala index 1c41d22ff1..8d18d36f6b 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala @@ -50,7 +50,8 @@ object MsgBuilder { val header = BbbCoreHeaderWithMeetingId(RegisterUserReqMsg.NAME, msg.meetingId) val body = RegisterUserReqMsgBody(meetingId = msg.meetingId, intUserId = msg.intUserId, name = msg.name, role = msg.role, extUserId = msg.extUserId, authToken = msg.authToken, - avatarURL = msg.avatarURL, guest = msg.guest, authed = msg.authed, guestStatus = msg.guestStatus) + avatarURL = msg.avatarURL, guest = msg.guest, authed = msg.authed, guestStatus = msg.guestStatus, + excludeFromDashboard = msg.excludeFromDashboard) val req = RegisterUserReqMsg(header, body) BbbCommonEnvCoreMsg(envelope, req) } diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/MeetingsManagerActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/MeetingsManagerActor.scala index 7453561ff1..3e7732e1b0 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/MeetingsManagerActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/MeetingsManagerActor.scala @@ -17,7 +17,7 @@ case class CreateBreakoutRoomMsg(meetingId: String, parentMeetingId: String, case class AddUserSession(token: String, session: UserSession) case class RegisterUser(meetingId: String, intUserId: String, name: String, role: String, extUserId: String, authToken: String, avatarURL: String, - guest: Boolean, authed: Boolean, guestStatus: String) + guest: Boolean, authed: Boolean, guestStatus: String, excludeFromDashboard: Boolean) case class CreateMeetingMsg(defaultProps: DefaultProps) diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/ToAkkaAppsSendersTrait.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/ToAkkaAppsSendersTrait.scala index 580045fb8f..366494aaec 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/ToAkkaAppsSendersTrait.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/ToAkkaAppsSendersTrait.scala @@ -28,7 +28,8 @@ trait ToAkkaAppsSendersTrait extends SystemConfiguration { val header = BbbCoreHeaderWithMeetingId(RegisterUserReqMsg.NAME, msg.meetingId) val body = RegisterUserReqMsgBody(meetingId = msg.meetingId, intUserId = msg.intUserId, name = msg.name, role = msg.role, extUserId = msg.extUserId, authToken = msg.authToken, - avatarURL = msg.avatarURL, guest = msg.guest, authed = msg.authed, guestStatus = msg.guestStatus) + avatarURL = msg.avatarURL, guest = msg.guest, authed = msg.authed, guestStatus = msg.guestStatus, + excludeFromDashboard = msg.excludeFromDashboard) val req = RegisterUserReqMsg(header, body) val message = BbbCommonEnvCoreMsg(envelope, req) sendToBus(message) diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy index 3d53bbe62b..f060f18252 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy @@ -317,6 +317,14 @@ class ApiController { us.avatarURL = meeting.defaultAvatarURL } + if (!StringUtils.isEmpty(params.excludeFromDashboard)) { + try { + us.excludeFromDashboard = Boolean.parseBoolean(params.excludeFromDashboard) + } catch (Exception e) { + // Do nothing, prop excludeFromDashboard was already initialized + } + } + String meetingId = meeting.getInternalId() if (hasReachedMaxParticipants(meeting, us)) { @@ -341,7 +349,8 @@ class ApiController { us.avatarURL, us.guest, us.authed, - guestStatusVal + guestStatusVal, + us.excludeFromDashboard ) session.setMaxInactiveInterval(SESSION_TIMEOUT);