UNPKG

deep-package-manager

Version:
140 lines (109 loc) 4.99 kB
/** * Created by mgoria on 7/15/15. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _joi = require('joi'); var _joi2 = _interopRequireDefault(_joi); var _JoiHelper = require('../Helpers/JoiHelper'); var _SharedAwsConfig = require('../Helpers/SharedAwsConfig'); var _Exec = require('../Helpers/Exec'); var _tmp = require('tmp'); var _tmp2 = _interopRequireDefault(_tmp); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _DeployConfig = require('./DeployConfig'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @returns {Object} */ function guessAwsSdkConfig() { return new _SharedAwsConfig.SharedAwsConfig().choose(); // @todo: replace with guess()? } /** * @param {String} appId * @returns {*} */ function buildAppNameFromId(appId) { return `My Custom Web App ${appId}`; } /** * @returns {*} */ function buildAppId() { let result = new _Exec.Exec(process.platform === 'darwin' ? 'echo `uname -a``ifconfig``date` | md5' : 'echo `uname -a``ifconfig``date` | md5sum | awk "{print $1}"').runSync(); return result.succeed ? result.result.replace(/[^a-z0-9_\.-]+/gi, '') : `unique-app-id-${new Date().getTime()}`; } /** * @param {Object} awsCredentials * @returns {*} */ function guessAwsAccountId(awsCredentials) { let defaultUserId = 123456789012; if (awsCredentials.accessKeyId && awsCredentials.secretAccessKey) { let credentialsFile = _tmp2.default.tmpNameSync(); let credentials = `[profile deep]${_os2.default.EOL}`; credentials += `aws_access_key_id=${awsCredentials.accessKeyId}${_os2.default.EOL}`; credentials += `aws_secret_access_key=${awsCredentials.secretAccessKey}${_os2.default.EOL}`; _fs2.default.writeFileSync(credentialsFile, credentials); let getUserCommand = `export AWS_CONFIG_FILE=${credentialsFile}; `; getUserCommand += 'aws --profile deep iam get-user 2>/dev/null'; let userInfoResult = new _Exec.Exec(getUserCommand).runSync(); if (userInfoResult.failed) { return defaultUserId; } try { let userInfo = JSON.parse(userInfoResult.result); if (userInfo) { return userInfo.User.Arn.replace(/^.*:(\d+):(root|(user\/.*))$/i, '$1') || defaultUserId; } } catch (e) { console.debug('Unable to parse userInfoResult: ', e); } } return defaultUserId; } exports.default = { validation: () => { return _joi2.default.object().keys({ appName: _JoiHelper.JoiHelper.string().regex(/^[a-z\s0-9+\-=\._:\/]{1,256}$/i).optional().default('').empty(''), appIdentifier: _JoiHelper.JoiHelper.string().regex(/^[a-zA-Z0-9_\.-]+$/).required(), env: _JoiHelper.JoiHelper.stringEnum(_DeployConfig.DeployConfig.AVAILABLE_ENV).optional().lowercase().default(_DeployConfig.DeployConfig.AVAILABLE_ENV[0]), awsAccountId: _joi2.default.number().required(), domain: _joi2.default.string().optional().lowercase().regex(/^([a-zA-Z0-9-_]+\.)+[a-zA-Z]+?$/i), domainAliases: _JoiHelper.JoiHelper.stringArray(true).optional(), apiAlias: _JoiHelper.JoiHelper.string().optional().lowercase(), apiVersion: _JoiHelper.JoiHelper.string().regex(/^[a-zA-Z0-9_]+$/i).optional().default(_DeployConfig.DeployConfig.DEFAULT_API_VERSION), aws: _joi2.default.object().keys({ accessKeyId: _JoiHelper.JoiHelper.string().required().empty(''), secretAccessKey: _JoiHelper.JoiHelper.string().optional().empty(''), sessionToken: _JoiHelper.JoiHelper.string().optional().empty(''), region: _JoiHelper.JoiHelper.string().required(), httpOptions: _joi2.default.object().optional() }).required() }); }, generation: () => { let guessedAwsCredentials = guessAwsSdkConfig(); let appId = buildAppId(); return _joi2.default.object().keys({ appName: _JoiHelper.JoiHelper.string().optional().default(buildAppNameFromId(appId)), appIdentifier: _JoiHelper.JoiHelper.string().regex(/^[a-zA-Z0-9_\.-]+$/).optional().default(appId), env: _JoiHelper.JoiHelper.stringEnum(_DeployConfig.DeployConfig.AVAILABLE_ENV).optional().default(_DeployConfig.DeployConfig.AVAILABLE_ENV[0]), awsAccountId: _joi2.default.number().optional().default(guessAwsAccountId(guessedAwsCredentials)), apiVersion: _JoiHelper.JoiHelper.string().regex(/^[a-zA-Z0-9_]+$/i).optional().default(_DeployConfig.DeployConfig.DEFAULT_API_VERSION), aws: _joi2.default.object().keys({ accessKeyId: _JoiHelper.JoiHelper.string().required(), secretAccessKey: _JoiHelper.JoiHelper.string().required(), sessionToken: _JoiHelper.JoiHelper.string().optional(), region: _JoiHelper.JoiHelper.string().required(), httpOptions: _joi2.default.object().optional() }).optional().default(guessedAwsCredentials) }); } }; module.exports = exports['default'];