Remove SignalMaster as it's not used anymore

master
Daniel Berteaud 10 years ago
parent 8cd064b3e4
commit ff48f7ec30
  1. 6
      lib/Vroom/Constants.pm
  2. 1
      signalmaster/.jshintignore
  3. 25
      signalmaster/.jshintrc
  4. 20
      signalmaster/LICENSE
  5. 1
      signalmaster/Procfile
  6. 12
      signalmaster/README.md
  7. 21
      signalmaster/dev_config.json.sample
  8. 17
      signalmaster/package.json
  9. 205
      signalmaster/server.js

@ -35,18 +35,12 @@ use constant COMPONENTS => {
"sprintf.js" => { "sprintf.js" => {
url => 'http://hexmen.com/blog/2007/03/printf-sprintf/' url => 'http://hexmen.com/blog/2007/03/printf-sprintf/'
}, },
"node.js" => {
url => 'http://nodejs.org/'
},
"Bootstrap" => { "Bootstrap" => {
url => 'http://getbootstrap.com/' url => 'http://getbootstrap.com/'
}, },
"MariaDB" => { "MariaDB" => {
url => 'https://mariadb.org/' url => 'https://mariadb.org/'
}, },
"SignalMaster" => {
url => 'https://github.com/andyet/signalmaster/'
},
"rfc5766-turn-server" => { "rfc5766-turn-server" => {
url => 'https://code.google.com/p/rfc5766-turn-server/' url => 'https://code.google.com/p/rfc5766-turn-server/'
}, },

@ -1,25 +0,0 @@
{
"asi": false,
"expr": true,
"loopfunc": true,
"curly": false,
"evil": true,
"white": true,
"undef": true,
"browser": true,
"predef": [
"app",
"$",
"FormBot",
"socket",
"confirm",
"alert",
"require",
"__dirname",
"process",
"exports",
"console",
"Buffer",
"module"
]
}

@ -1,20 +0,0 @@
Written by Henrik Joreteg.
Copyright © 2013 by &yet, LLC.
Released under the terms of the MIT License:
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

@ -1 +0,0 @@
web: node server.js

@ -1,12 +0,0 @@
# signalmaster
A simple signaling server for clients to connect and do signaling for WebRTC.
Specifically created as a default connection point for [SimpleWebRTC.js](https://github.com/HenrikJoreteg/SimpleWebRTC)
It also supports vending STUN/TURN servers with the shared secret mechanism as described in [this draft](http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00).
Read more:
- [Introducing SimpleWebRTC and conversat.io](http://blog.andyet.com/2013/feb/22/introducing-simplewebrtcjs-and-conversatio/)
- [SimpleWebRTC.com](http://simplewebrtc.com)
- [talky.io](https://talky.io)

@ -1,21 +0,0 @@
{
"isDev": false,
"logLevel": 3,
"server": {
"port": 8888
},
/*"stunservers" : [
{"url": "stun:stun.l.google.com:19302"}
],
"turnservers" : [
{ "url": "turn:your.turn.server.here",
"secret": "turnserversharedsecret"
"expiry": 86400 }
]*/
"mysql": {
"server": "localhost",
"database": "vroom",
"user": "vroom",
"password": "vroom"
}
}

@ -1,17 +0,0 @@
{
"name": "signal-master",
"description": "Simple signaling server for SimpleWebRTC",
"version": "0.1.0",
"dependencies": {
"getconfig": "0.3.0",
"node-uuid": "1.2.0",
"socket.io": "0.9.16",
"mysql": "",
"cookie": ""
},
"main": "server.js",
"repository": {
"type": "git",
"url": "git@github.com:andyet/signal-master.git"
}
}

@ -1,205 +0,0 @@
/*global console*/
var config = require('getconfig'),
uuid = require('node-uuid'),
mysql = require('mysql'),
cookie_reader = require('cookie'),
crypto = require('crypto'),
port = parseInt(process.env.PORT || config.server.port, 10),
io = require('socket.io').listen(port);
var sql = mysql.createConnection({
host : config.mysql.server,
database : config.mysql.database,
user : config.mysql.user,
password : config.mysql.password});
if (config.logLevel) {
// https://github.com/Automattic/socket.io/wiki/Configuring-Socket.IO
io.set('log level', config.logLevel);
}
function describeRoom(name) {
var clients = io.sockets.clients(name);
var result = {
clients: {}
};
clients.forEach(function (client) {
result.clients[client.id] = client.resources;
});
return result;
}
function safeCb(cb) {
if (typeof cb === 'function') {
return cb;
} else {
return function () {};
}
}
function checkRoom(room,token,user,cb) {
var q = 'SELECT `p`.`participant` FROM ' +
'`room_participants` `p`, `rooms` `r` ' +
'WHERE `p`.`participant`=' + sql.escape(user) +
' AND `p`.`room_id`=`r`.`id` ' +
' AND `r`.`name`=' + sql.escape(room) +
' AND `r`.`token`=' + sql.escape(token);
console.log('Checking if ' + user + ' is allowed to join room ' + room + ' using token ' + token);
sql.query(q, function(err, rows, fields) {
if (err){
throw err;
}
// No result ? This user hasn't joined this room through our frontend
if (rows.length > 0){
cb(true);
}
else{
cb(false);
}
});
}
io.configure(function(){
io.set('close timeout', 40);
io.set('heartbeat timeout', 20);
io.set('heartbeat interval', 5);
io.set('authorization', function(data, accept){
if(data.headers.cookie){
data.cookie = cookie_reader.parse(data.headers.cookie);
var session = data.cookie['vroomsession'];
if (typeof session != 'string'){
console.log('Cookie vroomsession not found, access unauthorized');
accept('vroomsession cookie not found', false);
}
else{
// vroomsession is base64(user:room:token) so let's decode this !
session = new Buffer(session, encoding='base64');
var tab = session.toString().split(':');
var user = tab[0],
room = tab[1],
token = tab[2];
// sanitize user input, we don't want to pass random junk to MySQL do we ?
if (!user.match(/^[\w\@\.\-]{1,60}$/i) || !room.match(/^[\w\-]{1,50}$/) || !token.match(/^[a-zA-Z0-9]{30,60}$/)){
console.log('Forbidden chars found in either participant session, room name or token, sorry, cannot allow this');
accept('Forbidden characters found', false);
}
else{
// Ok, now check if this user has joined the room (with the correct token) through vroom frontend
checkRoom(room,token,user, function(res){
if (res){
accept(null, true);
}
else{
console.log('User' + user + ' is not allowed to join room ' + room + ' with token ' + token);
accept('not allowed', false);
}
});
}
}
}
else{
accept('No cookie found', false);
}
});
});
io.sockets.on('connection', function (client) {
client.resources = {
screen: false,
video: true,
audio: false
};
// pass a message to another id
client.on('message', function (details) {
var otherClient = io.sockets.sockets[details.to];
if (!otherClient) return;
details.from = client.id;
otherClient.emit('message', details);
});
client.on('shareScreen', function () {
client.resources.screen = true;
});
client.on('unshareScreen', function (type) {
client.resources.screen = false;
removeFeed('screen');
});
client.on('join', join);
function removeFeed(type) {
if (client.room) {
io.sockets.in(client.room).emit('remove', {
id: client.id,
type: type
});
if (!type) {
client.leave(client.room);
client.room = undefined;
}
}
}
function join(name, cb) {
// sanity check
if (typeof name !== 'string') return;
// leave any existing rooms
removeFeed();
safeCb(cb)(null, describeRoom(name));
client.join(name);
client.room = name;
}
// we don't want to pass "leave" directly because the
// event type string of "socket end" gets passed too.
client.on('disconnect', function () {
removeFeed();
});
client.on('leave', function () {
removeFeed();
});
client.on('create', function (name, cb) {
if (arguments.length == 2) {
cb = (typeof cb == 'function') ? cb : function () {};
name = name || uuid();
} else {
cb = name;
name = uuid();
}
// check if exists
if (io.sockets.clients(name).length) {
safeCb(cb)('taken');
} else {
join(name);
safeCb(cb)(null, name);
}
});
// tell client about stun and turn servers and generate nonces
if (config.stunservers) {
client.emit('stunservers', config.stunservers);
}
if (config.turnservers) {
// create shared secret nonces for TURN authentication
// the process is described in draft-uberti-behave-turn-rest
var credentials = [];
config.turnservers.forEach(function (server) {
var hmac = crypto.createHmac('sha1', server.secret);
// default to 86400 seconds timeout unless specified
var username = Math.floor(new Date().getTime() / 1000) + (server.expiry || 86400) + "";
hmac.update(username);
credentials.push({
username: username,
credential: hmac.digest('base64'),
url: server.url
});
});
client.emit('turnservers', credentials);
}
});
if (config.uid) process.setuid(config.uid);
console.log('signal master is running at: http://localhost:' + port);
Loading…
Cancel
Save