UNPKG

linagora-rse

Version:
77 lines (61 loc) 1.86 kB
'use strict'; var ursa = require('ursa'); var jwt = require('jsonwebtoken'); var esnConfig = require('../esn-config'); var PRIVATE_KEY = 'privateKey', PUBLIC_KEY = 'publicKey', ALGORITHM = 'algorithm'; function WebTokenConfig(config) { if (!config[PRIVATE_KEY]) { throw new Error(PRIVATE_KEY + ' is missing in the jwt configuration'); } if (!config[PUBLIC_KEY]) { throw new Error(PUBLIC_KEY + ' is missing in the jwt configuration'); } if (!config[ALGORITHM]) { throw new Error(ALGORITHM + ' is missing in the jwt configuration'); } this.privateKey = config[PRIVATE_KEY]; this.publicKey = config[PUBLIC_KEY]; this.algorithm = config[ALGORITHM]; } function getWebTokenConfig(callback) { esnConfig('jwt').get(function(err, config) { if (err) { return callback(err); } if (!config) { return callback(new Error('No "jwt" configuration has been found')); } return callback(null, new WebTokenConfig(config)); }); } function generateWebToken(payload, options, callback) { if (!callback) { callback = options; options = {}; } if (!payload) { return callback(new Error('Payload is required to generated a JWT.')); } getWebTokenConfig((err, config) => { if (err) { return callback(err); } const signOptions = Object.assign({ algorithm: config.algorithm }, options); jwt.sign(payload, config.privateKey, signOptions, callback); }); } function generateKeyPair(callback) { try { var key = ursa.generatePrivateKey(); var privateKey = key.toPrivatePem().toString('ascii'); var publicKey = key.toPublicPem().toString('ascii'); return callback(null, { privateKey, publicKey }); } catch (err) { return callback(err); } } module.exports = { WebTokenConfig, getWebTokenConfig, generateWebToken, generateKeyPair };