UNPKG

@arca/cli

Version:
93 lines (84 loc) 2.67 kB
#! /usr/bin/env node let program = require('commander'); let package = require('../package.json'); let co = require('co'); let prompt = require('co-prompt'); let fs = require('fs'); let request = require('request'); let url = "http://localhost:8000"; let data_directory = process.env.HOME + "/.arca"; // Set the headers let headers = { 'User-Agent': "Arca/"+package.version, 'Content-Type': 'application/json' } let config = { 'token': null } // try to populate the user dictionary from the file stored on disk try { config_json = fs.readFileSync(data_directory + '/config.json', 'utf8'); config = JSON.parse(config_json); } catch (err) { // Not logged in - dont do anything about it (yet) } function login() { co(function *() { console.log('Enter the username and password for Arca') let username = yield prompt('username: '); let password = yield prompt.password('password: '); // Create home folder for Arca, if it doesn't exist if (!fs.existsSync(data_directory)){ fs.mkdirSync(data_directory); } // Try to obtain the auth token let options = { url: url + '/api/users/token/', method: 'POST', headers: headers, form: {'username': username, "password": password} } // Fire off the post request to obtain a token request(options, function (error, response, body) { if (!error && response.statusCode == 200) { // All okay, so extract the token and store it in the arca folder let json_body = JSON.parse(body); config.token = json_body.token; fs.writeFileSync(data_directory + '/config.json', JSON.stringify(config), 'utf8'); } else if (response.statusCode == 401 ) { console.log("Username or password incorrect"); } else { console.log("An unknown error occured:"); console.log(body); } }) }); } function logout() { console.log('::logout'); } function list() { if ( config.token == null ) { console.log("You are not logged in - please login with 'arca login'"); process.exit(-1); } console.log("Listing applications"); } program .version(package.version, "-v, --version") .description('Inspect your Arca apps. For more information, go to https://arca.dk') program .command('login') .description('login to Arca') .action(login); program .command('list') .description('list your application') .action(list); program .command('logout') .description('remove authentication tokens from this host') .action(logout); options = program.parse(process.argv); // Display help, if no options specified if (!options.args.length) program.help();