From 28bad32f6975492a075f87aa2ee39b16daa5238f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5var=20Aamb=C3=B8=20Fosstveit?= Date: Mon, 4 May 2020 00:40:39 +0200 Subject: [PATCH] Add permission for sending extra video, fixes #280 --- app/src/components/Controls/TopBar.js | 50 +++++++++++++++------------ app/src/reducers/room.js | 1 + server/config/config.example.js | 2 ++ server/lib/Room.js | 8 +++++ 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/app/src/components/Controls/TopBar.js b/app/src/components/Controls/TopBar.js index 64e56d5..77970dc 100644 --- a/app/src/components/Controls/TopBar.js +++ b/app/src/components/Controls/TopBar.js @@ -165,6 +165,7 @@ const TopBar = (props) => toggleToolArea, openUsersTab, unread, + canProduceExtraVideo, canLock, canPromote, classes @@ -414,6 +415,7 @@ const TopBar = (props) => > { handleMoreActionsClose(); @@ -435,28 +437,29 @@ const TopBar = (props) => TopBar.propTypes = { - roomClient : PropTypes.object.isRequired, - room : appPropTypes.Room.isRequired, - peersLength : PropTypes.number, - lobbyPeers : PropTypes.array, - permanentTopBar : PropTypes.bool, - myPicture : PropTypes.string, - loggedIn : PropTypes.bool.isRequired, - loginEnabled : PropTypes.bool.isRequired, - fullscreenEnabled : PropTypes.bool, - fullscreen : PropTypes.bool, - onFullscreen : PropTypes.func.isRequired, - setToolbarsVisible : PropTypes.func.isRequired, - setSettingsOpen : PropTypes.func.isRequired, - setExtraVideoOpen : PropTypes.func.isRequired, - setLockDialogOpen : PropTypes.func.isRequired, - toggleToolArea : PropTypes.func.isRequired, - openUsersTab : PropTypes.func.isRequired, - unread : PropTypes.number.isRequired, - canLock : PropTypes.bool.isRequired, - canPromote : PropTypes.bool.isRequired, - classes : PropTypes.object.isRequired, - theme : PropTypes.object.isRequired + roomClient : PropTypes.object.isRequired, + room : appPropTypes.Room.isRequired, + peersLength : PropTypes.number, + lobbyPeers : PropTypes.array, + permanentTopBar : PropTypes.bool, + myPicture : PropTypes.string, + loggedIn : PropTypes.bool.isRequired, + loginEnabled : PropTypes.bool.isRequired, + fullscreenEnabled : PropTypes.bool, + fullscreen : PropTypes.bool, + onFullscreen : PropTypes.func.isRequired, + setToolbarsVisible : PropTypes.func.isRequired, + setSettingsOpen : PropTypes.func.isRequired, + setExtraVideoOpen : PropTypes.func.isRequired, + setLockDialogOpen : PropTypes.func.isRequired, + toggleToolArea : PropTypes.func.isRequired, + openUsersTab : PropTypes.func.isRequired, + unread : PropTypes.number.isRequired, + canProduceExtraVideo : PropTypes.bool.isRequired, + canLock : PropTypes.bool.isRequired, + canPromote : PropTypes.bool.isRequired, + classes : PropTypes.object.isRequired, + theme : PropTypes.object.isRequired }; const mapStateToProps = (state) => @@ -470,6 +473,9 @@ const mapStateToProps = (state) => myPicture : state.me.picture, unread : state.toolarea.unreadMessages + state.toolarea.unreadFiles + raisedHandsSelector(state), + canProduceExtraVideo : + state.me.roles.some((role) => + state.room.permissionsFromRoles.EXTRA_VIDEO.includes(role)), canLock : state.me.roles.some((role) => state.room.permissionsFromRoles.CHANGE_ROOM_LOCK.includes(role)), diff --git a/app/src/reducers/room.js b/app/src/reducers/room.js index 35c1e12..0e422df 100644 --- a/app/src/reducers/room.js +++ b/app/src/reducers/room.js @@ -36,6 +36,7 @@ const initialState = SEND_CHAT : [], MODERATE_CHAT : [], SHARE_SCREEN : [], + EXTRA_VIDEO : [], SHARE_FILE : [], MODERATE_FILES : [], MODERATE_ROOM : [] diff --git a/server/config/config.example.js b/server/config/config.example.js index a1f9b84..12bf938 100644 --- a/server/config/config.example.js +++ b/server/config/config.example.js @@ -235,6 +235,8 @@ module.exports = MODERATE_CHAT : [ userRoles.MODERATOR ], // The role(s) have permission to share screen SHARE_SCREEN : [ userRoles.NORMAL ], + // The role(s) have permission to produce extra video + EXTRA_VIDEO : [ userRoles.NORMAL ], // The role(s) have permission to share files SHARE_FILE : [ userRoles.NORMAL ], // The role(s) have permission to moderate files diff --git a/server/lib/Room.js b/server/lib/Room.js index fc9b2e9..4250fd5 100644 --- a/server/lib/Room.js +++ b/server/lib/Room.js @@ -24,6 +24,7 @@ const permissionsFromRoles = SEND_CHAT : [ userRoles.NORMAL ], MODERATE_CHAT : [ userRoles.MODERATOR ], SHARE_SCREEN : [ userRoles.NORMAL ], + EXTRA_VIDEO : [ userRoles.NORMAL ], SHARE_FILE : [ userRoles.NORMAL ], MODERATE_FILES : [ userRoles.MODERATOR ], MODERATE_ROOM : [ userRoles.MODERATOR ], @@ -747,6 +748,13 @@ class Room extends EventEmitter ) throw new Error('peer not authorized'); + if ( + appData.source === 'extravideo' && + !peer.roles.some( + (role) => permissionsFromRoles.EXTRA_VIDEO.includes(role)) + ) + throw new Error('peer not authorized'); + // Ensure the Peer is joined. if (!peer.joined) throw new Error('Peer not yet joined');