UNPKG

feathers-authentication

Version:
104 lines (73 loc) 3.09 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.createJWT = createJWT; exports.verifyJWT = verifyJWT; var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug); var _v = require('uuid/v4'); var _v2 = _interopRequireDefault(_v); var _lodash = require('lodash.merge'); var _lodash2 = _interopRequireDefault(_lodash); var _lodash3 = require('lodash.pick'); var _lodash4 = _interopRequireDefault(_lodash3); var _lodash5 = require('lodash.omit'); var _lodash6 = _interopRequireDefault(_lodash5); var _jsonwebtoken = require('jsonwebtoken'); var _jsonwebtoken2 = _interopRequireDefault(_jsonwebtoken); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var debug = (0, _debug2.default)('feathers-authentication:authentication:utils'); function createJWT() { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var VALID_KEYS = ['algorithm', 'expiresIn', 'notBefore', 'audience', 'issuer', 'jwtid', 'subject', 'noTimestamp', 'header', 'exp', 'nbf', 'aud', 'sub', 'iss']; var settings = (0, _lodash2.default)({}, options.jwt); var secret = options.secret; if (!(payload.jti || settings.jwtid)) { settings.jwtid = (0, _v2.default)(); } return new Promise(function (resolve, reject) { debug('Creating JWT using options', settings); if (!secret) { return reject(new Error('secret must provided')); } // TODO (EK): Support jwtids. Maybe auto-generate a uuid _jsonwebtoken2.default.sign((0, _lodash6.default)(payload, VALID_KEYS), secret, (0, _lodash4.default)(settings, VALID_KEYS), function (error, token) { if (error) { debug('Error signing JWT', error); return reject(error); } debug('New JWT issued with payload', payload); return resolve(token); }); }); } function verifyJWT(token) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var VALID_KEYS = ['algorithms', 'audience', 'issuer', 'ignoreExpiration', 'ignoreNotBefore', 'subject', 'clockTolerance']; var settings = (0, _lodash2.default)({}, options.jwt); var secret = options.secret; // normalize algorithm to array if (settings.algorithm) { settings.algorithms = Array.isArray(settings.algorithm) ? settings.algorithm : [settings.algorithm]; delete settings.algorithm; } return new Promise(function (resolve, reject) { if (!token) { return reject(new Error('token must provided')); } if (!secret) { return reject(new Error('secret must provided')); } debug('Verifying token', token); _jsonwebtoken2.default.verify(token, secret, (0, _lodash4.default)(settings, VALID_KEYS), function (error, payload) { if (error) { debug('Error verifying token', error); return reject(error); } debug('Verified token with payload', payload); resolve(payload); }); }); }