@contentstack/cli-auth
Version:
Contentstack CLI plugin for authentication activities
187 lines (186 loc) • 11.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cli_utilities_1 = require("@contentstack/cli-utilities");
const base_command_1 = require("../../../base-command");
const interactive_1 = require("../../../utils/interactive");
class TokensAddCommand extends base_command_1.BaseCommand {
async run() {
cli_utilities_1.log.debug('TokensAddCommand run method started', this.contextDetails);
this.contextDetails.module = 'tokens-add';
const { flags: addTokenFlags } = await this.parse(TokensAddCommand);
cli_utilities_1.log.debug('Token add flags parsed', Object.assign(Object.assign({}, this.contextDetails), { flags: addTokenFlags }));
let isAliasExist = false;
const skipAliasReplaceConfirmation = addTokenFlags.force || addTokenFlags.yes;
let alias = addTokenFlags.alias;
let apiKey = addTokenFlags['api-key'] || addTokenFlags['stack-api-key'];
let token = addTokenFlags.token;
let isDelivery = addTokenFlags.delivery;
let isManagement = addTokenFlags.management;
let environment = addTokenFlags.environment;
const configKeyTokens = 'tokens';
cli_utilities_1.log.debug('Initial token parameters', Object.assign(Object.assign({}, this.contextDetails), { alias, hasApiKey: !!apiKey, hasToken: !!token, isDelivery,
isManagement,
environment,
skipAliasReplaceConfirmation }));
if (!isDelivery && !isManagement && !Boolean(environment)) {
cli_utilities_1.log.debug('No token type specified, requesting user input', this.contextDetails);
let tokenType = await (0, interactive_1.askTokenType)();
isDelivery = tokenType === 'delivery';
isManagement = tokenType === 'management';
cli_utilities_1.log.debug(`Token type selected: ${tokenType}`, this.contextDetails);
}
const type = isDelivery || Boolean(environment) ? 'delivery' : 'management';
cli_utilities_1.log.debug(`Final token type determined: ${type}`, this.contextDetails);
try {
if (!alias) {
cli_utilities_1.log.debug('No alias provided, requesting user input', this.contextDetails);
alias = await cli_utilities_1.cliux.inquire({ type: 'input', message: 'CLI_AUTH_TOKENS_ADD_ASK_TOKEN_ALIAS', name: 'alias' });
cli_utilities_1.log.debug(`Alias obtained: ${alias}`, this.contextDetails);
}
isAliasExist = Boolean(cli_utilities_1.configHandler.get(`${configKeyTokens}.${alias}`)); // get to Check if alias already present
cli_utilities_1.log.debug(`Checking if alias exists: ${isAliasExist}`, Object.assign(Object.assign({}, this.contextDetails), { alias }));
if (isAliasExist && !skipAliasReplaceConfirmation) {
cli_utilities_1.log.debug('Alias exists and confirmation required, requesting user input', this.contextDetails);
const shouldAliasReplace = await cli_utilities_1.cliux.inquire({
type: 'confirm',
message: `CLI_AUTH_TOKENS_ADD_CONFIRM_ALIAS_REPLACE`,
name: 'confirm',
});
cli_utilities_1.log.debug(`Alias replace confirmation: ${shouldAliasReplace}`, this.contextDetails);
if (!shouldAliasReplace) {
cli_utilities_1.log.debug('User declined alias replacement, exiting', this.contextDetails);
cli_utilities_1.log.info('Exiting from the process of replacing the token', this.contextDetails);
cli_utilities_1.cliux.print('CLI_AUTH_EXIT_PROCESS');
return;
}
}
if (!apiKey) {
cli_utilities_1.log.debug('No API key provided, requesting user input', this.contextDetails);
apiKey = await cli_utilities_1.cliux.inquire({ type: 'input', message: 'CLI_AUTH_TOKENS_ADD_ENTER_API_KEY', name: 'apiKey' });
cli_utilities_1.log.debug('API key obtained', Object.assign(Object.assign({}, this.contextDetails), { hasApiKey: !!apiKey }));
}
if (!token) {
cli_utilities_1.log.debug('No token provided, requesting user input', this.contextDetails);
token = await cli_utilities_1.cliux.inquire({ type: 'input', message: 'CLI_AUTH_TOKENS_ADD_ENTER_TOKEN', name: 'token' });
cli_utilities_1.log.debug('Token obtained', Object.assign(Object.assign({}, this.contextDetails), { hasToken: !!token }));
}
if (isDelivery && !environment) {
cli_utilities_1.log.debug('Delivery token requires environment, requesting user input', this.contextDetails);
environment = await cli_utilities_1.cliux.inquire({
type: 'input',
message: 'CLI_AUTH_TOKENS_ADD_ENTER_ENVIRONMENT',
name: 'env',
});
cli_utilities_1.log.debug(`Environment obtained: ${environment}`, this.contextDetails);
}
let msg = `Adding ${type} token with alias: ${alias}, apiKey: ${apiKey}`;
if (environment) {
msg += `, environment: ${environment}`;
}
cli_utilities_1.log.info(msg, this.contextDetails);
if (type === 'management') {
cli_utilities_1.log.debug('Validating management token', Object.assign(Object.assign({}, this.contextDetails), { apiKeyStatus: apiKey ? 'provided' : 'not-provided' }));
// FIXME - Once the SDK refresh token issue is resolved, need to revert this back to SDK call
const httpClient = new cli_utilities_1.HttpClient({ headers: { api_key: apiKey, authorization: token } });
cli_utilities_1.log.debug('Making management token validation API call', this.contextDetails);
const response = (await httpClient.get(`https://${this.cmaHost}/v3/environments?limit=1`)).data;
cli_utilities_1.log.debug('Management token validation response received', Object.assign(Object.assign({}, this.contextDetails), { response }));
if ((response === null || response === void 0 ? void 0 : response.error_code) === 105) {
cli_utilities_1.log.debug('Management token validation failed - invalid token', this.contextDetails);
throw new Error(cli_utilities_1.messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_MANAGEMENT_TOKEN'));
}
else if (response === null || response === void 0 ? void 0 : response.error_message) {
cli_utilities_1.log.debug('Management token validation failed with error message', Object.assign(Object.assign({}, this.contextDetails), { errorMessage: response.error_message }));
throw new Error(response.error_message);
}
cli_utilities_1.log.debug('Management token validation successful', this.contextDetails);
}
cli_utilities_1.log.debug('Saving token to configuration', Object.assign(Object.assign({}, this.contextDetails), { alias,
type, hasEnvironment: !!environment }));
if (isManagement) {
cli_utilities_1.configHandler.set(`${configKeyTokens}.${alias}`, { token, apiKey, type });
cli_utilities_1.log.debug('Management token saved to configuration', this.contextDetails);
}
else {
cli_utilities_1.configHandler.set(`${configKeyTokens}.${alias}`, { token, apiKey, environment, type });
cli_utilities_1.log.debug('Delivery token saved to configuration', this.contextDetails);
}
if (isAliasExist) {
cli_utilities_1.log.debug('Token replaced successfully', this.contextDetails);
cli_utilities_1.cliux.success('CLI_AUTH_TOKENS_ADD_REPLACE_SUCCESS');
}
else {
cli_utilities_1.log.debug('Token added successfully', this.contextDetails);
cli_utilities_1.cliux.success('CLI_AUTH_TOKENS_ADD_SUCCESS');
}
cli_utilities_1.log.debug('Token add process completed successfully', this.contextDetails);
}
catch (error) {
cli_utilities_1.log.debug('Token add process failed', Object.assign(Object.assign({}, this.contextDetails), { error }));
cli_utilities_1.cliux.print('CLI_AUTH_TOKENS_ADD_FAILED', { color: 'yellow' });
(0, cli_utilities_1.handleAndLogError)(error, Object.assign({}, this.contextDetails));
}
}
}
exports.default = TokensAddCommand;
TokensAddCommand.description = 'Adds management/delivery tokens to your session to use it with other CLI commands';
TokensAddCommand.examples = [
'$ csdx auth:tokens:add',
'$ csdx auth:tokens:add -a <alias>',
'$ csdx auth:tokens:add -k <stack api key>',
'$ csdx auth:tokens:add --delivery',
'$ csdx auth:tokens:add --management',
'$ csdx auth:tokens:add -e <environment>',
'$ csdx auth:tokens:add --token <token>',
'$ csdx auth:tokens:add -a <alias> -k <stack api key> --management --token <management token>',
'$ csdx auth:tokens:add -a <alias> -k <stack api key> --delivery -e <environment> --token <delivery token>',
'$ csdx auth:tokens:add --alias <alias> --stack-api-key <stack api key> --management --token <management token>',
'$ csdx auth:tokens:add --alias <alias> --stack-api-key <stack api key> --delivery -e <environment> --token <delivery token>',
];
TokensAddCommand.flags = {
alias: cli_utilities_1.Flags.string({ char: 'a', description: 'Alias (name) you want to assign to the token' }),
delivery: cli_utilities_1.flags.boolean({
char: 'd',
description: 'Set this flag to save delivery token',
exclusive: ['management'],
parse: (0, cli_utilities_1.printFlagDeprecation)(['-d'], ['--delivery']),
}),
management: cli_utilities_1.flags.boolean({
char: 'm',
description: 'Set this flag to save management token',
exclusive: ['delivery', 'environment'],
parse: (0, cli_utilities_1.printFlagDeprecation)(['-m'], ['--management']),
}),
environment: cli_utilities_1.flags.string({
char: 'e',
description: 'Environment name for delivery token',
exclusive: ['management'],
}),
'stack-api-key': cli_utilities_1.flags.string({ char: 'k', description: 'Stack API Key' }),
yes: cli_utilities_1.flags.boolean({ char: 'y', description: 'Use this flag to skip confirmation' }),
token: cli_utilities_1.flags.string({
char: 't',
description: 'Add the token name',
env: 'TOKEN',
parse: (0, cli_utilities_1.printFlagDeprecation)(['-t'], ['--token']),
}),
//To be deprecated
'api-key': cli_utilities_1.flags.string({
description: 'API Key',
hidden: true,
parse: (0, cli_utilities_1.printFlagDeprecation)(['api-key'], ['-k', 'stack-api-key']),
}),
force: cli_utilities_1.flags.boolean({
char: 'f',
hidden: true,
description: 'Force adding',
parse: (0, cli_utilities_1.printFlagDeprecation)(['-f', '--force'], ['-y', '--yes']),
}),
branch: cli_utilities_1.flags.string({
required: false,
multiple: false,
description: 'Branch name',
hidden: true,
}),
};
TokensAddCommand.usage = 'auth:tokens:add [-a <value>] [--delivery] [--management] [-e <value>] [-k <value>] [-y] [--token <value>]';