#!/usr/bin/env node /** * Module dependencies. */ const util = require('./util'); const program = require('commander'); const mongoose = require('../services/mongoose'); const TokensService = require('../services/tokens'); const Table = require('cli-table'); // Register the shutdown criteria. util.onshutdown([ () => mongoose.disconnect() ]); async function listTokens(userID) { try { let tokens = await TokensService.list(userID); let table = new Table({ head: [ 'ID', 'Name', 'Status' ] }); tokens.forEach((token) => { table.push([ token.id, token.name, token.active ? 'Active' : 'Revoked' ]); }); console.log(table.toString()); util.shutdown(); } catch (e) { console.error(e); util.shutdown(1); } } async function revokeToken(tokenID) { try { await TokensService.revoke(null, tokenID); console.log(`Revoked Token[${tokenID}]`); util.shutdown(); } catch (e) { console.error(e); util.shutdown(1); } } async function createToken(userID, tokenName) { try { let {pat: {id}, jwt} = await TokensService.create(userID, tokenName); console.log(`Created Token[${id}] for User[${userID}] = ${jwt}`); util.shutdown(); } catch (e) { console.error(e); util.shutdown(1); } } //============================================================================== // Setting up the program command line arguments. //============================================================================== program .command('list ') .description('list tokens for a user') .action(listTokens); program .command('revoke ') .description('revokes a token with a given id') .action(revokeToken); program .command('create ') .description('create a token for a user with a given name') .action(createToken); program.parse(process.argv); // If there is no command listed, output help. if (!process.argv.slice(2).length) { program.outputHelp(); util.shutdown(); }