mysql-live
Version:
Brings the server.publish and client.subscribe for live updates on mysql database. The only one Live Collections.
110 lines (109 loc) • 4.71 kB
JavaScript
var node_mysql_wrapper_1 = require("node-mysql-wrapper");
var CryptoJS = require("crypto-js");
var _ = require("lodash");
var SocketPassport = (function () {
function SocketPassport(handler) {
this.handler = handler;
this.passportsDictionary = {};
this.allowedByDefault = true;
}
SocketPassport.prototype.parseCookies = function (cookie) {
return cookie.split(';').reduce(function (prev, curr) {
var m = / *([^=]+)=(.*)/.exec(curr);
var key = m[1];
var value = decodeURIComponent(m[2]);
prev[key] = value;
return prev;
}, {});
};
SocketPassport.prototype.stringifyCookies = function (cookies) {
var list = [];
for (var key in cookies) {
list.push(key + '=' + encodeURIComponent(cookies[key]));
}
return list.join('; ');
};
SocketPassport.prototype.getIPV4 = function (socketId) {
var socket = this.handler.getSocket(socketId);
return socket.client.request.headers['x-forwarded-for'] || socket.client.conn.remoteAddress || socket.conn.remoteAddress || socket.request.connection.remoteAddress;
};
SocketPassport.prototype.getSessionId = function (socket) {
var request = socket.request;
var sessionId = request.headers.cookie.substr(request.headers.cookie.indexOf('io=') + 3);
if (sessionId !== undefined && sessionId.indexOf(';') !== undefined) {
sessionId = sessionId.substr(0, sessionId.indexOf(";"));
}
return sessionId;
};
SocketPassport.prototype.encrypt = function (socket, passportObj) {
return CryptoJS.AES.encrypt(JSON.stringify(passportObj), this.getSessionId(socket));
};
SocketPassport.prototype.decrypt = function (socket, ciphertext) {
var bytes = CryptoJS.AES.decrypt(ciphertext.toString(), this.getSessionId(socket));
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
return decryptedData;
};
SocketPassport.prototype.addPassport = function (socket, encryptedPassportObj) {
var decrypted = this.decrypt(socket, encryptedPassportObj);
this.passportsDictionary[socket.id] = decrypted;
};
SocketPassport.prototype.addDecryptedPassport = function (socket, passportObj) {
this.passportsDictionary[socket.id] = passportObj;
};
SocketPassport.prototype.getPassport = function (socket) {
var socketId;
if (!_.isString(socket)) {
if (socket["nsp"] !== undefined) {
socketId = this.handler.getSocket(socket).id;
}
else if (socket["headers"] !== undefined) {
var _id = socket["headers"].cookie.substr(socket["headers"].cookie.indexOf('io=') + 3);
if (_id.indexOf(';') !== undefined) {
_id = _id.substr(0, _id.indexOf(";"));
}
socketId = _id;
}
}
if (this.passportsDictionary[socketId] === undefined) {
return undefined;
}
return this.passportsDictionary[socketId];
};
SocketPassport.prototype.getSocketByPassport = function (passport) {
var _this = this;
node_mysql_wrapper_1.Helper.forEachKey(this.passportsDictionary, function (socketId) {
node_mysql_wrapper_1.Helper.forEachKey(passport, function (key) {
if (_this.passportsDictionary[socketId][key] === passport[key]) {
return _this.handler.getSocket(socketId);
}
});
});
return undefined;
};
SocketPassport.prototype.insecure = function (allowByDefault) {
this.allowedByDefault = allowByDefault;
};
SocketPassport.prototype.hasRights = function (collection, methodName, socket, arg) {
var _hasRights = this.allowedByDefault;
if (collection.options[methodName] !== undefined) {
if (_.isString(socket)) {
socket = this.handler.getSocket(socket);
}
if (arg) {
_hasRights = collection.options[methodName].call(collection, socket, arg);
}
else {
_hasRights = collection.options[methodName].call(collection, socket);
}
if (_hasRights === undefined)
_hasRights = this.allowedByDefault;
if (collection.disallowOptions.indexOf(methodName) !== -1) {
_hasRights = !_hasRights;
}
}
return _hasRights;
};
return SocketPassport;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SocketPassport;