UNPKG

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
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;