diff --git a/app/src/components/App.js b/app/src/components/App.js new file mode 100644 index 0000000..9cd566b --- /dev/null +++ b/app/src/components/App.js @@ -0,0 +1,56 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import Room from './Room'; +import JoinDialog from './JoinDialog'; +import Lobby from './Lobby'; + +const App = (props) => +{ + const { + room + } = props; + + if (room.lockedOut) + { + return ( + + ); + } + else if (!room.joined) + { + return ( + + ); + } + else + { + return ( + + ); + } +} + +App.propTypes = +{ + room : PropTypes.object.isRequired +}; + +const mapStateToProps = (state) => + ({ + room : state.room + }); + +export default connect( + mapStateToProps, + null, + null, + { + areStatesEqual : (next, prev) => + { + return ( + prev.room === next.room + ); + } + } +)(App); \ No newline at end of file diff --git a/app/src/components/JoinDialog.js b/app/src/components/JoinDialog.js index c5bca93..ed7f290 100644 --- a/app/src/components/JoinDialog.js +++ b/app/src/components/JoinDialog.js @@ -14,6 +14,15 @@ const styles = (theme) => ({ root : { + display : 'flex', + width : '100%', + height : '100%', + backgroundColor : 'var(--background-color)', + backgroundImage : `url(${window.config.background})`, + backgroundAttachment : 'fixed', + backgroundPosition : 'center', + backgroundSize : 'cover', + backgroundRepeat : 'no-repeat' }, dialogPaper : { @@ -50,52 +59,53 @@ const JoinDialog = ({ }) => { return ( - - { window.config.logo ? - Logo - :null - } - You are about to join a meeting, how would you like to join? - - - - - { - const { value } = event.target; +
+ + { window.config.logo ? + Logo + :null + } + You are about to join a meeting, how would you like to join? + + + + + { + const { value } = event.target; - changeDisplayName(value); - }} - margin='normal' - /> - - + changeDisplayName(value); + }} + margin='normal' + /> + +
+ ); }; diff --git a/app/src/components/Lobby.js b/app/src/components/Lobby.js new file mode 100644 index 0000000..0d29762 --- /dev/null +++ b/app/src/components/Lobby.js @@ -0,0 +1,108 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { withStyles } from '@material-ui/core/styles'; +import { withRoomContext } from '../RoomContext'; +import * as stateActions from '../actions/stateActions'; +import PropTypes from 'prop-types'; +import Dialog from '@material-ui/core/Dialog'; +import Typography from '@material-ui/core/Typography'; +import Paper from '@material-ui/core/Paper'; +import DialogActions from '@material-ui/core/DialogActions'; +import Button from '@material-ui/core/Button'; +import TextField from '@material-ui/core/TextField'; + +const styles = (theme) => + ({ + root : + { + display : 'flex', + width : '100%', + height : '100%', + backgroundColor : 'var(--background-color)', + backgroundImage : `url(${window.config.background})`, + backgroundAttachment : 'fixed', + backgroundPosition : 'center', + backgroundSize : 'cover', + backgroundRepeat : 'no-repeat' + }, + dialogPaper : + { + width : '20vw', + padding : theme.spacing(2), + [theme.breakpoints.down('lg')] : + { + width : '30vw' + }, + [theme.breakpoints.down('md')] : + { + width : '40vw' + }, + [theme.breakpoints.down('sm')] : + { + width : '60vw' + }, + [theme.breakpoints.down('xs')] : + { + width : '80vw' + } + }, + logo : + { + display : 'block' + } + }); + +const Lobby = ({ + roomClient, + displayName, + changeDisplayName, + classes +}) => +{ + return ( +
+ + This room is locked at the moment, try again later. + +
+ ); +}; + +Lobby.propTypes = +{ + roomClient : PropTypes.any.isRequired, + displayName : PropTypes.string.isRequired, + changeDisplayName : PropTypes.func.isRequired, + classes : PropTypes.object.isRequired +}; + +const mapStateToProps = (state) => +{ + return { + displayName : state.settings.displayName + }; +}; + +const mapDispatchToProps = (dispatch) => +{ + return { + changeDisplayName : (displayName) => + { + dispatch(stateActions.setDisplayName(displayName)); + } + }; +}; + +export default withRoomContext(connect( + mapStateToProps, + mapDispatchToProps, + null, + { + areStatesEqual : (next, prev) => + { + return ( + prev.settings.displayName === next.settings.displayName + ); + } + } +)(withStyles(styles)(Lobby))); \ No newline at end of file diff --git a/app/src/components/Room.js b/app/src/components/Room.js index c002a94..71750b1 100644 --- a/app/src/components/Room.js +++ b/app/src/components/Room.js @@ -13,7 +13,6 @@ import AppBar from '@material-ui/core/AppBar'; import Toolbar from '@material-ui/core/Toolbar'; import SwipeableDrawer from '@material-ui/core/SwipeableDrawer'; import Hidden from '@material-ui/core/Hidden'; -import Paper from '@material-ui/core/Paper'; import Typography from '@material-ui/core/Typography'; import IconButton from '@material-ui/core/IconButton'; import MenuIcon from '@material-ui/icons/Menu'; @@ -32,10 +31,9 @@ import FullScreenExitIcon from '@material-ui/icons/FullscreenExit'; import SettingsIcon from '@material-ui/icons/Settings'; import LockIcon from '@material-ui/icons/Lock'; import LockOpenIcon from '@material-ui/icons/LockOpen'; +import LockDialog from './AccessControl/LockDialog/LockDialog'; import Button from '@material-ui/core/Button'; import Settings from './Settings/Settings'; -import JoinDialog from './JoinDialog'; -import LockDialog from './AccessControl/LockDialog/LockDialog'; const TIMEOUT = 10 * 1000; @@ -279,159 +277,133 @@ class Room extends React.PureComponent democratic : Democratic }[room.mode]; - if (room.lockedOut) - { - return ( -
- - This room is locked at the moment, try again later. - -
- ); - } - else if (!room.joined) - { - return ( -
- -
- ); - } - else - { - return ( -
- - This website uses cookies to enhance the user experience. - + return ( +
+ + This website uses cookies to enhance the user experience. + - + - + - + - + - + - - - - toggleToolArea()} - className={classes.menuButton} - > - - - - { window.config.logo ? - Logo - :null - } - + + + toggleToolArea()} + className={classes.menuButton} > - { window.config.title } - -
-
- { this.fullscreen.fullscreenEnabled ? - - { this.state.fullscreen ? - - : - - } - - :null - } + + + + { window.config.logo && Logo } + + { window.config.title } + +
+
+ setLockDialogOpen(!room.lockDialogOpen)} + > + { room.locked ? : } + + { this.fullscreen.fullscreenEnabled && setSettingsOpen(!room.settingsOpen)} + onClick={this.handleToggleFullscreen} > - + { this.state.fullscreen ? + + : + + } - setLockDialogOpen(!room.lockDialogOpen)} - > - { room.locked ? : } - - { loginEnabled ? - - { - loggedIn ? roomClient.logout() : roomClient.login(); - }} - > - { myPicture ? - - : - - } - - :null - } - -
- - - + + + { loginEnabled && + + { + loggedIn ? roomClient.logout() : roomClient.login(); + }} + > + { myPicture ? + + : + + } + + } + +
+ + + - + - + - -
- ); - } + +
+ ); } } diff --git a/app/src/index.js b/app/src/index.js index c85fa18..e463fbc 100644 --- a/app/src/index.js +++ b/app/src/index.js @@ -9,7 +9,7 @@ import RoomClient from './RoomClient'; import RoomContext from './RoomContext'; import deviceInfo from './deviceInfo'; import * as stateActions from './actions/stateActions'; -import Room from './components/Room'; +import App from './components/App'; import LoadingView from './components/LoadingView'; import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'; import { PersistGate } from 'redux-persist/lib/integration/react'; @@ -95,7 +95,7 @@ function run() } persistor={persistor}> - + diff --git a/server/server.js b/server/server.js index 2af5bdd..4e42518 100755 --- a/server/server.js +++ b/server/server.js @@ -19,12 +19,7 @@ const base64 = require('base-64'); // auth const passport = require('passport'); const { Issuer, Strategy } = require('openid-client'); -const session = require('express-session')({ - secret : config.cookieSecret, - resave : true, - saveUninitialized : true, - cookie : { secure: true } -}); +const expressSession = require('express-session'); const sharedSession = require('express-socket.io-session'); /* eslint-disable no-console */ @@ -57,6 +52,13 @@ const tls = const app = express(); +const session = expressSession({ + secret : config.cookieSecret, + resave : true, + saveUninitialized : true, + cookie : { secure: true } +}) + app.use(session); let httpsServer;