UNPKG

linagora-rse

Version:
67 lines (56 loc) 1.7 kB
'use strict'; const path = require('path'); const ursa = require('ursa'); const Q = require('q'); const { promisify } = require('util'); const fsCreateFileFromString = promisify(require('fs-extra').outputFile); const fsChmod = promisify(require('fs').chmod); const CONSTANTS = require('../constants').params; const commons = require('../commons'); const db = require('../../fixtures/db'); const { 'esn-config': esnConfig } = require('../../backend/core/'); const JWT_PUBLIC_KEY_FILE_NAME = 'jwt_publickey'; const JWT_ALGORITHM = 'RS256'; const exec = keyPath => { return _generateJWT() .then(_storeJwtKeys) .then(keys => _saveFile(keys, keyPath)); }; const command = { command: 'generateJWT', desc: 'Generate a keys pairs for JWT', builder: { path: CONSTANTS.jwt.path }, handler: argv => { const { path } = argv; db.connect(commons.getDBOptions()) .then(() => exec(path)) .then(() => commons.logInfo('Generated')) .catch(commons.logError) .finally(db.disconnect) .finally(commons.exit); } }; function _generateJWT() { const key = ursa.generatePrivateKey(); const privateKey = key.toPrivatePem().toString('ascii'); const publicKey = key.toPublicPem().toString('ascii'); return Q.when({ algorithm: JWT_ALGORITHM, publicKey: publicKey, privateKey: privateKey }); } function _storeJwtKeys(config) { return esnConfig('jwt').set(config) .then(() => config.publicKey); } function _saveFile(publicJwtKey, keyPath) { const file = path.resolve(keyPath, JWT_PUBLIC_KEY_FILE_NAME); return fsCreateFileFromString(file, publicJwtKey).then(() => fsChmod(file, 600)); } module.exports = { exec, command };