alks
Version:
CLI for working with ALKS
94 lines (86 loc) • 4.08 kB
text/typescript
import { red } from 'cli-color';
import moment from 'moment';
import { Key } from '../model/keys';
import { isWindows } from './isWindows';
import { updateCreds } from './updateCreds';
import { log } from './log';
// if adding new output types be sure to update getOutputValues.ts
export function getKeyOutput(
format: string,
key: Key,
profile: string | undefined,
force: boolean | undefined
) {
const keyExpires = moment(key.expires).format();
log(`using output format: ${format}`);
switch (format) {
case 'docker': {
return `-e AWS_ACCESS_KEY_ID=${key.accessKey} -e AWS_SECRET_ACCESS_KEY=${key.secretKey} -e AWS_SESSION_TOKEN=${key.sessionToken} -e AWS_SESSION_EXPIRES=${keyExpires}`;
}
case 'terraformarg': {
return `-e ALKS_ACCESS_KEY_ID=${key.accessKey} -e ALKS_SECRET_ACCESS_KEY=${key.secretKey} -e ALKS_SESSION_TOKEN=${key.sessionToken} -e ALKS_SESSION_EXPIRES=${keyExpires}`;
}
case 'tarraformenv': {
const cmd = isWindows() ? 'SET' : 'export';
return `${cmd} ALKS_ACCESS_KEY_ID=${key.accessKey} && ${cmd} ALKS_SECRET_ACCESS_KEY=${key.secretKey} && ${cmd} ALKS_SESSION_TOKEN=${key.sessionToken} && ${cmd} ALKS_SESSION_EXPIRES=${keyExpires}`;
}
case 'json': {
const keyData = {
accessKey: key.accessKey,
secretKey: key.secretKey,
sessionToken: key.sessionToken,
expires: key.expires,
changeNumber: key.changeNumber, // This is the only format using the unformatted "key.expires". This may be a bug but I'm leaving it for the moment for backwards compatibility
};
return JSON.stringify(keyData, null, 4);
}
case 'creds': {
if (updateCreds(key, profile, force)) {
let msg = 'Your AWS credentials file has been updated';
if (profile) {
msg += ` with the named profile: ${profile}`;
}
return msg;
} else {
return red(
`The ${profile} profile already exists in AWS credentials. Please pass -f to force overwrite.`
);
}
}
case 'idea': {
return `AWS_ACCESS_KEY_ID=${key.accessKey}\nAWS_SECRET_ACCESS_KEY=${key.secretKey}\nAWS_SESSION_TOKEN=${key.sessionToken}\nAWS_SESSION_EXPIRES=${keyExpires}`;
}
case 'powershell': {
return `$env:AWS_ACCESS_KEY_ID, $env:AWS_SECRET_ACCESS_KEY, $env:AWS_SESSION_TOKEN, $env:AWS_SESSION_EXPIRES, $env:CHANGE_NUMBER = "${
key.accessKey
}","${key.secretKey}","${key.sessionToken}","${keyExpires}", "${
key.changeNumber ?? ''
}"`;
}
case 'fishshell': {
return `set -xg AWS_ACCESS_KEY_ID '${key.accessKey}'; and set -xg AWS_SECRET_ACCESS_KEY '${key.secretKey}'; and set -xg AWS_SESSION_TOKEN '${key.sessionToken}'; and set -xg AWS_SESSION_EXPIRES '${keyExpires}'; and set -xg CHANGE_NUMBER '${key.changeNumber}'`;
}
case 'aws': {
return JSON.stringify({
Version: 1,
AccessKeyId: key.accessKey,
SecretAccessKey: key.secretKey,
SessionToken: key.sessionToken,
Expiration: moment(key.expires).toISOString(),
});
}
case 'linux': {
// forces export format
return `export AWS_ACCESS_KEY_ID=${key.accessKey} && export AWS_SECRET_ACCESS_KEY=${key.secretKey} && export AWS_SESSION_TOKEN=${key.sessionToken} && export AWS_SESSION_EXPIRES=${keyExpires} && export CHANGE_NUMBER='${key.changeNumber}'`;
}
case 'export': // fall through to default case
case 'set':
default: {
console.error(
'WARNING: Because this tool runs in a subshell, it cannot set environment variables in the parent shell. To use these keys, copy the commands printed below and run them in your current shell to have these environment variables set'
);
const cmd = isWindows() || format === 'set' ? 'SET' : 'export';
return `${cmd} AWS_ACCESS_KEY_ID=${key.accessKey} && ${cmd} AWS_SECRET_ACCESS_KEY=${key.secretKey} && ${cmd} AWS_SESSION_TOKEN=${key.sessionToken} && ${cmd} AWS_SESSION_EXPIRES=${keyExpires} && ${cmd} CHANGE_NUMBER='${key.changeNumber}'`;
}
}
}