@arca/cli
Version:
CLI for Arca
93 lines (84 loc) • 2.67 kB
JavaScript
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();