Session uuids managed by server
This commit is contained in:
parent
6775b427a5
commit
6e79c5c841
|
@ -30,7 +30,8 @@
|
||||||
"bin" : "./server.js",
|
"bin" : "./server.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-static": "~0.7.9",
|
"node-static": "~0.7.9",
|
||||||
"socket.io": "~1.7.2"
|
"socket.io": "~1.7.2",
|
||||||
|
"uuid": "*"
|
||||||
},
|
},
|
||||||
"os": [
|
"os": [
|
||||||
"darwin",
|
"darwin",
|
||||||
|
|
|
@ -29,6 +29,21 @@ body, html {
|
||||||
.info { color: #99FFFF; }
|
.info { color: #99FFFF; }
|
||||||
.neutral { color: #eeeeee; }
|
.neutral { color: #eeeeee; }
|
||||||
|
|
||||||
|
/*------------------------------------*\
|
||||||
|
PARTICIPANTS
|
||||||
|
\*------------------------------------*/
|
||||||
|
#participants {
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 200px;
|
||||||
|
position: absolute;
|
||||||
|
padding:0;
|
||||||
|
margin:0;
|
||||||
|
background-color: #282A2D;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------*\
|
/*------------------------------------*\
|
||||||
CHAT
|
CHAT
|
||||||
\*------------------------------------*/
|
\*------------------------------------*/
|
||||||
|
@ -70,7 +85,7 @@ body, html {
|
||||||
INPUT & LOADER
|
INPUT & LOADER
|
||||||
\*------------------------------------*/
|
\*------------------------------------*/
|
||||||
#input_wrapper {
|
#input_wrapper {
|
||||||
right:0;
|
right:200px;
|
||||||
bottom:0;
|
bottom:0;
|
||||||
left:0;
|
left:0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
|
@ -18,22 +18,28 @@
|
||||||
<li>SRV> Booting ...</li>
|
<li>SRV> Booting ...</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<!-- Participants -->
|
||||||
|
<div id="participants">
|
||||||
|
hey
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Message input -->
|
<!-- Message input -->
|
||||||
<div id="input_wrapper" class="loading">
|
<div id="input_wrapper" class="loading">
|
||||||
<div id="loader"><span>|</span></div>
|
<div id="loader"><span>|</span></div>
|
||||||
|
<span class="current">Yo</span>
|
||||||
<input type="text" id="input" />
|
<input type="text" id="input" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Production JS
|
Production JS
|
||||||
-->
|
|
||||||
<script src="js/cryptalk.min.js"></script>
|
|
||||||
|
|
||||||
|
<script src="js/cryptalk.min.js"></script>
|
||||||
|
-->
|
||||||
<!--
|
<!--
|
||||||
Development JS
|
Development JS
|
||||||
|
|
||||||
<script src="js/lib/main.js"></script>
|
|
||||||
-->
|
-->
|
||||||
|
<script src="js/lib/main.js"></script>
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -106,7 +106,7 @@ define(['$', 'castrato', 'settings', 'templates', 'sounds', 'room', 'notificatio
|
||||||
},
|
},
|
||||||
|
|
||||||
message: function (data) {
|
message: function (data) {
|
||||||
commands.post('message', data.message, data.nick);
|
commands.post('message', data.message, '[' + data.uuid.substring(0,8) + '] ' + data.nick);
|
||||||
},
|
},
|
||||||
|
|
||||||
clearInput: function () {
|
clearInput: function () {
|
||||||
|
@ -188,16 +188,22 @@ define(['$', 'castrato', 'settings', 'templates', 'sounds', 'room', 'notificatio
|
||||||
return (!parameters.room) ? commands.post('error', templates.messages.msg_no_room) : commands.post('error', templates.messages.msg_no_key);
|
return (!parameters.room) ? commands.post('error', templates.messages.msg_no_room) : commands.post('error', templates.messages.msg_no_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Before sending the message.
|
var plainData = {
|
||||||
// Encrypt message using room UUID as salt and key as pepper.
|
msg: buffer,
|
||||||
|
nick: parameters.nick ? parameters.nick : false
|
||||||
|
},
|
||||||
|
|
||||||
|
encData = $.AES.encrypt(JSON.stringify(plainData), parameters.room + parameters.key).toString(),
|
||||||
|
|
||||||
|
hashRoom = $.SHA1(parameters.room);
|
||||||
|
|
||||||
mediator.emit(
|
mediator.emit(
|
||||||
'socket:emit',
|
'socket:emit',
|
||||||
{
|
{
|
||||||
data: 'message:send',
|
data: 'message:send',
|
||||||
payload: {
|
payload: {
|
||||||
room: $.SHA1(parameters.room),
|
room: hashRoom,
|
||||||
msg: $.AES.encrypt(buffer, $.SHA1(parameters.room) + parameters.key).toString(),
|
data: encData
|
||||||
nick: parameters.nick ? $.AES.encrypt(parameters.nick, $.SHA1(parameters.room) + parameters.key).toString() : false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -146,14 +146,19 @@ define(['$', 'castrato','settings','templates','hosts','window'], function ($, m
|
||||||
})
|
})
|
||||||
|
|
||||||
.on('message:send', function (data) {
|
.on('message:send', function (data) {
|
||||||
var decrypted = $.AES.decrypt(data.msg, $.SHA1(parameters.room) + parameters.key),
|
// Do not trust incoming data
|
||||||
sanitized = $.escapeHtml(decrypted),
|
try {
|
||||||
nick = !data.nick ? templates.default_nick : $.escapeHtml($.AES.decrypt(data.nick, $.SHA1(parameters.room) + parameters.key));
|
var plain = $.AES.decrypt(data.data, parameters.room + parameters.key),
|
||||||
|
plainObj = JSON.parse(plain),
|
||||||
if (!decrypted) {
|
sanitized = $.escapeHtml(plainObj.msg),
|
||||||
|
nick = !plainObj.nick ? templates.default_nick : plainObj.nick;
|
||||||
|
if (!plain) {
|
||||||
|
mediator.emit('console:error', templates.messages.unable_to_decrypt);
|
||||||
|
} else {
|
||||||
|
mediator.emit('console:message', { message: sanitized, nick: nick, uuid: data.uuid } );
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
mediator.emit('console:error', templates.messages.unable_to_decrypt);
|
mediator.emit('console:error', templates.messages.unable_to_decrypt);
|
||||||
} else {
|
|
||||||
mediator.emit('console:message', { message: sanitized, nick: nick } );
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
11
server.js
11
server.js
|
@ -3,7 +3,8 @@
|
||||||
const
|
const
|
||||||
files = require('node-static'),
|
files = require('node-static'),
|
||||||
port = process.env.PORT || 8080,
|
port = process.env.PORT || 8080,
|
||||||
path = require('path');
|
path = require('path'),
|
||||||
|
uuid = require('uuid');
|
||||||
|
|
||||||
var
|
var
|
||||||
file,
|
file,
|
||||||
|
@ -28,6 +29,8 @@ server.listen(port, function(){
|
||||||
|
|
||||||
io.on('connection', function(socket) {
|
io.on('connection', function(socket) {
|
||||||
|
|
||||||
|
socket.uuid = uuid();
|
||||||
|
|
||||||
socket.on('room:join', function(req) {
|
socket.on('room:join', function(req) {
|
||||||
if( req ) {
|
if( req ) {
|
||||||
socket.emit('room:joined',req);
|
socket.emit('room:joined',req);
|
||||||
|
@ -65,14 +68,14 @@ io.on('connection', function(socket) {
|
||||||
if(req && req.room) {
|
if(req && req.room) {
|
||||||
|
|
||||||
// Check that the message size is within bounds
|
// Check that the message size is within bounds
|
||||||
var total_msg_size = (req.msg) ? req.msg.length : 0 + (req.nick) ? req.nick.length : 0;
|
var total_msg_size = (req.data) ? req.data.length : 0;
|
||||||
if( total_msg_size <= 4096) {
|
if( total_msg_size <= 4096) {
|
||||||
|
|
||||||
// Check that at least 100ms has passed since last message
|
// Check that at least 100ms has passed since last message
|
||||||
if( socket.last_message === undefined || new Date().getTime() - socket.last_message > 100 ) {
|
if( socket.last_message === undefined || new Date().getTime() - socket.last_message > 100 ) {
|
||||||
|
|
||||||
socket.broadcast.to(req.room).emit('message:send', { msg: req.msg, nick: req.nick} );
|
socket.broadcast.to(req.room).emit('message:send', { data: req.data, uuid: socket.uuid } );
|
||||||
socket.emit('message:send', { msg: req.msg, nick: req.nick} );
|
socket.emit('message:send', { data: req.data, uuid: socket.uuid } );
|
||||||
|
|
||||||
socket.last_message = new Date().getTime();
|
socket.last_message = new Date().getTime();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue