UNPKG

@cto.ai/ops

Version:

šŸ’» CTO.ai - The CLI built for Teams šŸš€

94 lines (93 loc) • 4.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const cli_sdk_1 = require("@cto.ai/cli-sdk"); const base_1 = tslib_1.__importDefault(require("./../../base")); const utils_1 = require("./../../utils"); const CustomErrors_1 = require("./../../errors/CustomErrors"); const { white, reset } = cli_sdk_1.ux.colors; class SecretsRegister extends base_1.default { constructor() { super(...arguments); this.validateRegisterInput = async (input) => { try { if (!input) { return `šŸ˜ž Sorry, the value cannot be empty`; } return true; } catch (err) { throw new CustomErrors_1.InvalidTeamNameFormat(err); } }; this.promptForSecretsProviderCredentials = async (inputs) => { const { url, token } = await cli_sdk_1.ux.prompt([ { type: 'input', name: 'url', message: `\nšŸ” Register your secret storage to share secrets and passwords with team ${reset.blueBright(`${inputs.config.team.name}`)} \n${reset.grey('Enter your secret storage')} ${reset.blue('url')} ${reset.grey('and')} ${reset.blue('access token.')}\n${reset.grey(`Run ${(0, utils_1.terminalText)('ops team:switch')}`)} ${reset.grey('to change the team for')} ${reset.grey('the secret storage registration.')}\n${white('Link your secret storage to your team')} ${reset.green('→')}`, afterMessage: `${reset.green('āœ“')} URL `, validate: this.validateRegisterInput.bind(this), }, { type: 'password', name: 'token', message: `\nšŸ” Register secret storage access token ${reset.green('→')} \n${white('Enter access token:')} `, afterMessage: `${reset.green('āœ“')} TOKEN ${reset.grey('********')} \nšŸ™Œ Secrets registration complete!`, validate: this.validateRegisterInput.bind(this), }, ]); return Object.assign(Object.assign({}, inputs), { url, token }); }; this.registerSecretsProvider = async (inputs) => { try { await this.services.api.create(`/private/teams/${inputs.config.team.name}/secrets/register`, { token: inputs.token, url: inputs.url, }, { headers: { Authorization: this.accessToken, }, }); return inputs; } catch (err) { this.debug('%O', err); switch (err.error[0].code) { case 400: throw new CustomErrors_1.InvalidSecretVault(err); case 401: throw new CustomErrors_1.UserUnauthorized(err); case 403: throw new CustomErrors_1.InvalidSecretToken(err); case 404: throw new CustomErrors_1.NoTeamFound(inputs.config.team.name); default: throw new CustomErrors_1.RegisterSecretsProvider(err); } } }; this.sendAnalytics = async (inputs) => { const { config } = inputs; this.services.analytics.track('Ops CLI Secrets:Register', { username: config.user.username, }, config); }; } async run() { const config = await this.isLoggedIn(); try { const switchPipeline = (0, utils_1.asyncPipe)(this.promptForSecretsProviderCredentials, this.registerSecretsProvider, this.sendAnalytics); await switchPipeline({ config }); } catch (err) { this.debug('%O', err); this.config.runHook('error', { err, accessToken: config.tokens.accessToken, }); } } } exports.default = SecretsRegister; SecretsRegister.description = 'Register a secrets provider for a team';