Skip to content

Commit

Permalink
Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutt…
Browse files Browse the repository at this point in the history
…on into merge-2.2-into-develop
  • Loading branch information
antobinary committed May 25, 2020
2 parents e986cc9 + 54fe878 commit c9e996d
Show file tree
Hide file tree
Showing 100 changed files with 5,846 additions and 3,911 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ object PermissionCheck {
outGW: OutMsgRouter, liveMeeting: LiveMeeting): Unit = {
val ejectedBy = SystemUser.ID

UsersApp.ejectUserFromMeeting(outGW, liveMeeting, userId, ejectedBy, reason, EjectReasonCode.PERMISSION_FAILED)
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, userId, ejectedBy, reason, EjectReasonCode.PERMISSION_FAILED, ban = false)

// send a system message to force disconnection
Sender.sendDisconnectClientSysMsg(meetingId, userId, ejectedBy, reason, outGW)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ trait EjectDuplicateUserReqMsgHdlr {
val ejectedBy = SystemUser.ID

val reason = "user ejected because of duplicate external userid"
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, userId, ejectedBy, reason, EjectReasonCode.DUPLICATE_USER)
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, userId, ejectedBy, reason, EjectReasonCode.DUPLICATE_USER, ban = false)

// send a system message to force disconnection
Sender.sendDisconnectClientSysMsg(meetingId, userId, ejectedBy, EjectReasonCode.DUPLICATE_USER, outGW)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -33,22 +34,43 @@ trait EjectUserFromMeetingCmdMsgHdlr extends RightsManagementTrait {
ejectedByUser <- RegisteredUsers.findWithUserId(ejectedBy, liveMeeting.registeredUsers)
} yield {
if (registeredUser.externId != ejectedByUser.externId) {
val ban = banUser

// Eject users
//println("****************** User " + ejectedBy + " ejecting user " + userId)
// User might have joined using multiple browsers.
// Hunt down all registered users based on extern userid and eject them all.
// ralam april 21, 2020
RegisteredUsers.findAllWithExternUserId(registeredUser.externId, liveMeeting.registeredUsers) foreach { ru =>
//println("****************** User " + ejectedBy + " ejecting other user " + ru.id)
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, ru.id, ejectedBy, reason, EjectReasonCode.EJECT_USER)
UsersApp.ejectUserFromMeeting(
outGW,
liveMeeting,
ru.id,
ejectedBy,
reason,
EjectReasonCode.EJECT_USER,
ban
)

log.info("Eject userId=" + userId + " by " + ejectedBy + " and ban=" + banUser)

// send a system message to force disconnection
Sender.sendDisconnectClientSysMsg(meetingId, ru.id, ejectedBy, EjectReasonCode.EJECT_USER, outGW)
}
} else {
// User is ejecting self, so just eject this userid not all sessions if joined using multiple
// browsers. ralam april 23, 2020
//println("****************** User " + ejectedBy + " ejecting self " + userId)
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, userId, ejectedBy, reason, EjectReasonCode.EJECT_USER)
UsersApp.ejectUserFromMeeting(
outGW,
liveMeeting,
userId,
ejectedBy,
reason,
EjectReasonCode.EJECT_USER,
ban = false
)
// send a system message to force disconnection
Sender.sendDisconnectClientSysMsg(meetingId, userId, ejectedBy, EjectReasonCode.EJECT_USER, outGW)
}
Expand All @@ -70,7 +92,15 @@ trait EjectUserFromMeetingSysMsgHdlr {
val ejectedBy = msg.body.ejectedBy

val reason = "user ejected by a component on system"
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, userId, ejectedBy, reason, EjectReasonCode.SYSTEM_EJECT_USER)
UsersApp.ejectUserFromMeeting(
outGW,
liveMeeting,
userId,
ejectedBy,
reason,
EjectReasonCode.SYSTEM_EJECT_USER,
ban = false
)
// send a system message to force disconnection
Sender.sendDisconnectClientSysMsg(meetingId, userId, ejectedBy, EjectReasonCode.SYSTEM_EJECT_USER, outGW)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,14 @@ object UsersApp {
}

def ejectUserFromMeeting(outGW: OutMsgRouter, liveMeeting: LiveMeeting,
userId: String, ejectedBy: String, reason: String, reasonCode: String): Unit = {
userId: String, ejectedBy: String, reason: String,
reasonCode: String, ban: Boolean): Unit = {

val meetingId = liveMeeting.props.meetingProp.intId

for {
user <- Users2x.ejectFromMeeting(liveMeeting.users2x, userId)
reguser <- RegisteredUsers.eject(userId, liveMeeting.registeredUsers, ejectedBy)
reguser <- RegisteredUsers.eject(userId, liveMeeting.registeredUsers, ban)
} yield {
sendUserEjectedMessageToClient(outGW, meetingId, userId, ejectedBy, reason, reasonCode)
sendUserLeftMeetingToAllClients(outGW, meetingId, userId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ trait ValidateAuthTokenReqMsgHdlr extends HandlerHelpers {

regUser match {
case Some(u) =>
// Check if ejected user is rejoining.
// Check if banned user is rejoining.
// Fail validation if ejected user is rejoining.
// ralam april 21, 2020
if (u.guestStatus == GuestStatus.ALLOW && !u.ejected) {
if (u.guestStatus == GuestStatus.ALLOW && !u.banned) {
userValidated(u, state)
} else {
if (u.ejected) {
if (u.banned) {
failReason = "Ejected user rejoining"
failReasonCode = EjectReasonCode.EJECTED_USER_REJOINING
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ object RegisteredUsers {

findWithExternUserId(user.externId, users) match {
case Some(u) =>
if (u.ejected) {
// Ejected user is rejoining. Don't add so that validate token
if (u.banned) {
// Banned user is rejoining. Don't add so that validate token
// will fail and can't join.
// ralam april 21, 2020
val ejectedUser = user.copy(ejected = true)
users.save(ejectedUser)
val bannedUser = user.copy(banned = true)
users.save(bannedUser)
} else {
// If user hasn't been ejected, we allow user to join
// as the user might be joining using 2 browsers for
Expand All @@ -81,29 +81,28 @@ object RegisteredUsers {

}

private def banUser(ejectedUser: RegisteredUser, users: RegisteredUsers, ejectedByUser: RegisteredUser): RegisteredUser = {
private def banOrEjectUser(ejectedUser: RegisteredUser, users: RegisteredUsers, ban: Boolean): RegisteredUser = {
// Some users join with multiple browser to manage the meeting.
// Don't black list a user ejecting oneself.
// ralam april 23, 2020
if (ejectedUser.externId != ejectedByUser.externId) {
if (ban) {
// Set a flag that user has been ejected. We flag the user instead of
// removing so we can eject when user tries to rejoin with the same
// external userid.
// ralam april 21, 2020
val u = ejectedUser.modify(_.ejected).setTo(true)
val u = ejectedUser.modify(_.banned).setTo(true)
users.save(u)
u
} else {
users.delete(ejectedUser.id)
ejectedUser
}
}
def eject(id: String, users: RegisteredUsers, ejectedBy: String): Option[RegisteredUser] = {
def eject(id: String, users: RegisteredUsers, ban: Boolean): Option[RegisteredUser] = {
for {
ru <- findWithUserId(id, users)
eu <- findWithUserId(ejectedBy, users)
} yield {
banUser(ru, users, eu)
banOrEjectUser(ru, users, ban)
}
}

Expand Down Expand Up @@ -166,6 +165,6 @@ case class RegisteredUser(
registeredOn: Long,
joined: Boolean,
markAsJoinTimedOut: Boolean,
ejected: Boolean
banned: Boolean
)

Original file line number Diff line number Diff line change
Expand Up @@ -749,7 +749,16 @@ class MeetingActor(
users foreach { u =>
val respondedOnTime = (lastUserInactivityInspectSentOn - expiryTracker.userInactivityThresholdInMs) < u.lastActivityTime && (lastUserInactivityInspectSentOn + expiryTracker.userActivitySignResponseDelayInMs) > u.lastActivityTime
if (!respondedOnTime) {
UsersApp.ejectUserFromMeeting(outGW, liveMeeting, u.intId, SystemUser.ID, "User inactive for too long.", EjectReasonCode.USER_INACTIVITY)
UsersApp.ejectUserFromMeeting(
outGW,
liveMeeting,
u.intId,
SystemUser.ID,
"User inactive for too long.",
EjectReasonCode.USER_INACTIVITY,
ban = false
)

Sender.sendDisconnectClientSysMsg(liveMeeting.props.meetingProp.intId, u.intId, SystemUser.ID, EjectReasonCode.USER_INACTIVITY, outGW)
}
}
Expand Down
2 changes: 1 addition & 1 deletion akka-bbb-apps/src/universal/conf/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ sharedNotes {
}

http {
interface = "0.0.0.0"
interface = "127.0.0.1"
port = 9999
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,9 @@
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand Down Expand Up @@ -123,23 +118,16 @@ public class ParamsProcessorUtil {
private Boolean defaultAllowDuplicateExtUserid = true;

private String formatConfNum(String s) {
if (s.length() == 5) {
StringBuilder confNumDash = new StringBuilder(s);
confNumDash.insert(2, '-');
return confNumDash.toString();
} else if (s.length() == 6 || s.length() == 7) {
StringBuilder confNumDash = new StringBuilder(s);
confNumDash.insert(3, '-');
return confNumDash.toString();
} else if (s.length() == 8) {
StringBuilder confNumDash = new StringBuilder(s);
confNumDash.insert(4, '-');
return confNumDash.toString();
} else if (s.length() == 9) {
StringBuilder confNumDash = new StringBuilder(s);
confNumDash.insert(3, '-');
confNumDash.insert(7, '-');
return confNumDash.toString();
if (s.length() > 5) {
Long confNumL = Long.parseLong(s);

Locale numFormatLocale = new Locale("en", "US");
String formatPattern = "#,###";
DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(numFormatLocale);
unusualSymbols.setGroupingSeparator(' ');
DecimalFormat numFormatter = new DecimalFormat(formatPattern, unusualSymbols);
numFormatter.setGroupingSize(3);
return numFormatter.format(confNumL);
}

return s;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ public String calcGuestStatus(String role, Boolean guest, Boolean authned) {
} else if (GuestPolicy.ALWAYS_DENY.equals(guestPolicy)) {
return GuestPolicy.DENY;
} else if (GuestPolicy.ASK_MODERATOR.equals(guestPolicy)) {
if (guest || (!ROLE_MODERATOR.equals(role) && authned)) {
if (guest || (!ROLE_MODERATOR.equals(role) && !authned)) {
return GuestPolicy.WAIT ;
}
return GuestPolicy.ALLOW;
Expand Down
87 changes: 0 additions & 87 deletions bigbluebutton-client/src/assets/presentation.css

This file was deleted.

Loading

0 comments on commit c9e996d

Please sign in to comment.