aics
Version:
Aics is a code manager & meteor app deploy tools
156 lines (138 loc) • 3.83 kB
JavaScript
;
var path = require('path');
var fs = require('fs');
var request = require('request');
var qs = require('querystring');
var argv = require('minimist')(process.argv.slice(2));
var read = require('read')
module.exports = Account;
function Account() {}
Account.get = function() {
var user;
try {
user = JSON.parse(fs.readFileSync(process.env.HOME + "/account.json", 'utf8'));
} catch (e) {
user = {};
}
return user;
};
Account.adduser = function(cb) {
var u = {
e: '',
p: ''
}
var fns = [readEmail, readPassword, save]
loop()
function loop(er) {
if (er) return cb(er)
var fn = fns.shift()
if (fn) return fn(u, loop)
cb()
}
};
Account.createUser = function(cb) {
var u = {
e: '',
p: '',
n: ''
}
var fns = [readEmail, readPassword, readUsername, save]
loop()
function loop(er) {
if (er) return cb(er)
var fn = fns.shift()
if (fn) return fn(u, loop)
cb()
}
}
function readUsername(u, cb) {
read({ prompt: 'Username:', default: '' }, function(err, e) {
if (err) {
return cb(err.message === "cancelled" ? err.message : err)
}
var error = checkUsername(e);
if (!error) {
return readUsername(u, cb);
}
u.n = e;
createUser(u, cb)
})
}
function createUser(u, cb) {
var requesturl = process.env.AICS_HOST + "/account/create?" + qs.stringify(u);
console.log(requesturl)
request(requesturl, function(error, response, body) {
if (error) throw error;
body = JSON.parse(body);
console.log(body.code)
if (body.code > 0) {
var user = {
secret: body.data._id,
username: u.n,
email: u.e
}
console.log('user accounts create successfully!')
fs.writeFile(process.env.HOME + "/account.json", JSON.stringify(user), function(err, res) {
if (err) throw err;
console.log("帐户已更新")
})
} else {
console.log(body.msg)
}
});
}
function checkUsername(str) {
var usernameReg = /^\w+[\w\s]+\w+$/;
return usernameReg.test(str) ? true : false;
}
function readEmail(u, cb) {
read({ prompt: 'Email: ', default: '' }, function(er, e) {
if (er) {
return cb(er.message === 'cancelled' ? er.message : er)
}
var error = checkEmail(e)
if (error) {
return readEmail(u, cb)
}
if (!e) {
return readPassword(u, cb)
}
u.e = e;
cb(er)
})
}
function checkEmail(str) {
var email = /^([\w-_]+(?:\.[\w-_]+)*)@((?:[a-z0-9]+(?:-[a-zA-Z0-9]+)*)+\.[a-z]{2,6})$/i;
return email.test(str) ? false : true;
}
function readPassword(u, cb) {
read({ prompt: 'Password: ', silent: "true", replace: "*" }, function(er, un) {
if (er) {
return cb(er.message === 'cancelled' ? er.message : er)
}
if (!un) {
return save(u, cb)
}
u.p = un
cb(er)
})
}
function save(u, cb) {
var param = {
email: u.e,
password: u.p
};
var requesturl = process.env.AICS_HOST + "/account?" + qs.stringify(param);
request(requesturl, function(error, response, body) {
if (error) throw error;
var json = JSON.parse(body);
if (json.code === 200) {
fs.writeFile(process.env.HOME + "/account.json", JSON.stringify(json.data), function(err, res) {
if (err) throw err;
console.log("帐户已更新")
})
} else {
console.log(json.msg)
}
});
}