UNPKG

stsbroker

Version:

CLI to configure and interact with your own AWS STS Broker.

50 lines (49 loc) 2.47 kB
"use strict"; 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' }) };