|
@@ -16,7 +16,8 @@ function PeerServer(options) {
|
|
key: 'peerjs',
|
|
key: 'peerjs',
|
|
ip_limit: 5000,
|
|
ip_limit: 5000,
|
|
concurrent_limit: 5000,
|
|
concurrent_limit: 5000,
|
|
- ssl: {}
|
|
|
|
|
|
+ ssl: {},
|
|
|
|
+ auth: function(id, context){ return true; }
|
|
}, options);
|
|
}, options);
|
|
|
|
|
|
util.debug = this._options.debug;
|
|
util.debug = this._options.debug;
|
|
@@ -66,6 +67,7 @@ PeerServer.prototype._initializeWSS = function() {
|
|
var id = query.id;
|
|
var id = query.id;
|
|
var token = query.token;
|
|
var token = query.token;
|
|
var key = query.key;
|
|
var key = query.key;
|
|
|
|
+ var cxt = query.cxt;
|
|
var ip = socket.upgradeReq.socket.remoteAddress;
|
|
var ip = socket.upgradeReq.socket.remoteAddress;
|
|
|
|
|
|
if (!id || !token || !key) {
|
|
if (!id || !token || !key) {
|
|
@@ -73,9 +75,9 @@ PeerServer.prototype._initializeWSS = function() {
|
|
socket.close();
|
|
socket.close();
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if (!self._clients[key] || !self._clients[key][id]) {
|
|
if (!self._clients[key] || !self._clients[key][id]) {
|
|
- self._checkKey(key, ip, function(err) {
|
|
|
|
|
|
+ self._checkKey(id, key, ip, function(err) {
|
|
if (!err) {
|
|
if (!err) {
|
|
if (!self._clients[key][id]) {
|
|
if (!self._clients[key][id]) {
|
|
self._clients[key][id] = { token: token, ip: ip };
|
|
self._clients[key][id] = { token: token, ip: ip };
|
|
@@ -157,7 +159,7 @@ PeerServer.prototype._configureWS = function(socket, key, id, token) {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-PeerServer.prototype._checkKey = function(key, ip, cb) {
|
|
|
|
|
|
+PeerServer.prototype._checkKey = function(id, key, ip, cb) {
|
|
if (key == this._options.key) {
|
|
if (key == this._options.key) {
|
|
if (!this._clients[key]) {
|
|
if (!this._clients[key]) {
|
|
this._clients[key] = {};
|
|
this._clients[key] = {};
|
|
@@ -177,6 +179,11 @@ PeerServer.prototype._checkKey = function(key, ip, cb) {
|
|
cb(ip + ' has reached its concurrent user limit');
|
|
cb(ip + ' has reached its concurrent user limit');
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ if(!this._options.auth(id, util.extend({ token: token, ip: ip }, cxt)))
|
|
|
|
+ {
|
|
|
|
+ cb('Authentication Error');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
cb(null);
|
|
cb(null);
|
|
} else {
|
|
} else {
|
|
cb('Invalid key provided');
|
|
cb('Invalid key provided');
|
|
@@ -203,10 +210,11 @@ PeerServer.prototype._initializeHTTP = function() {
|
|
var id = req.params.id;
|
|
var id = req.params.id;
|
|
var token = req.params.token;
|
|
var token = req.params.token;
|
|
var key = req.params.key;
|
|
var key = req.params.key;
|
|
|
|
+ var cxt = req.params.cxt;
|
|
var ip = req.ip;
|
|
var ip = req.ip;
|
|
|
|
|
|
if (!self._clients[key] || !self._clients[key][id]) {
|
|
if (!self._clients[key] || !self._clients[key][id]) {
|
|
- self._checkKey(key, ip, function(err) {
|
|
|
|
|
|
+ self._checkKey(id, key, ip, function(err) {
|
|
if (!err && !self._clients[key][id]) {
|
|
if (!err && !self._clients[key][id]) {
|
|
self._clients[key][id] = { token: token, ip: ip };
|
|
self._clients[key][id] = { token: token, ip: ip };
|
|
self._ips[ip]++;
|
|
self._ips[ip]++;
|
|
@@ -307,7 +315,7 @@ PeerServer.prototype._pruneOutstanding = function() {
|
|
var keys = Object.keys(this._outstanding);
|
|
var keys = Object.keys(this._outstanding);
|
|
for (var k = 0, kk = keys.length; k < kk; k += 1) {
|
|
for (var k = 0, kk = keys.length; k < kk; k += 1) {
|
|
var key = keys[k];
|
|
var key = keys[k];
|
|
- var dsts = Object.keys(this._outstanding[key]);
|
|
|
|
|
|
+ var dsts = Object.keys(this._outstanding[key]);
|
|
for (var i = 0, ii = dsts.length; i < ii; i += 1) {
|
|
for (var i = 0, ii = dsts.length; i < ii; i += 1) {
|
|
var offers = this._outstanding[key][dsts[i]];
|
|
var offers = this._outstanding[key][dsts[i]];
|
|
var seen = {};
|
|
var seen = {};
|
|
@@ -426,4 +434,4 @@ PeerServer.prototype._generateClientId = function(key) {
|
|
return clientId;
|
|
return clientId;
|
|
};
|
|
};
|
|
|
|
|
|
-exports.PeerServer = PeerServer;
|
|
|
|
|
|
+exports.PeerServer = PeerServer;
|