Merge pull request #1749 from balena-io/convert-api-key

Convert `balena api-key generate` to oclif
This commit is contained in:
srlowe 2020-05-04 14:17:23 +02:00 committed by GitHub
commit 2f6889cca1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 98 additions and 42 deletions

View File

@ -32,7 +32,7 @@ const capitanoDoc = {
categories: [
{
title: 'API keys',
files: ['build/actions/api-key.js'],
files: ['build/actions-oclif/api-key/generate.js'],
},
{
title: 'Application',

View File

@ -258,7 +258,7 @@ If you come across any problems or would like to get in touch:
## api-key generate <name>
This command generates a new API key for the current user, with the given
Generate a new balenaCloud API key for the current user, with the given
name. The key will be logged to the console.
This key can be used to log into the CLI using 'balena login --token <key>',
@ -268,6 +268,14 @@ Examples:
$ balena api-key generate "Jenkins Key"
### Arguments
#### NAME
the API key name
### Options
# Application
## apps

View File

@ -0,0 +1,86 @@
/**
* @license
* Copyright 2016-2020 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { flags } from '@oclif/command';
import { stripIndent } from 'common-tags';
import Command from '../../command';
import { ExpectedError } from '../../errors';
import * as cf from '../../utils/common-flags';
import { getBalenaSdk } from '../../utils/lazy';
interface FlagsDef {
help: void;
}
interface ArgsDef {
name: string;
}
export default class GenerateCmd extends Command {
public static description = stripIndent`
Generate a new balenaCloud API key.
Generate a new balenaCloud API key for the current user, with the given
name. The key will be logged to the console.
This key can be used to log into the CLI using 'balena login --token <key>',
or to authenticate requests to the API with an 'Authorization: Bearer <key>' header.
`;
public static examples = ['$ balena api-key generate "Jenkins Key"'];
public static args = [
{
name: 'name',
description: 'the API key name',
required: true,
},
];
public static usage = 'api-key generate <name>';
public static flags: flags.Input<FlagsDef> = {
help: cf.help,
};
public static authenticated = true;
public async run() {
const { args: params } = this.parse<FlagsDef, ArgsDef>(GenerateCmd);
let key;
try {
key = await getBalenaSdk().models.apiKey.create(params.name);
} catch (e) {
if (e.name === 'BalenaNotLoggedIn') {
throw new ExpectedError(stripIndent`
This command cannot be run when logged in with an API key.
Please login again with 'balena login' and select an alternative method.
`);
} else {
throw e;
}
}
console.log(stripIndent`
Registered api key '${params.name}':
${key}
This key will not be shown again, so please save it now.
`);
}
}

View File

@ -1,34 +0,0 @@
import { CommandDefinition } from 'capitano';
import { stripIndent } from 'common-tags';
import { getBalenaSdk } from '../utils/lazy';
export const generate: CommandDefinition<{
name: string;
}> = {
signature: 'api-key generate <name>',
description: 'Generate a new API key with the given name',
help: stripIndent`
This command generates a new API key for the current user, with the given
name. The key will be logged to the console.
This key can be used to log into the CLI using 'balena login --token <key>',
or to authenticate requests to the API with an 'Authorization: Bearer <key>' header.
Examples:
$ balena api-key generate "Jenkins Key"
`,
async action(params) {
await getBalenaSdk()
.models.apiKey.create(params.name)
.then(key => {
console.log(stripIndent`
Registered api key '${params.name}':
${key}
This key will not be shown again, so please save it now.
`);
});
},
};

View File

@ -14,7 +14,6 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import * as apiKey from './api-key';
import * as auth from './auth';
import * as config from './config';
import * as device from './device';
@ -29,7 +28,6 @@ import * as tunnel from './tunnel';
import * as util from './util';
export {
apiKey,
auth,
device,
tags,

View File

@ -49,9 +49,6 @@ capitano.globalOption({
// ---------- Help Module ----------
capitano.command(actions.help.help);
// ---------- Api key module ----------
capitano.command(actions.apiKey.generate);
// ---------- Auth Module ----------
capitano.command(actions.auth.login);
capitano.command(actions.auth.logout);

View File

@ -138,6 +138,7 @@ export const convertedCommands = [
'app:restart',
'app:rm',
'apps',
'api-key:generate',
'devices:supported',
'envs',
'env:add',

View File

@ -34,7 +34,7 @@ Primary commands:
const ADDITIONAL_HELP = `
Additional commands:
api-key generate <name> Generate a new API key with the given name
api-key generate <name> generate a new balenaCloud API key
app create <name> create an application
app restart <name> restart an application
app rm <name> remove an application