UNPKG

@contentstack/cli-auth

Version:

Contentstack CLI plugin for authentication activities

187 lines (186 loc) 11.7 kB
"use strict"; 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>]';