Properly handle login/logout.
parent
d3d3e9626e
commit
98caed6e4a
|
|
@ -317,34 +317,49 @@ export default class RoomClient
|
||||||
{
|
{
|
||||||
const url = `/auth/login?id=${this._peerId}`;
|
const url = `/auth/login?id=${this._peerId}`;
|
||||||
|
|
||||||
this._loginWindow = window.open(url, 'loginWindow');
|
window.open(url, 'loginWindow');
|
||||||
}
|
}
|
||||||
|
|
||||||
logout()
|
logout()
|
||||||
{
|
{
|
||||||
window.location = '/auth/logout';
|
window.open('/auth/logout', 'logoutWindow');
|
||||||
}
|
}
|
||||||
|
|
||||||
receiveFromChildWindow(data)
|
receiveLoginChildWindow(data)
|
||||||
{
|
{
|
||||||
logger.debug('receiveFromChildWindow() | [data:"%o"]', data);
|
logger.debug('receiveFromChildWindow() | [data:"%o"]', data);
|
||||||
|
|
||||||
const { displayName, picture } = data;
|
const { displayName, picture } = data;
|
||||||
|
|
||||||
store.dispatch(stateActions.setDisplayName(displayName));
|
if (store.getState().room.state === 'connected')
|
||||||
store.dispatch(stateActions.setPicture(picture));
|
{
|
||||||
store.dispatch(stateActions.loggedIn());
|
this.changeDisplayName(displayName);
|
||||||
|
this.changePicture(picture);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
store.dispatch(stateActions.setDisplayName(displayName));
|
||||||
|
store.dispatch(stateActions.setPicture(picture));
|
||||||
|
}
|
||||||
|
|
||||||
|
store.dispatch(stateActions.loggedIn(true));
|
||||||
|
|
||||||
store.dispatch(requestActions.notify(
|
store.dispatch(requestActions.notify(
|
||||||
{
|
{
|
||||||
text : 'You are logged in.'
|
text : 'You are logged in.'
|
||||||
}));
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
if (store.getState().room.state !== 'new') // no socket yet
|
receiveLogoutChildWindow()
|
||||||
{
|
{
|
||||||
this.changeDisplayName(displayName);
|
logger.debug('receiveLogoutChildWindow()');
|
||||||
this.changePicture(picture);
|
|
||||||
}
|
store.dispatch(stateActions.loggedIn(false));
|
||||||
|
|
||||||
|
store.dispatch(requestActions.notify(
|
||||||
|
{
|
||||||
|
text : 'You are logged out.'
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
_soundNotification()
|
_soundNotification()
|
||||||
|
|
|
||||||
|
|
@ -165,6 +165,14 @@ export const setDisplayName = (displayName) =>
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const setDisplayNameInProgress = (flag) =>
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
type : 'SET_DISPLAY_NAME_IN_PROGRESS',
|
||||||
|
payload : { flag }
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export const toggleAdvancedMode = () =>
|
export const toggleAdvancedMode = () =>
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
|
|
@ -641,9 +649,10 @@ export const setPeerPicture = (peerId, picture) =>
|
||||||
payload : { peerId, picture }
|
payload : { peerId, picture }
|
||||||
});
|
});
|
||||||
|
|
||||||
export const loggedIn = () =>
|
export const loggedIn = (flag) =>
|
||||||
({
|
({
|
||||||
type : 'LOGGED_IN'
|
type : 'LOGGED_IN',
|
||||||
|
payload : { flag }
|
||||||
});
|
});
|
||||||
|
|
||||||
export const toggleJoined = () =>
|
export const toggleJoined = () =>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ const initialState =
|
||||||
webcamInProgress : false,
|
webcamInProgress : false,
|
||||||
audioInProgress : false,
|
audioInProgress : false,
|
||||||
screenShareInProgress : false,
|
screenShareInProgress : false,
|
||||||
|
displayNameInProgress : false,
|
||||||
loginEnabled : false,
|
loginEnabled : false,
|
||||||
raiseHand : false,
|
raiseHand : false,
|
||||||
raiseHandInProgress : false,
|
raiseHandInProgress : false,
|
||||||
|
|
@ -39,7 +40,11 @@ const me = (state = initialState, action) =>
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'LOGGED_IN':
|
case 'LOGGED_IN':
|
||||||
return { ...state, loggedIn: true };
|
{
|
||||||
|
const { flag } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, loggedIn: flag };
|
||||||
|
}
|
||||||
|
|
||||||
case 'USER_LOGOUT':
|
case 'USER_LOGOUT':
|
||||||
return { ...state, loggedIn: false };
|
return { ...state, loggedIn: false };
|
||||||
|
|
@ -114,6 +119,13 @@ const me = (state = initialState, action) =>
|
||||||
return { ...state, raiseHandInProgress: flag };
|
return { ...state, raiseHandInProgress: flag };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'SET_DISPLAY_NAME_IN_PROGRESS':
|
||||||
|
{
|
||||||
|
const { flag } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, displayNameInProgress: flag };
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
function httpHelper(data)
|
exports.loginHelper = function(data)
|
||||||
{
|
{
|
||||||
const html = `<!DOCTYPE html>
|
const html = `<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
@ -10,7 +10,7 @@ function httpHelper(data)
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
let data = ${JSON.stringify(data)};
|
let data = ${JSON.stringify(data)};
|
||||||
|
|
||||||
window.opener.CLIENT.receiveFromChildWindow(data);
|
window.opener.CLIENT.receiveLoginChildWindow(data);
|
||||||
|
|
||||||
window.close();
|
window.close();
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -18,6 +18,24 @@ function httpHelper(data)
|
||||||
</html>`;
|
</html>`;
|
||||||
|
|
||||||
return html;
|
return html;
|
||||||
}
|
};
|
||||||
|
|
||||||
module.exports = httpHelper;
|
exports.logoutHelper = function()
|
||||||
|
{
|
||||||
|
const html = `<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset='utf-8'>
|
||||||
|
<title>Multiparty Meeting</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type='text/javascript'>
|
||||||
|
window.opener.CLIENT.receiveLogoutChildWindow();
|
||||||
|
|
||||||
|
window.close();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>`;
|
||||||
|
|
||||||
|
return html;
|
||||||
|
};
|
||||||
|
|
@ -6,7 +6,6 @@ const config = require('./config/config');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const http = require('http');
|
const http = require('http');
|
||||||
const spdy = require('spdy');
|
const spdy = require('spdy');
|
||||||
const { constants } = require('crypto');
|
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const bodyParser = require('body-parser');
|
const bodyParser = require('body-parser');
|
||||||
const cookieParser = require('cookie-parser');
|
const cookieParser = require('cookie-parser');
|
||||||
|
|
@ -18,7 +17,10 @@ const Room = require('./lib/Room');
|
||||||
const Peer = require('./lib/Peer');
|
const Peer = require('./lib/Peer');
|
||||||
const base64 = require('base-64');
|
const base64 = require('base-64');
|
||||||
const helmet = require('helmet');
|
const helmet = require('helmet');
|
||||||
const httpHelper = require('./httpHelper');
|
const {
|
||||||
|
loginHelper,
|
||||||
|
logoutHelper
|
||||||
|
} = require('./httpHelper');
|
||||||
// auth
|
// auth
|
||||||
const passport = require('passport');
|
const passport = require('passport');
|
||||||
const redis = require('redis');
|
const redis = require('redis');
|
||||||
|
|
@ -88,7 +90,8 @@ const session = expressSession({
|
||||||
store : new RedisStore({ client }),
|
store : new RedisStore({ client }),
|
||||||
cookie : {
|
cookie : {
|
||||||
secure : true,
|
secure : true,
|
||||||
httpOnly : true
|
httpOnly : true,
|
||||||
|
maxAge : 60 * 60 * 1000 // Expire after 1 hour since last request from user
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -268,7 +271,7 @@ async function setupAuth(oidcIssuer)
|
||||||
app.get('/auth/logout', (req, res) =>
|
app.get('/auth/logout', (req, res) =>
|
||||||
{
|
{
|
||||||
req.logout();
|
req.logout();
|
||||||
res.redirect('/');
|
res.send(logoutHelper());
|
||||||
});
|
});
|
||||||
|
|
||||||
// callback
|
// callback
|
||||||
|
|
@ -301,7 +304,7 @@ async function setupAuth(oidcIssuer)
|
||||||
peer && (peer.displayName = displayName);
|
peer && (peer.displayName = displayName);
|
||||||
peer && (peer.picture = picture);
|
peer && (peer.picture = picture);
|
||||||
|
|
||||||
res.send(httpHelper({
|
res.send(loginHelper({
|
||||||
displayName,
|
displayName,
|
||||||
picture
|
picture
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue