clistyle: some account key UI fixes.
This commit is contained in:
parent
88bbfdfba7
commit
ea759565c7
@ -11,11 +11,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var assert = require('assert-plus');
|
var assert = require('assert-plus');
|
||||||
|
var tabula = require('tabula');
|
||||||
|
|
||||||
var common = require('../common');
|
var common = require('../common');
|
||||||
var errors = require('../errors');
|
var errors = require('../errors');
|
||||||
|
|
||||||
|
|
||||||
|
var COLUMNS_DEFAULT = 'fingerprint,name';
|
||||||
|
var COLUMNS_LONG = 'fingerprint,name,key';
|
||||||
|
var SORT_DEFAULT = 'name';
|
||||||
|
|
||||||
|
|
||||||
function do_list(subcmd, opts, args, cb) {
|
function do_list(subcmd, opts, args, cb) {
|
||||||
assert.func(cb, 'cb');
|
assert.func(cb, 'cb');
|
||||||
|
|
||||||
@ -38,11 +44,28 @@ function do_list(subcmd, opts, args, cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opts.json) {
|
if (opts.json) {
|
||||||
console.log(JSON.stringify(keys));
|
common.jsonStream(keys);
|
||||||
} else {
|
} else if (opts.authorized_keys) {
|
||||||
keys.forEach(function (key) {
|
keys.forEach(function (key) {
|
||||||
console.log(common.chomp(key.key));
|
console.log(common.chomp(key.key));
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
var columns = COLUMNS_DEFAULT;
|
||||||
|
|
||||||
|
if (opts.o) {
|
||||||
|
columns = opts.o;
|
||||||
|
} else if (opts.long) {
|
||||||
|
columns = COLUMNS_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
columns = columns.split(',');
|
||||||
|
var sort = opts.s.split(',');
|
||||||
|
|
||||||
|
tabula(keys, {
|
||||||
|
skipHeader: false,
|
||||||
|
columns: columns,
|
||||||
|
sort: sort
|
||||||
|
});
|
||||||
}
|
}
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
@ -54,13 +77,19 @@ do_list.options = [
|
|||||||
names: ['help', 'h'],
|
names: ['help', 'h'],
|
||||||
type: 'bool',
|
type: 'bool',
|
||||||
help: 'Show this help.'
|
help: 'Show this help.'
|
||||||
},
|
|
||||||
{
|
|
||||||
names: ['json', 'j'],
|
|
||||||
type: 'bool',
|
|
||||||
help: 'JSON stream output.'
|
|
||||||
}
|
}
|
||||||
];
|
].concat(common.getCliTableOptions({
|
||||||
|
includeLong: true,
|
||||||
|
sortDefault: SORT_DEFAULT
|
||||||
|
})).concat([
|
||||||
|
{
|
||||||
|
names: ['authorized-keys', 'A'],
|
||||||
|
type: 'bool',
|
||||||
|
help: 'Just output public key data -- i.e. output appropriate for a ' +
|
||||||
|
'"~/.ssh/authorized_keys" file.'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
do_list.help = [
|
do_list.help = [
|
||||||
'Show all of an account\'s SSH keys.',
|
'Show all of an account\'s SSH keys.',
|
||||||
'',
|
'',
|
||||||
|
@ -23,17 +23,19 @@ var backoff = require('backoff');
|
|||||||
var KEY_PATH = __dirname + '/data/id_rsa.pub';
|
var KEY_PATH = __dirname + '/data/id_rsa.pub';
|
||||||
var KEY_SIG = '66:ca:1c:09:75:99:35:69:be:91:08:25:03:c0:17:c0';
|
var KEY_SIG = '66:ca:1c:09:75:99:35:69:be:91:08:25:03:c0:17:c0';
|
||||||
var KEY_EMAIL = 'test@localhost.local';
|
var KEY_EMAIL = 'test@localhost.local';
|
||||||
|
var KEY_NAME = 'testkey';
|
||||||
var MAX_CHECK_KEY_TRIES = 10;
|
var MAX_CHECK_KEY_TRIES = 10;
|
||||||
|
|
||||||
// --- Tests
|
// --- Tests
|
||||||
|
|
||||||
test('triton key', function (tt) {
|
test('triton key', function (tt) {
|
||||||
tt.test(' triton key add', function (t) {
|
tt.test(' triton key add', function (t) {
|
||||||
h.triton('key add ' + KEY_PATH, function (err, stdout, stderr) {
|
var cmd = 'key add -n ' + KEY_NAME + ' ' + KEY_PATH;
|
||||||
|
h.triton(cmd, function (err, stdout, stderr) {
|
||||||
if (h.ifErr(t, err, 'triton key add'))
|
if (h.ifErr(t, err, 'triton key add'))
|
||||||
return t.end();
|
return t.end();
|
||||||
|
|
||||||
t.ok(stdout.match('Added key "' + KEY_SIG + '"'));
|
t.equal(stdout, 'Added key "' + KEY_NAME + '" (' + KEY_SIG + ')\n');
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -43,7 +45,7 @@ test('triton key', function (tt) {
|
|||||||
if (h.ifErr(t, err, 'triton key get'))
|
if (h.ifErr(t, err, 'triton key get'))
|
||||||
return t.end();
|
return t.end();
|
||||||
|
|
||||||
t.ok(stdout.match(KEY_EMAIL));
|
t.ok(stdout.match(KEY_EMAIL), 'test key email present');
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -53,13 +55,16 @@ test('triton key', function (tt) {
|
|||||||
if (h.ifErr(t, err, 'triton key list'))
|
if (h.ifErr(t, err, 'triton key list'))
|
||||||
return t.end();
|
return t.end();
|
||||||
|
|
||||||
|
var keys = stdout.split('\n');
|
||||||
|
t.ok(keys[0].match('FINGERPRINT'));
|
||||||
|
keys.shift();
|
||||||
|
|
||||||
// there should always be at least two keys -- the original
|
// there should always be at least two keys -- the original
|
||||||
// account's key, and the test key these tests added
|
// account's key, and the test key these tests added
|
||||||
var keys = stdout.split('\n');
|
|
||||||
t.ok(keys.length > 2, 'triton key list expected key num');
|
t.ok(keys.length > 2, 'triton key list expected key num');
|
||||||
|
|
||||||
var testKeys = keys.filter(function (key) {
|
var testKeys = keys.filter(function (key) {
|
||||||
return key.match(KEY_EMAIL);
|
return key.match(KEY_NAME);
|
||||||
});
|
});
|
||||||
|
|
||||||
// this test is a tad dodgy, since it's plausible that there might
|
// this test is a tad dodgy, since it's plausible that there might
|
||||||
@ -76,7 +81,7 @@ test('triton key', function (tt) {
|
|||||||
if (h.ifErr(t, err, 'triton key delete'))
|
if (h.ifErr(t, err, 'triton key delete'))
|
||||||
return t.end();
|
return t.end();
|
||||||
|
|
||||||
t.ok(stdout.match('Deleted key "' + KEY_SIG + '"'));
|
t.ok(stdout.match('Deleted key "' + KEY_SIG + '"'), 'key deleted');
|
||||||
|
|
||||||
// verify key is gone, which sometimes takes a while
|
// verify key is gone, which sometimes takes a while
|
||||||
var call = backoff.call(function checkKey(next) {
|
var call = backoff.call(function checkKey(next) {
|
||||||
|
Reference in New Issue
Block a user