UNPKG

@omneedia/socketcluster

Version:

SocketCluster - A Highly parallelized WebSocket server cluster to make the most of multi-core machines/instances.

63 lines (56 loc) 1.57 kB
var jwt = require('jsonwebtoken'); var scErrors = require('sc-errors'); var InvalidArgumentsError = scErrors.InvalidArgumentsError; var AuthEngine = function () {}; AuthEngine.prototype.verifyToken = function (signedToken, key, options, callback) { options = options || {}; var jwtOptions = cloneObject(options); delete jwtOptions.async; delete jwtOptions.socket; if (typeof signedToken === 'string' || signedToken == null) { if (options.async) { jwt.verify(signedToken || '', key, jwtOptions, callback); } else { var err = null; var token; try { token = jwt.verify(signedToken || '', key, jwtOptions); } catch (error) { err = error; } if (err) { callback(err); } else { callback(null, token); } } } else { var err = new InvalidArgumentsError('Invalid token format - Token must be a string'); callback(err); } }; AuthEngine.prototype.signToken = function (token, key, options, callback) { options = options || {}; var jwtOptions = cloneObject(options); delete jwtOptions.async; if (options.async) { jwt.sign(token, key, jwtOptions, callback); } else { var signedToken; try { signedToken = jwt.sign(token, key, jwtOptions); } catch (err) { callback(err); return; } callback(null, signedToken); } }; function cloneObject(object) { var clone = {}; Object.keys(object || {}).forEach(function (key) { clone[key] = object[key]; }); return clone; } module.exports.AuthEngine = AuthEngine;