UNPKG

r8s-cli

Version:

A command line tool for Reaction Commerce to be used with kubernetes

176 lines (127 loc) 5.75 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.ensureSSHKeysExist = undefined; var _filter2 = require('lodash/filter'); var _filter3 = _interopRequireDefault(_filter2); /** * Check if the user has a registered SSH key in ~/.reaction/keys/ * @return {undefined} returns nothing */ var ensureSSHKeysExist = exports.ensureSSHKeysExist = function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var keys, homeDir, hasKey, email, keyPair; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _list2.default)(); case 2: keys = _context.sent; homeDir = _os2.default.homedir(); hasKey = false; keys.forEach(function (k) { if ((0, _fs.exists)(homeDir + '/.reaction/keys/' + k.title)) { hasKey = true; } }); if (!(keys.length === 0 || !hasKey)) { _context.next = 11; break; } email = Config.get('global', 'launchdock.email'); keyPair = generateKeyPair({ email: email }); _context.next = 11; return (0, _add2.default)({ publicKey: keyPair.publicKey, title: keyPair.title }); case 11: case 'end': return _context.stop(); } } }, _callee, this); })); return function ensureSSHKeysExist() { return _ref2.apply(this, arguments); }; }(); exports.generateKeyPair = generateKeyPair; exports.setGitSSHKeyEnv = setGitSSHKeyEnv; var _fsExtra = require('fs-extra'); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _keypair = require('keypair'); var _keypair2 = _interopRequireDefault(_keypair); var _nodeForge = require('node-forge'); var _uuid = require('uuid'); var _uuid2 = _interopRequireDefault(_uuid); var _config = require('./config'); var Config = _interopRequireWildcard(_config); var _fs = require('./fs'); var _logger = require('./logger'); var _logger2 = _interopRequireDefault(_logger); var _list = require('../commands/keys/list'); var _list2 = _interopRequireDefault(_list); var _add = require('../commands/keys/add'); var _add2 = _interopRequireDefault(_add); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } /** * Generate an SSH key pair and save them at ~/.reaction/keys/ * @param {String} email The email found in the public key * @return {Object} returns a results object: { publicKey: String, privateKey: String, title: String } */ function generateKeyPair(_ref) { var email = _ref.email; if (!email) { _logger2.default.error('An email is required to generate a keypair'); process.exit(1); } var pair = (0, _keypair2.default)(); var pub = _nodeForge.pki.publicKeyFromPem(pair.public); var priv = _nodeForge.pki.privateKeyFromPem(pair.private); var publicKey = _nodeForge.ssh.publicKeyToOpenSSH(pub, email); var privateKey = _nodeForge.ssh.privateKeyToOpenSSH(priv); var userHome = _os2.default.homedir(); var title = _uuid2.default.v1(); var publicKeyFile = _path2.default.resolve(userHome + '/.reaction/keys/' + title + '.pub'); var privateKeyFile = _path2.default.resolve(userHome + '/.reaction/keys/' + title); _fsExtra2.default.ensureFileSync(publicKeyFile); _fsExtra2.default.ensureFileSync(privateKeyFile); _fsExtra2.default.writeFileSync(publicKeyFile, publicKey); _fsExtra2.default.writeFileSync(privateKeyFile, privateKey); _fsExtra2.default.chmodSync(publicKeyFile, '400'); _fsExtra2.default.chmodSync(privateKeyFile, '400'); _logger2.default.debug('Generated new SSH key pair: ' + title); return { publicKey: publicKey, privateKey: privateKey, title: title }; } /** * Check if the user has a registered SSH key in ~/.reaction/keys/ * If so, set the GIT_SSH_COMMAND environment variable to use the private key's identity * https://superuser.com/a/912281 * @return {String|null} returns the path to the chosen private key or null if none found */ function setGitSSHKeyEnv() { var homeDir = _os2.default.homedir(); var keys = Config.get('global', 'launchdock.keys', []); var key = (0, _filter3.default)(keys, function (k) { return (0, _fs.exists)(_path2.default.resolve(homeDir + '/.reaction/keys/' + k.title)); })[0]; if (!!key) { var keyPath = _path2.default.resolve(homeDir + '/.reaction/keys/' + key.title); process.env.GIT_SSH_COMMAND = 'ssh -i ' + keyPath; _logger2.default.debug('Setting SSH key identity to: ' + keyPath); _logger2.default.debug('export GIT_SSH_COMMAND=' + process.env.GIT_SSH_COMMAND); return keyPath; } return null; }