nap-cli
Version:
a new package cli
70 lines (64 loc) • 1.94 kB
JavaScript
var prompt = require('cli-prompt');
var request = require('request');
var clc = require('cli-color');
var fs = require('fs');
var path = require('path');
var pkg = require('../package.json');
var MAC = require('getmac');
var cmds = [];
cmds.push({
label: clc.magenta('➜ Email'),
key: 'email',
validate: function (val) {
if ( !/^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(val) ) {
throw new Error (clc.yellow('Invalid email'));
}
}
});
cmds.push({
label: clc.green('➜ Password'),
key: 'password',
type: 'password',
validate: function (val) {
if (val.length < 6){
throw new Error(clc.yellow('password must be at least 6 characters long'));
}
}
});
module.exports = function(){
prompt.multi(cmds, handle);
};
function handle(options){
console.log(clc.magenta('~ Posting data to remote for logining ...'));
MAC.getMac(function(err, macAddress){
if (err) throw err;
post(macAddress, options);
});
}
function post(mac, options){
request.post({
url: pkg.remotehost + '/login',
form: {
username: options.email,
password: options.password,
mac: mac
}
}, function(err, httpResponse, body){
var data = JSON.parse(body);
if ( data.success ){
var pather = 'c:\\nap';
if ( process.platform != 'win32' ){
pather = '/usr/local/nap';
}
if ( !fs.existsSync(pather) ){ fs.mkdirSync(pather); }
pather = path.resolve(pather, 'me.json');
fs.writeFileSync(pather, JSON.stringify({
guid: data.guid,
token: data.token
}));
console.log(clc.yellow('➜ login success!'));
}else{
console.log(clc.redBright('➜ ' + data.message));
}
});
}