Skip to content

Commit 55a9ec6

Browse files
authored
Merge pull request bigbluebutton#20392 from dennis531/promote-guest-to-moderator
feat: Config for promoting guests to moderators
2 parents 27f59e7 + 6a3feb2 commit 55a9ec6

20 files changed

Lines changed: 87 additions & 33 deletions

File tree

akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeUserRoleCmdMsgHdlr.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ trait ChangeUserRoleCmdMsgHdlr extends RightsManagementTrait {
3131
} yield {
3232
RegisteredUsers.updateUserRole(liveMeeting.registeredUsers, u, userRole)
3333
}
34-
val promoteGuest = !liveMeeting.props.usersProp.authenticatedGuest
34+
val promoteGuest = !liveMeeting.props.usersProp.authenticatedGuest || liveMeeting.props.usersProp.allowPromoteGuestToModerator
3535
if (msg.body.role == Roles.MODERATOR_ROLE && (!uvo.guest || promoteGuest)) {
3636
// Promote non-guest users.
3737
val notifyEvent = MsgBuilder.buildNotifyUserInMeetingEvtMsg(

akka-bbb-apps/src/main/scala/org/bigbluebutton/core/db/MeetingUsersPoliciesDAO.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ case class MeetingUsersPoliciesDbModel(
1919
meetingLayout: String,
2020
allowModsToUnmuteUsers: Boolean,
2121
allowModsToEjectCameras: Boolean,
22-
authenticatedGuest: Boolean
22+
authenticatedGuest: Boolean,
23+
allowPromoteGuestToModerator: Boolean
2324
)
2425

2526
class MeetingUsersPoliciesDbTableDef(tag: Tag) extends Table[MeetingUsersPoliciesDbModel](tag, "meeting_usersPolicies") {
@@ -34,10 +35,11 @@ class MeetingUsersPoliciesDbTableDef(tag: Tag) extends Table[MeetingUsersPolicie
3435
val allowModsToUnmuteUsers = column[Boolean]("allowModsToUnmuteUsers")
3536
val allowModsToEjectCameras = column[Boolean]("allowModsToEjectCameras")
3637
val authenticatedGuest = column[Boolean]("authenticatedGuest")
38+
val allowPromoteGuestToModerator = column[Boolean]("allowPromoteGuestToModerator")
3739

3840
// val fk_meetingId: ForeignKeyQuery[MeetingDbTableDef, MeetingDbModel] = foreignKey("fk_meetingId", meetingId, TableQuery[MeetingDbTableDef])(_.meetingId)
3941

40-
override val * : ProvenShape[MeetingUsersPoliciesDbModel] = (meetingId, maxUsers, maxUserConcurrentAccesses, webcamsOnlyForModerator, userCameraCap, guestPolicy, guestLobbyMessage, meetingLayout, allowModsToUnmuteUsers, allowModsToEjectCameras, authenticatedGuest) <> (MeetingUsersPoliciesDbModel.tupled, MeetingUsersPoliciesDbModel.unapply)
42+
override val * : ProvenShape[MeetingUsersPoliciesDbModel] = (meetingId, maxUsers, maxUserConcurrentAccesses, webcamsOnlyForModerator, userCameraCap, guestPolicy, guestLobbyMessage, meetingLayout, allowModsToUnmuteUsers, allowModsToEjectCameras, authenticatedGuest, allowPromoteGuestToModerator) <> (MeetingUsersPoliciesDbModel.tupled, MeetingUsersPoliciesDbModel.unapply)
4143
}
4244

4345
object MeetingUsersPoliciesDAO {
@@ -56,6 +58,7 @@ object MeetingUsersPoliciesDAO {
5658
allowModsToUnmuteUsers = usersProp.allowModsToUnmuteUsers,
5759
allowModsToEjectCameras = usersProp.allowModsToEjectCameras,
5860
authenticatedGuest = usersProp.authenticatedGuest,
61+
allowPromoteGuestToModerator = usersProp.allowPromoteGuestToModerator,
5962
)
6063
)
6164
).onComplete {

akka-bbb-apps/src/test/scala/org/bigbluebutton/core/AppsTestFixtures.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ trait AppsTestFixtures {
4444
val allowModsToUnmuteUsers = false
4545
val allowModsToEjectCameras = false
4646
val authenticatedGuest = false
47+
val allowPromoteGuestToModerator = false
4748
val meetingLayout = ""
4849
val captureNotesFilename = s"Room 0${sequence} (Notes)"
4950
val captureSlidesFilename = s"Room 0${sequence} (Whiteboard)"
@@ -70,7 +71,7 @@ trait AppsTestFixtures {
7071
val usersProp = UsersProp(maxUsers = maxUsers, webcamsOnlyForModerator = webcamsOnlyForModerator,
7172
userCameraCap = userCameraCap,
7273
guestPolicy = guestPolicy, allowModsToUnmuteUsers = allowModsToUnmuteUsers, allowModsToEjectCameras = allowModsToEjectCameras,
73-
authenticatedGuest = authenticatedGuest, meetingLayout = meetingLayout)
74+
authenticatedGuest = authenticatedGuest, allowPromoteGuestToModerator = allowPromoteGuestToModerator, meetingLayout = meetingLayout)
7475
val metadataProp = new MetadataProp(metadata)
7576

7677
val defaultProps = DefaultProps(meetingProp, breakoutProps, durationProps, password, recordProp, welcomeProp, voiceProp,

bbb-common-message/src/main/scala/org/bigbluebutton/common2/domain/Meeting2x.scala

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,16 @@ case class WelcomeProp(welcomeMsgTemplate: String, welcomeMsg: String, modOnlyMe
4141
case class VoiceProp(telVoice: String, voiceConf: String, dialNumber: String, muteOnStart: Boolean)
4242

4343
case class UsersProp(
44-
maxUsers: Int,
45-
maxUserConcurrentAccesses:Int,
46-
webcamsOnlyForModerator: Boolean,
47-
userCameraCap: Int,
48-
guestPolicy: String,
49-
meetingLayout: String,
50-
allowModsToUnmuteUsers: Boolean,
51-
allowModsToEjectCameras: Boolean,
52-
authenticatedGuest: Boolean
44+
maxUsers: Int,
45+
maxUserConcurrentAccesses: Int,
46+
webcamsOnlyForModerator: Boolean,
47+
userCameraCap: Int,
48+
guestPolicy: String,
49+
meetingLayout: String,
50+
allowModsToUnmuteUsers: Boolean,
51+
allowModsToEjectCameras: Boolean,
52+
authenticatedGuest: Boolean,
53+
allowPromoteGuestToModerator: Boolean
5354
)
5455

5556
case class MetadataProp(metadata: collection.immutable.Map[String, String])

bbb-common-message/src/test/scala/org/bigbluebutton/common2/TestFixtures.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ trait TestFixtures {
4444
val keepEvents = false
4545
val guestPolicy = "ALWAYS_ASK"
4646
val authenticatedGuest = false
47+
val allowPromoteGuestToModerator = false
4748
val metadata: collection.immutable.Map[String, String] = Map("foo" -> "bar", "bar" -> "baz", "baz" -> "foo")
4849
val captureNotesFilename = s"Room 0${sequence} (Notes)"
4950
val captureSlidesFilename = s"Room 0${sequence} (Whiteboard)"
@@ -71,7 +72,7 @@ trait TestFixtures {
7172
val voiceProp = VoiceProp(telVoice = voiceConfId, voiceConf = voiceConfId, dialNumber = dialNumber, muteOnStart = muteOnStart)
7273
val usersProp = UsersProp(maxUsers = maxUsers, webcamsOnlyForModerator = webcamsOnlyForModerator,
7374
userCameraCap = userCameraCap,
74-
guestPolicy = guestPolicy, allowModsToUnmuteUsers = allowModsToUnmuteUsers, allowModsToEjectCameras = allowModsToEjectCameras, authenticatedGuest = authenticatedGuest)
75+
guestPolicy = guestPolicy, allowModsToUnmuteUsers = allowModsToUnmuteUsers, allowModsToEjectCameras = allowModsToEjectCameras, authenticatedGuest = authenticatedGuest, allowPromoteGuestToModerator = allowPromoteGuestToModerator)
7576
val metadataProp = new MetadataProp(metadata)
7677
val defaultProps = DefaultProps(meetingProp, breakoutProps, durationProps, password, recordProp, welcomeProp, voiceProp,
7778
usersProp, metadataProp)

bbb-common-web/src/main/java/org/bigbluebutton/api/ApiParams.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class ApiParams {
3333
public static final String FREE_JOIN = "freeJoin";
3434
public static final String FULL_NAME = "fullName";
3535
public static final String GUEST_POLICY = "guestPolicy";
36+
public static final String ALLOW_PROMOTE_GUEST_TO_MODERATOR = "allowPromoteGuestToModerator";
3637
public static final String MEETING_LAYOUT = "meetingLayout";
3738
public static final String IS_BREAKOUT = "isBreakout";
3839
public static final String LOGO = "logo";

bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,8 +446,8 @@ private void handleCreateMeeting(Meeting m) {
446446
m.getWebcamsOnlyForModerator(), m.getMeetingCameraCap(), m.getUserCameraCap(), m.getMaxPinnedCameras(), m.getModeratorPassword(), m.getViewerPassword(),
447447
m.getLearningDashboardAccessToken(), m.getCreateTime(),
448448
formatPrettyDate(m.getCreateTime()), m.isBreakout(), m.getSequence(), m.isFreeJoin(), m.getMetadata(),
449-
m.getGuestPolicy(), m.getAuthenticatedGuest(), m.getMeetingLayout(), m.getWelcomeMessageTemplate(), m.getWelcomeMessage(), m.getModeratorOnlyMessage(),
450-
m.getDialNumber(), m.getMaxUsers(), m.getMaxUserConcurrentAccesses(),
449+
m.getGuestPolicy(), m.getAuthenticatedGuest(), m.getAllowPromoteGuestToModerator(), m.getMeetingLayout(), m.getWelcomeMessageTemplate(), m.getWelcomeMessage(),
450+
m.getModeratorOnlyMessage(), m.getDialNumber(), m.getMaxUsers(), m.getMaxUserConcurrentAccesses(),
451451
m.getMeetingExpireIfNoUserJoinedInMinutes(), m.getMeetingExpireWhenLastUserLeftInMinutes(),
452452
m.getUserInactivityInspectTimerInMinutes(), m.getUserInactivityThresholdInMinutes(),
453453
m.getUserActivitySignResponseDelayInMinutes(), m.getEndWhenNoModerator(), m.getEndWhenNoModeratorDelayInMinutes(),

bbb-common-web/src/main/java/org/bigbluebutton/api/ParamsProcessorUtil.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class ParamsProcessorUtil {
7979
private String defaultAvatarURL;
8080
private String defaultGuestPolicy;
8181
private Boolean authenticatedGuest;
82+
private Boolean defaultAllowPromoteGuestToModerator;
8283
private String defaultMeetingLayout;
8384
private int defaultMeetingDuration;
8485
private boolean disableRecordingDefault;
@@ -672,6 +673,11 @@ boolean record = processRecordMeeting(params.get(ApiParams.RECORD));
672673
guestPolicy = params.get(ApiParams.GUEST_POLICY);
673674
}
674675

676+
Boolean allowPromoteGuestToModerator = defaultAllowPromoteGuestToModerator;
677+
if (!StringUtils.isEmpty(params.get(ApiParams.ALLOW_PROMOTE_GUEST_TO_MODERATOR))) {
678+
allowPromoteGuestToModerator = Boolean.parseBoolean(params.get(ApiParams.ALLOW_PROMOTE_GUEST_TO_MODERATOR));
679+
}
680+
675681
String presentationUploadExternalDescription = defaultPresentationUploadExternalDescription;
676682
if (!StringUtils.isEmpty(params.get(ApiParams.PRESENTATION_UPLOAD_EXTERNAL_DESCRIPTION))) {
677683
presentationUploadExternalDescription = params.get(ApiParams.PRESENTATION_UPLOAD_EXTERNAL_DESCRIPTION);
@@ -760,6 +766,7 @@ boolean record = processRecordMeeting(params.get(ApiParams.RECORD));
760766
.withWelcomeMessage(welcomeMessage).isBreakout(isBreakout)
761767
.withGuestPolicy(guestPolicy)
762768
.withAuthenticatedGuest(authenticatedGuest)
769+
.withAllowPromoteGuestToModerator(allowPromoteGuestToModerator)
763770
.withAllowRequestsWithoutSession(allowRequestsWithoutSession)
764771
.withMeetingLayout(meetingLayout)
765772
.withBreakoutRoomsParams(breakoutParams)
@@ -1290,6 +1297,10 @@ public void setAuthenticatedGuest(Boolean value) {
12901297
this.authenticatedGuest = value;
12911298
}
12921299

1300+
public void setDefaultAllowPromoteGuestToModerator(Boolean value) {
1301+
this.defaultAllowPromoteGuestToModerator = value;
1302+
}
1303+
12931304
public void setDefaultMeetingLayout(String meetingLayout) {
12941305
this.defaultMeetingLayout = meetingLayout;
12951306
}

bbb-common-web/src/main/java/org/bigbluebutton/api/domain/Meeting.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public class Meeting {
8181
private String guestLobbyMessage = "";
8282
private Map<String,String> usersWithGuestLobbyMessages;
8383
private Boolean authenticatedGuest = false;
84+
private Boolean allowPromoteGuestToModerator = false;
8485
private String meetingLayout = MeetingLayout.SMART_LAYOUT;
8586
private boolean userHasJoined = false;
8687
private Map<String, String> guestUsersWithPositionInWaitingLine;
@@ -165,6 +166,7 @@ record = builder.record;
165166
isBreakout = builder.isBreakout;
166167
guestPolicy = builder.guestPolicy;
167168
authenticatedGuest = builder.authenticatedGuest;
169+
allowPromoteGuestToModerator = builder.allowPromoteGuestToModerator;
168170
meetingLayout = builder.meetingLayout;
169171
allowRequestsWithoutSession = builder.allowRequestsWithoutSession;
170172
breakoutRoomsParams = builder.breakoutRoomsParams;
@@ -501,6 +503,14 @@ public Boolean getAuthenticatedGuest() {
501503
return authenticatedGuest;
502504
}
503505

506+
public void setAllowPromoteGuestToModerator(Boolean value) {
507+
allowPromoteGuestToModerator = value;
508+
}
509+
510+
public Boolean getAllowPromoteGuestToModerator() {
511+
return allowPromoteGuestToModerator;
512+
}
513+
504514
public void setMeetingLayout(String layout) {
505515
meetingLayout = layout;
506516
}
@@ -910,6 +920,7 @@ public static class Builder {
910920
private boolean isBreakout;
911921
private String guestPolicy;
912922
private Boolean authenticatedGuest;
923+
private Boolean allowPromoteGuestToModerator;
913924
private Boolean allowRequestsWithoutSession;
914925
private String meetingLayout;
915926
private BreakoutRoomsParams breakoutRoomsParams;
@@ -1096,6 +1107,11 @@ public Builder withAuthenticatedGuest(Boolean authGuest) {
10961107
return this;
10971108
}
10981109

1110+
public Builder withAllowPromoteGuestToModerator(Boolean value) {
1111+
allowPromoteGuestToModerator = value;
1112+
return this;
1113+
}
1114+
10991115
public Builder withAllowRequestsWithoutSession(Boolean value) {
11001116
allowRequestsWithoutSession = value;
11011117
return this;

bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void createMeeting(String meetingID, String externalMeetingID,
2626
Integer maxPinnedCameras,
2727
String moderatorPass, String viewerPass, String learningDashboardAccessToken, Long createTime,
2828
String createDate, Boolean isBreakout, Integer sequence, Boolean freejoin, Map<String, String> metadata,
29-
String guestPolicy, Boolean authenticatedGuest, String meetingLayout, String welcomeMsgTemplate, String welcomeMsg, String modOnlyMessage,
29+
String guestPolicy, Boolean authenticatedGuest, Boolean allowPromoteGuestToModerator, String meetingLayout, String welcomeMsgTemplate, String welcomeMsg, String modOnlyMessage,
3030
String dialNumber, Integer maxUsers, Integer maxUserConcurrentAccesses,
3131
Integer meetingExpireIfNoUserJoinedInMinutes,
3232
Integer meetingExpireWhenLastUserLeftInMinutes,

0 commit comments

Comments
 (0)