stsbroker
Version:
CLI to configure and interact with your own AWS STS Broker.
50 lines (49 loc) • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const command_1 = require("@oclif/command");
const inquirer = require('inquirer');
const axios_1 = require("axios");
const cli_ux_1 = require("cli-ux");
const storage = require("node-persist");
var tmp = require('tmp');
const fs = require("fs");
const cognito_1 = require("../cognito");
const chalk = require('chalk');
const exec = require('await-exec');
class Access extends command_1.Command {
async run() {
const { args, flags } = this.parse(Access);
await storage.init({ dir: this.config.configDir });
const config = await storage.getItem('config');
var tmpobj = tmp.fileSync();
fs.writeFileSync(tmpobj.name, JSON.stringify(config));
try {
const cognitoToken = await cognito_1.getToken({
hostedUI: tmpobj.name
});
cli_ux_1.default.action.start(chalk.blue("Retrieving your AWS temporary credentials"));
axios_1.default.defaults.headers.common['Authorization'] = cognitoToken;
axios_1.default.defaults.headers.post['Content-Type'] = 'application/json';
const response = await axios_1.default.get(config.endpoint + '/credentials');
await exec(`aws configure set aws_access_key_id ${response.data.credentials.AccessKeyId} --profile ${flags.profile}`);
await exec(`aws configure set aws_secret_access_key ${response.data.credentials.SecretAccessKey} --profile ${flags.profile}`);
await exec(`aws configure set aws_session_token ${response.data.credentials.SessionToken} --profile ${flags.profile}`);
cli_ux_1.default.action.stop(chalk.blue(`Temporary credentials have been set. Use \'--profile ${flags.profile}\' to use your temporary credentials.`));
if (flags.console) {
await cli_ux_1.default.open(response.data.signin_url);
}
process.exit();
}
catch (error) {
this.error(chalk.red("Sorry, it seems something went wrong while contacting your STS Broker"));
process.exit();
}
}
}
exports.default = Access;
Access.description = 'Assume the temporary session';
Access.flags = {
help: command_1.flags.help({ char: 'h' }),
profile: command_1.flags.string({ description: 'AWS Profile', required: true }),
console: command_1.flags.boolean({ char: 'c', description: 'Open AWS Console' })
};