1
0
ohmyform/scripts/setup.js
2019-07-18 12:35:07 +02:00

191 lines
4.6 KiB
JavaScript

#!/usr/bin/env node
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
inquirer = require('inquirer'),
envfile = require('envfile'),
fs = require('fs-extra'),
chalk = require('chalk'),
constants = require('./setup_constants'),
_ = require('lodash');
var exitSuccess = function(cb) {
console.log(chalk.green('OhMyForm has been successfully setup'));
console.log(chalk.green('Have fun using OhMyForm!'));
if(require.main === module){
process.exit(1);
} else if(cb && typeof cb === 'function'){
cb();
}
}
var exitError = function(err, cb){
console.error(chalk.red(err.message || err));
if(require.main === module){
process.exit(-1);
} else if(cb && typeof cb === 'function'){
cb();
}
}
var removeENVFile = function() {
fs.unlinkSync('./\.env')
}
var createOrUpdateAdminUser = function(username, email, password, cb){
//Command Line Bootstrapping Code
if (require.main === module) {
var config = require('../config/config');
// Bootstrap db connection
var db = mongoose.connect(config.db.uri, config.db.options, function(err) {
if (err) {
console.error(chalk.red('Could not connect to MongoDB!'));
return cb(new Error(err));
}
});
mongoose.connection.on('error', function(err) {
return cb(new Error('MongoDB connection error: ' + err));
});
// Init the express application
require('../config/express')(db);
// Bootstrap passport config
require('../config/passport')();
}
var User = require('../app/models/user.server.model.js');
var updateObj = {
firstName: 'Admin',
lastName: 'Account',
username: username,
email: email,
provider: 'local',
roles: ['admin', 'user']
}
var options = {
upsert: true,
new: true,
setDefaultsOnInsert: true
}
User.findOneAndUpdate({ username: username }, updateObj, options, function (err, user) {
if (err) {
delete pass;
delete email;
delete username;
return cb(err);
}
if(!user){
delete pass;
delete email;
delete username;
return cb(new Error('Admin User could not be created'));
}
user.password = password
user.save(function(err) {
if(err){
delete pass;
delete email;
delete username;
return cb(err);
}
delete pass;
delete email;
delete username;
console.log(chalk.green('Successfully created user'));
cb();
});
});
}
var createENVFile = function(cb) {
inquirer.prompt(constants.questionsPart1).then(function (answersPart1) {
var nextQuestions = constants.mailerWellKnownQuestions.concat(constants.questionsPart2);
if(answersPart1['MAILER_SERVICE_PROVIDER'] === 'Custom Mailserver'){
nextQuestions = constants.mailerCustomQuestions.concat(constants.questionsPart2);
}
inquirer.prompt(nextQuestions).then(function (answersPart2) {
var answers = _.chain(anwsersPart1)._extend(answersPart2).mapValues(function(val){
if(_.isBoolean(val)){
return val ? 'TRUE' : 'FALSE';
}
return val;
}).values();
var email = answers['email'];
var username = answers['username'];
var pass = answers['password'];
delete answers['email'];
delete answers['username'];
delete answers['password'];
envfile.stringify(answers, function (err, str) {
try {
fs.outputFileSync('./\.env', str);
} catch (fileErr) {
console.error(chalk.red(fileErr));
process.exit(-1);
}
console.log(chalk.green('Successfully created .env file'));
createOrUpdateAdminUser(username, email, pass, function(err){
if(err) {
return exitError(err, cb);
}
exitSuccess(cb);
});
});
});
});
}
var checkENVAndRunSetup = function(cb) {
console.log(chalk.green(constants.asciiArt));
if(require.main === module){
console.log(chalk.green('Welcome to OhMyForm\'s Setup Tool'));
console.log(chalk.green('Follow the prompts to begin.\n-------------------------------------------\n\n'));
}
if(fs.existsSync('./\.env') && require.main === module) {
inquirer.prompt([constants.replaceENVQuestion]).then(function (envAnswer) {
if (envAnswer['replaceENVFile']) {
removeENVFile();
createENVFile(cb);
} else {
exitSuccess(cb);
}
});
} else {
if(require.main !== module){
console.log(chalk.green('Welcome to OhMyForm\'s Initial Setup\n'));
console.log(chalk.green('The following prompts will help you properly configure your OhMyForm instance.'));
console.log(chalk.green('If you want to run this tool after your inital setup, run `node scripts/setup.js`.\n---------------------------------------------------------------------\n\n'));
}
createENVFile();
}
}
module.exports.checkENVAndRunSetup = checkENVAndRunSetup;
if(require.main === module) {
checkENVAndRunSetup();
}