scriptremote
Version:
Message server providing secure remote access to scripted applications from a browser UI
209 lines (184 loc) • 6.6 kB
JavaScript
//
// Handlers for browser client to access Angular dynamic templates
//
var Nodemailer = require('nodemailer'),
User = require('../../../app/models/user.server.model.js'),
MetaFile = require('../../../app/models/metafile.server.model.js'),
Template = require('../../../app/models/template.server.model.js'),
GridFSHandler = require('../../../app/controllers/api/files.server.controller.js'),
Utils = require('../../../app/utils.js');
// Get names of current templates of a location
exports.locationGet = function(req, res, next) {
var reqParams = res.locals.reqParams;
var loc = reqParams['location'];
res.send( Utils.makeRes(Utils.statusTag, Utils.OK, 'templates', loc.templates) );
}
// Set the templates to use at a location
exports.locationPut = function(req, res, next) {
var reqParams = res.locals.reqParams;
var loc = reqParams['location'];
loc.templates = reqParams['templates'];
loc.save(function(err) {
if (err) {
next(err);
}
else {
// Location has been saved successfully
res.send( Utils.makeRes(Utils.statusTag, Utils.OK) );
}
})
}
exports.filesGet = function(req, res, next) {
var reqParams = res.locals.reqParams;
var user = reqParams['user'];
var name = reqParams['name'];
if (reqParams['op'] == 'list') {
// Get names of available templates
Template.findOne( { ownerUid: user.Id() }, function(err, template) {
if (err || !template) {
next(err);
}
else {
reqParams['parentId'] = template.Id();
GridFSHandler.download(req, res, next);
}
})
}
else {
// Get template contents or properties
var query;
if ((reqParams['op'] == 'file') || (reqParams['op'] == 'property')) {
// User-specific template
query = { ownerUid: user.Id() };
}
else {
// Global default template
query = { name: 'GLOBAL' };
}
Template.findOne( query, function(err, template) {
if (err || !template) {
next(err);
}
else {
reqParams['parentId'] = template.Id();
reqParams['file_key'] = req.params.name;
GridFSHandler.download(req, res, next);
}
})
}
}
// Upload a new template
exports.filesPost = function(req, res, next) {
var reqParams = res.locals.reqParams;
var user = reqParams['user'];
Template.findOne( { ownerUid: user.Id() }, function(err, template) {
if (err || !template) {
next(err);
}
else {
reqParams['parentId'] = template.Id();
GridFSHandler.upload(req, res, next);
// As security check notify the user
var mailer = req.app.locals.mailer;
var mailTransport = Nodemailer.createTransport(mailer.options);
var options = {
from: mailer.from,
to: user.email,
subject: 'ScriptRemote security notice - templates changed',
html: 'A new template has been uploaded.\n If you did not make this change please contact your site administrator.'
}
mailTransport.sendMail(options, function(err1, info) {
if (err1) {
var time = (new Date()).toString();
console.log('\n' + time);
console.log(mailer.options);
console.log(options);
console.log(err1);
return;
}
else {
return;
}
})
}
})
}
// Get current user default template names
exports.userDefaultsGet = function(req, res, next) {
var reqParams = res.locals.reqParams;
var user = reqParams['user'];
Template.findOne( { ownerUid: user.Id() }, function(err, template) {
if (err || !template) {
next(err);
}
else {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK,
'defaults', template.defaults) );
}
})
}
// Update the user default template names
exports.userDefaultsPut = function(req, res, next) {
var reqParams = res.locals.reqParams;
var user = reqParams['user'];
Template.findOne( { ownerUid: user.Id() }, function(err, template) {
if (err || !template) {
next(err);
}
else {
var defaults = req.body.defaults;
if (defaults && (defaults.length == 3)) {
template.defaults = defaults;
template.save(function(err) {
if (err) {
next(err);
}
else {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK) );
}
})
}
}
})
}
// Delete a template
exports.fileDelete = function(req, res, next) {
var reqParams = res.locals.reqParams;
var user = reqParams['user'];
Template.findOne( { ownerUid: user.Id() }, function(err, template) {
if (err || !template || !req.params.name) {
next(err);
}
else {
MetaFile.findOne( {'fileKey': req.params.name, 'parentId': template.Id()}, function(err, mf) {
if (err) {
next(err);
}
else if (!mf) {
res.status(404);
res.send( Utils.makeRes(Utils.statusTag, "Invalid file key") );
}
else {
GridFSHandler.delete(req, mf)
.then( function() {
MetaFile.remove( {'fileKey': req.params.name, 'parentId': template.Id()},
function(err) {
if (err) {
next(err);
}
else {
res.send( Utils.makeRes(Utils.statusTag, Utils.OK) );
}
}
)
},
function(err) {
next(err);
}
)
}
})
}
})
}