scriptremote
Version:
Message server providing secure remote access to scripted applications from a browser UI
235 lines (217 loc) • 7.51 kB
JavaScript
//
// Handlers for browser client to do admin tasks
//
var q = require('q'),
Nodemailer = require('nodemailer'),
User = require('../../../app/models/user.server.model.js'),
Reg = require('../../../app/controllers/browser/registration.server.controller.js'),
Delete = require('../../../app/controllers/api/delete.server.controller.js'),
Utils = require('../../../app/utils.js');
exports.get = function(req, res, next) {
if (req.params.uid) {
User.findOne( { 'uid': req.params.uid }, function(err, user) {
if (err) {
next(err);
}
else if (!user) {
res.status(401);
res.send( Utils.makeRes(Utils.statusTag, 'User not found') );
}
else {
var data = {'name': user.name, 'regDate': user.regDate, 'company': user.company,
'email': user.email, 'admin': user.admin, 'confirmed': user.confirmed,
'enabled': user.enabled, 'uid': user.uid, 'regToken': user.regToken,
'shares': user.shares};
res.send( Utils.makeRes(Utils.statusTag, Utils.OK, 'user', data));
}
})
}
else {
User.find( {} ).sort({regDate: 'asc'}).exec( function(err, users) {
if (err) {
next(err);
}
else {
var resUsers = [];
for (var i = 0; i < users.length; i++) {
resUsers.push( {'uid': users[i].uid, 'email': users[i].email} );
}
res.send( Utils.makeRes(Utils.statusTag, Utils.OK, 'users', resUsers) );
}
})
}
}
exports.post = function(req, res, next) {
var name = req.body.name;
var company = req.body.company;
var email = req.body.email;
var password = req.body.password;
if (!email || !password) {
res.status(400);
var err = new Error('Invalid request');
return next(err);
}
User.findOne( { email: email }, function(err, user) {
if (err) {
return next(err);
}
else if (user) {
res.status(400);
var msg = "Email " + email + " is already registered.";
res.send( Utils.makeRes(Utils.statusTag, msg, 'uid', user.uid) );
return
}
var newUser = null;
Reg.getConfig(false, req)
.then(function(config) {
return Reg.initUser(true, 'adminReg', config.idleTimeout, false, {'name': name,
'company': company, 'email': email, 'password': password})
})
.then(function(user) {
newUser = user;
return Reg.initTemplates(req.app.locals.grid, user)
})
.then( function() {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK, 'uid', newUser.uid) );
},
function(err) {
next(err)
}
)
})
}
exports.put = function(req, res, next) {
if (!req.params.uid) {
res.status(400);
var err = new Error('Invalid request');
return next(err);
}
User.findOne( { 'uid': req.params.uid }, function(err, user) {
if (err) {
next(err);
}
else if (!user) {
res.status(401);
res.send( Utils.makeRes(Utils.statusTag, 'User not found') );
}
else if (user.admin) {
res.status(400);
res.send( Utils.makeRes(Utils.statusTag, 'Not allowed for admin user') );
}
else {
if (req.body.hasOwnProperty('enabled')) {
user.enabled = req.body.enabled;
}
if (req.body.hasOwnProperty('confirmed')) {
user.confirmed = req.body.confirmed;
}
user.save( function(err, user1) {
if (err) {
next(err);
}
else {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK ) );
}
})
}
})
}
exports.delete = function(req, res, next) {
if (!req.params.uid) {
res.status(400);
var err = new Error('Invalid request');
return next(err);
}
User.findOne( { 'uid': req.params.uid }, function(err, user) {
if (err) {
next(err);
}
else if (!user) {
res.status(401);
res.send( Utils.makeRes(Utils.statusTag, 'User not found') );
}
else if (user.admin) {
res.status(400);
res.send( Utils.makeRes(Utils.statusTag, 'Not allowed for admin user') );
}
else {
Delete.userDelete(req, user)
.then( function() {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK) );
},
function(err) { next(err) }
)
}
})
}
exports.mail = function(req, res, next) {
User.find({}, function(err, users) {
if (err) {
next(err);
}
else {
var promises = [];
for (var i = 0; i < users.length; i++) {
var mailer = req.app.locals.mailer;
var mailTransport = Nodemailer.createTransport(mailer.options);
var options = {
from: mailer.from,
to: users[i].email,
subject: 'scriptremote admin message',
html: req.body.msg
}
var p = mailTransport.sendMail(options);
promises.push(p);
}
q.all(promises)
.then(function() {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK));
},
function(err) {
var time = (new Date()).toString();
console.log('\n' + time);
console.log(mailer.options);
console.log(options);
console.log(err);
next(err);
}
)
}
})
}
exports.options = function(req, res, next) {
if (req.method === 'PUT') {
Reg.getConfig(false, req)
.then(function(config) {
if (req.body.hasOwnProperty('options')) {
config.jobsEnabled = req.body.options.jobsEnabled;
config.regEnabled = req.body.options.regEnabled;
config.save( function(err, config1) {
if (err) {
next(err);
}
else {
var options = {'jobsEnabled': config1.jobsEnabled, 'regEnabled': config1.regEnabled};
res.send( Utils.makeRes(Utils.statusTag, Utils.OK, 'options', options) );
}
})
}
},
function(err) {
next(err);
}
)
}
else {
Reg.getConfig(false, req)
.then(function(config) {
var options = {'jobsEnabled': config.jobsEnabled, 'regEnabled': config.regEnabled};
res.send( Utils.makeRes(Utils.statusTag, Utils.OK, 'options', options) );
},
function(err) {
next(err);
}
)
}
}