deep-package-manager
Version:
DEEP Package Manager
140 lines (109 loc) • 4.99 kB
JavaScript
/**
* Created by mgoria on 7/15/15.
*/
;
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'];