UNPKG

4.44 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const tslib_1 = require("tslib");
4const sdk_1 = require("@cto.ai/sdk");
5const base_1 = tslib_1.__importDefault(require("../../base"));
6const utils_1 = require("../../utils");
7const CustomErrors_1 = require("../../errors/CustomErrors");
8const { white, reset } = sdk_1.ux.colors;
9class SecretsRegister extends base_1.default {
10 constructor() {
11 super(...arguments);
12 this.validateRegisterInput = async (input) => {
13 try {
14 if (!input) {
15 return `šŸ˜ž Sorry, the value cannot be empty`;
16 }
17 return true;
18 }
19 catch (err) {
20 throw new CustomErrors_1.InvalidTeamNameFormat(err);
21 }
22 };
23 this.promptForSecretsProviderCredentials = async (team) => {
24 const { url, token } = await sdk_1.ux.prompt([
25 {
26 type: 'input',
27 name: 'url',
28 message: `\nšŸ” Register your secret storage to share secrets and passwords with team ${reset.blueBright(`${team.name}`)} \n${reset.grey('Enter your secret storage')} ${reset.blue('url')} ${reset.grey('and')} ${reset.blue('access token.')}\n${reset.grey(`Run ${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('ā†’')}`,
29 afterMessage: `${reset.green('āœ“')} URL `,
30 validate: this.validateRegisterInput.bind(this),
31 },
32 {
33 type: 'password',
34 name: 'token',
35 message: `\nšŸ” Register secret storage access token ${reset.green('ā†’')} \n${white('Enter access token:')} `,
36 afterMessage: `${reset.green('āœ“')} TOKEN ${reset.grey('********')} \nšŸ™Œ Secrets registration complete!`,
37 validate: this.validateRegisterInput.bind(this),
38 },
39 ]);
40 return { activeTeam: team, url, token };
41 };
42 this.registerSecretsProvider = async (inputs) => {
43 try {
44 await this.services.api.create(`/private/teams/${inputs.activeTeam.name}/secrets/register`, {
45 token: inputs.token,
46 url: inputs.url,
47 }, {
48 headers: {
49 Authorization: this.accessToken,
50 },
51 });
52 return inputs;
53 }
54 catch (err) {
55 this.debug('%O', err);
56 switch (err.error[0].code) {
57 case 400:
58 throw new CustomErrors_1.InvalidSecretVault(err);
59 case 401:
60 throw new CustomErrors_1.UserUnauthorized(err);
61 case 403:
62 throw new CustomErrors_1.InvalidSecretToken(err);
63 case 404:
64 throw new CustomErrors_1.NoTeamFound(inputs.activeTeam.name);
65 default:
66 throw new CustomErrors_1.RegisterSecretsProvider(err);
67 }
68 }
69 };
70 this.sendAnalytics = (state) => async () => {
71 const { team } = state.config;
72 const { email, username } = state.config.user;
73 this.services.analytics.track({
74 userId: email,
75 teamId: team.id,
76 cliEvent: 'Ops CLI Register Secrets Provider',
77 event: 'Ops CLI Register Secrets Provider',
78 properties: {
79 email,
80 username,
81 },
82 }, this.accessToken);
83 };
84 }
85 async run() {
86 try {
87 await this.isLoggedIn();
88 const switchPipeline = utils_1.asyncPipe(this.promptForSecretsProviderCredentials, this.registerSecretsProvider, this.sendAnalytics(this.state));
89 await switchPipeline(this.state.config.team);
90 }
91 catch (err) {
92 this.debug('%O', err);
93 this.config.runHook('error', { err, accessToken: this.accessToken });
94 }
95 }
96}
97exports.default = SecretsRegister;
98SecretsRegister.description = 'Register a secrets provider for a team';