graojs
Version:
graoJS - A full stack MVC NodeJS framework
157 lines (134 loc) • 5.03 kB
JavaScript
var
path = require('path'),
fs = require('fs-extra');
var GraoCommands = function (di) {
this.id = 'main';
this.title = 'Main graoJS commands';
this.actions = [
{
id: 'version',
method: 'runVersion',
desc: 'Shows graoJS version',
appOnly: false,
promptSchema: {}
},
{
id: 'asciiart',
method: 'runAsciiart',
desc: 'Shows graoJS logo on ASCII Art',
appOnly: false,
promptSchema: {}
},
{
id: 'hello:world',
method: 'runHelloWorld',
desc: 'Sample hello world command',
appOnly: false,
promptSchema: {
properties: {
name: {
description: "Your Name ( only letters )",
pattern: "^[a-zA-Z]+$",
message: "Must be only letters",
required: true
}
}
}
},
{
id: 'create:admin',
method: 'createAdmin',
desc: 'Create admin user',
appOnly: true,
promptSchema: {
properties: {
username: {
description: "Username must be only lowercase letters or numbers",
pattern: "^[a-z0-9]+$",
message: "Username must be only lowercase letters or numbers",
required: true
},
email: {
description: "Valid email it's necessary",
pattern: /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
message: "Valid email it's necessary",
required: true
},
password: {
message: "Password it's required",
required: true,
hidden: true
}
}
}
}
];
this.runVersion = function (argv, prompt, schema) {
var package = JSON.parse(fs.readFileSync(path.join(__dirname, '/../..', 'package.json'), 'utf8').toString().replace(/\n/g, ''));
console.log('>> ' + package.version);
}
this.runAsciiart = function (argv, prompt, schema) {
console.log("\n" + fs.readFileSync(path.join(__dirname, '/../..', 'graojs.ascii'), { encoding: 'utf8' }));
}
this.runHelloWorld = function (argv, prompt, schema) {
prompt.get(schema, function doPrompt(err, result) {
if (err) {
return onErr(err);
}
console.log('Hello, ' + result.name);
});
}
this.createAdmin = function(argv, prompt, schema) {
var GraoJS = require(process.cwd()+"/node_modules/graojs/index.js");
//var GraoJS = require("../../index.js"); // require("graojs");
var grao = new GraoJS();
prompt.get(schema, function (err, args) {
if (err)
return exit((err).red);
function saveUser(activity) {
if(!activity || !activity._id) {
console.log(activity);
return exit(("Activity id not found!").red);
}
var user = new grao.kernel.models.user;
user.name = args.username;
user.username = args.username;
user.password = args.password;
user.email = args.email;
user.activitys = new Array();
user.activitys.push(activity._id);
user.enabled = true;
user.save(function(err, user){
if(err || !user) return exit((err.message ? err.message : err).red);
exit(("Admin user created successfully").blue);
});
}
grao.kernel.models.activity.findOne({code: "admin"}, function(err, activity){
if(err || !activity){
var activity = new grao.kernel.models.activity;
activity.name = "Administrative";
activity.code = "admin";
activity.description = "Auto-generate by graoJS CLI";
activity.save(function(err, activity){
if(err || !activity) return exit((err.message ? err.message : err).red);
console.log(("Admin activity created successfully").blue);
saveUser(activity);
});
} else {
saveUser(activity);
}
});
});
function exit(msg) {
console.log(msg);
delete grao;
delete GraoJS;
process.exit(0);
}
}
}
function onErr(err) {
console.log(err);
return 1;
}
module.exports = exports = GraoCommands;