Added support for locking rooms

This commit is contained in:
Håvar Aambø Fosstveit
2019-02-15 12:23:05 +01:00
parent 4fd3c6c8b1
commit 1c5f90cff6
11 changed files with 331 additions and 108 deletions
+42
View File
@@ -25,6 +25,9 @@ class Room extends EventEmitter
// Closed flag.
this._closed = false;
// Locked flag.
this._locked = false;
this._chatHistory = [];
this._fileHistory = [];
@@ -102,6 +105,7 @@ class Room extends EventEmitter
{
logger.info('handleConnection() [peerName:"%s"]', peerName);
// This will allow reconnects to join despite lock
if (this._signalingPeers.has(peerName))
{
logger.warn(
@@ -114,6 +118,11 @@ class Room extends EventEmitter
signalingPeer.socket.disconnect();
this._signalingPeers.delete(peerName);
}
else if (this._locked) // Don't allow connections to a locked room
{
socket.emit('room-locked');
socket.disconnect(true);
}
const signalingPeer = { peerName : peerName, socket : socket };
@@ -127,6 +136,7 @@ class Room extends EventEmitter
this._signalingPeers.set(peerName, signalingPeer);
this._handleSignalingPeer(signalingPeer);
socket.emit('room-ready');
}
authCallback(data)
@@ -308,6 +318,38 @@ class Room extends EventEmitter
);
});
signalingPeer.socket.on('lock-room', (request, cb) =>
{
// Return no error
cb(null);
this._locked = true;
// Spread to others
signalingPeer.socket.broadcast.to(this._roomId).emit(
'lock-room',
{
peerName : signalingPeer.peerName
}
);
});
signalingPeer.socket.on('unlock-room', (request, cb) =>
{
// Return no error
cb(null);
this._locked = false;
// Spread to others
signalingPeer.socket.broadcast.to(this._roomId).emit(
'unlock-room',
{
peerName : signalingPeer.peerName
}
);
});
signalingPeer.socket.on('send-file', (request, cb) =>
{
// Return no error
+6 -7
View File
@@ -10,7 +10,6 @@ const https = require('https');
const http = require('http');
const express = require('express');
const compression = require('compression');
const url = require('url');
const Logger = require('./lib/Logger');
const Room = require('./lib/Room');
const Dataporten = require('passport-dataporten');
@@ -46,12 +45,12 @@ const dataporten = new Dataporten.Setup(config.oauth2);
app.all('*', (req, res, next) =>
{
if(req.secure)
if (req.secure)
{
return next();
}
res.redirect('https://' + req.hostname + req.url);
res.redirect(`https://${req.hostname}${req.url}`);
});
app.use(dataporten.passport.initialize());
@@ -71,10 +70,10 @@ app.get('/login', (req, res, next) =>
dataporten.setupLogout(app, '/logout');
app.get('/', function (req, res) {
console.log(req.url);
res.sendFile(`${__dirname}/public/chooseRoom.html`);
})
app.get('/', (req, res) =>
{
res.sendFile(`${__dirname}/public/chooseRoom.html`);
});
app.get(
'/auth-callback',