Updated site to scale better on small screens; Added clearfix css; Updated shadow feature to use css shadows instead of js/images.
Added code to the admin part of the site - still non-functional. Need to fix JSON streaming over HTTP such that native types (boolean, Date, int) are preserved for the DB; Need to finish the restore functionality & the hide/show of the edit, delete, and restore buttons on each editor page.
This commit is contained in:
648
app/routes.js
648
app/routes.js
@@ -1,8 +1,11 @@
|
||||
var ejs = require('ejs');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var msgpack = require('msgpack5');
|
||||
var adminPath;
|
||||
|
||||
var PRODUCT_LIST_PATH = "VAP_Availability_List_Oct2016.pdf";
|
||||
|
||||
//Notes:
|
||||
//Use res.send or res.sendFile for static resources (like images or html)
|
||||
//Use res.send(ejs.render(htmlStr, viewArgs)) to manually render EJS files
|
||||
@@ -167,476 +170,219 @@ module.exports = function(app, rootPath, passport, smtpTransport, sequelize) {
|
||||
});
|
||||
|
||||
// Check for an ejs first even if an html is requested.
|
||||
app.get('/admin/**/*.html', isLoggedIn, function(req, res) {
|
||||
var ejs = req.path.substring(0, req.path.length - 4) + ".ejs";
|
||||
app.get('/admin/*.html', isLoggedIn, function(req, res) {
|
||||
var ejs = req.path.substring(0, req.path.length - 4) + "ejs";
|
||||
|
||||
//console.log("Checking for an ejs: " + ejs);
|
||||
|
||||
fs.stat(ejs, function(err, stats) {
|
||||
fs.stat(path.join(rootPath, ejs), function(err, stats) {
|
||||
if(!err) {
|
||||
res.render(ejs);
|
||||
res.render(path.join(rootPath, ejs));
|
||||
}
|
||||
else {
|
||||
res.sendFile(req.path);
|
||||
res.sendFile(path.join(rootPath, req.path));
|
||||
//res.sendFile(req.path);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/admin/user/list', isLoggedIn, function(req, res) {
|
||||
/* Test code to find all Categories and Subcategories.
|
||||
sequelize.models.Category.findAll({
|
||||
include:
|
||||
[
|
||||
{model: sequelize.models.Subcategory, paranoid: true, as: 'subcategories'}
|
||||
],
|
||||
order: ['name', ['name']]
|
||||
}).then(function(values) {
|
||||
console.log(values);
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
});
|
||||
*/
|
||||
|
||||
app.use('/ProductList', function(req, res) {
|
||||
try {
|
||||
res.sendFile(path.join(rootPath, PRODUCT_LIST_PATH));
|
||||
}
|
||||
catch(e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
|
||||
//Allows the client to query using the models defined by the application. Returns status codes or the results of the queries.
|
||||
app.use('/admin/data/:cls/:query', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
sequelize.models.User.findAll().then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
//var params = Object.keys(req.body).length == 0 ? req.query : req.body; //Use the Request.query if Request.body is empty.
|
||||
var params = req.query;
|
||||
var cls = req.params.cls;
|
||||
var query = req.params.query;
|
||||
var model = sequelize.models[cls];
|
||||
|
||||
//Merge the Request.body parameters into the params object.
|
||||
//TODO: Can we just use extend?
|
||||
Object.keys(req.body).forEach(function(key) {params[key] = req.body[key]});
|
||||
|
||||
if(params.msgpack) {
|
||||
params = msgpack.decode(params.msgpack);
|
||||
}
|
||||
|
||||
if(!model) {
|
||||
res.status(400).end();
|
||||
}
|
||||
else {
|
||||
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
res.header("Pragma", "no-cache");
|
||||
res.header("Expires", 0);
|
||||
|
||||
switch(query) {
|
||||
case 'readAll':
|
||||
case 'findAll':
|
||||
case 'getAll': {
|
||||
//Check the params for model references that need to be linked to the correct class. Example:
|
||||
//{include: [{model: 'Subcategory', paranoid: true, as: 'subcategories'}], order: ['name', ['name']]}
|
||||
if(params.include) {
|
||||
var include = params.include;
|
||||
|
||||
for(var includeIndex = 0; includeIndex < include.length; includeIndex++) {
|
||||
var nextInclude = include[includeIndex];
|
||||
|
||||
if(nextInclude.model) {
|
||||
nextInclude.model = sequelize.models[nextInclude.model];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model.findAll(params).then(function(values) {
|
||||
res.json(values);
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.status(400).end();
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'read':
|
||||
case 'readOne':
|
||||
case 'readFirst':
|
||||
case 'find':
|
||||
case 'findOne':
|
||||
case 'findFirst':
|
||||
case 'get':
|
||||
case 'getFirst':
|
||||
case 'getOne': {
|
||||
//Check the params for model references that need to be linked to the correct class. Example:
|
||||
//{include: [{model: 'Subcategory', paranoid: true, as: 'subcategories'}], order: ['name', ['name']]}
|
||||
if(params.include) {
|
||||
var include = params.include;
|
||||
|
||||
for(var includeIndex = 0; includeIndex < include.length; includeIndex++) {
|
||||
var nextInclude = include[includeIndex];
|
||||
|
||||
if(nextInclude.model) {
|
||||
nextInclude.model = sequelize.models[nextInclude.model];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model.find(params).then(function(value) {
|
||||
res.json(value);
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.status(400).end();
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'create':
|
||||
case 'insert':
|
||||
case 'new': {
|
||||
model.create(params).then(function(user) {
|
||||
//res.json({result: 'success'});
|
||||
res.status(200).end();
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
//res.json({result: 'duplicate'});
|
||||
res.status(400).end();
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'delete':
|
||||
case 'remove':
|
||||
case 'destroy': {
|
||||
//params: {where: {id: myId}}
|
||||
model.destroy(params).then(function(count) {
|
||||
if(count == 1) {
|
||||
//res.json({result: 'success'});
|
||||
res.status(200).end();
|
||||
}
|
||||
else {
|
||||
//res.json({result: 'failure'});
|
||||
res.status(400).end();
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
//res.json({result: 'failure'});
|
||||
res.status(400).end();
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'restore': {
|
||||
model.find(params).then(function(value) {
|
||||
if(value) {
|
||||
value.deletedAt = null;
|
||||
value.save().then(function() {
|
||||
res.status(200).end();
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.status(400).end();
|
||||
});
|
||||
}
|
||||
else {
|
||||
res.status(400).end();
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.status(400).end();
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'update':
|
||||
case 'change':
|
||||
case 'edit':
|
||||
case 'modify': {
|
||||
model.findById(params.id, {}).then(function(myModel) {
|
||||
for(var key in params) {
|
||||
if(key != 'id') {
|
||||
myModel[key] = params[key];
|
||||
}
|
||||
}
|
||||
|
||||
return myModel.save();
|
||||
}).then(function() {
|
||||
//res.json({result: 'success'});
|
||||
res.status(200).end();
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
//res.json({result: 'failure'});
|
||||
res.status(400).end();
|
||||
});
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
res.status(400).end();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
//TODO: Return some kind of error.
|
||||
res.status(400).end();
|
||||
}
|
||||
}
|
||||
catch(e) {console.log(e);}
|
||||
catch(e) {console.log(e); res.status(400).end();}
|
||||
});
|
||||
|
||||
app.post('/admin/user/create', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var login = req.body.login;
|
||||
var password = req.body.password;
|
||||
|
||||
sequelize.models.User.create({
|
||||
login: login,
|
||||
password: sequelize.models.User.generateHash(password),
|
||||
admin: true
|
||||
}).then(function(user) {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'duplicate'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/user/delete', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var userId = req.body.id;
|
||||
|
||||
/* This isn't quite right.. the return of user.destroy() causes problems if the user is not found. Regardless, it is cleaner code to user the class method to destroy the instance rather than load it just to destroy it.
|
||||
sequelize.models.User.findById(userId, {}).then(function(user) {
|
||||
if(user) {
|
||||
return user.destroy();
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
*/
|
||||
sequelize.models.User.destroy({where: {id: userId}}).then(function(count) {
|
||||
if(count == 1) {
|
||||
res.json({result: 'success'});
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/user/changeLogin', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var userId = req.body.id;
|
||||
var login = req.body.login;
|
||||
|
||||
sequelize.models.User.findById(userId, {}).then(function(user) {
|
||||
user.login = login;
|
||||
return user.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/user/resetPassword', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var userId = req.body.id;
|
||||
var password = req.body.password;
|
||||
|
||||
sequelize.models.User.findById(userId, {}).then(function(user) {
|
||||
user.password = sequelize.models.User.generateHash(password);
|
||||
return user.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.get('/admin/venues/list', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
var showDeleted = req.query.showDeleted == 'true';
|
||||
|
||||
sequelize.models.Venue.findAll({paranoid: !showDeleted}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
}
|
||||
catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/venues/create', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var name = req.body.name;
|
||||
|
||||
sequelize.models.Venue.create({
|
||||
name: name
|
||||
}).then(function(user) {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'duplicate'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/venues/delete', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
|
||||
sequelize.models.Venue.destroy({where: {id: id}}).then(function(count) {
|
||||
if(count == 1) {
|
||||
res.json({result: 'success'});
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/venues/edit', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
var name = req.body.name;
|
||||
|
||||
sequelize.models.Venue.findById(id, {}).then(function(venue) {
|
||||
venue.name = name;
|
||||
return venue.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.get('/admin/measures/list', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
var showDeleted = req.query.showDeleted == 'true';
|
||||
|
||||
sequelize.models.Measure.findAll({paranoid: !showDeleted}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
}
|
||||
catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/measures/create', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var name = req.body.name;
|
||||
var postfix = req.body.postfix;
|
||||
|
||||
sequelize.models.Measure.create({
|
||||
name: name,
|
||||
postfix: postfix
|
||||
}).then(function(user) {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'duplicate'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/measures/delete', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
|
||||
sequelize.models.Measure.destroy({where: {id: id}}).then(function(count) {
|
||||
if(count == 1) {
|
||||
res.json({result: 'success'});
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/measures/edit', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
var name = req.body.name;
|
||||
var postfix = req.body.postfix;
|
||||
|
||||
sequelize.models.Measure.findById(id, {}).then(function(measure) {
|
||||
measure.name = name;
|
||||
measure.postfix = postfix;
|
||||
return measure.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.get('/admin/categories/list', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
var showDeleted = req.query.showDeleted == 'true';
|
||||
|
||||
sequelize.models.Category.findAll({paranoid: !showDeleted}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
}
|
||||
catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/categories/create', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var name = req.body.name;
|
||||
|
||||
sequelize.models.Category.create({
|
||||
name: name
|
||||
}).then(function(user) {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'duplicate'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/categories/delete', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
|
||||
sequelize.models.Category.destroy({where: {id: id}}).then(function(count) {
|
||||
if(count == 1) {
|
||||
res.json({result: 'success'});
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/categories/edit', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
var name = req.body.name;
|
||||
|
||||
sequelize.models.Category.findById(id, {}).then(function(category) {
|
||||
category.name = name;
|
||||
return category.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.get('/admin/subcategories/list', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
var showDeleted = req.query.showDeleted == 'true';
|
||||
|
||||
sequelize.models.Subcategory.findAll({paranoid: !showDeleted}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
}
|
||||
catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/subcategories/create', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var name = req.body.name;
|
||||
|
||||
sequelize.models.Subcategory.create({
|
||||
name: name
|
||||
}).then(function(user) {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'duplicate'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/subcategories/delete', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
|
||||
sequelize.models.Subcategory.destroy({where: {id: id}}).then(function(count) {
|
||||
if(count == 1) {
|
||||
res.json({result: 'success'});
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/subcategories/edit', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
var name = req.body.name;
|
||||
|
||||
sequelize.models.Subcategory.findById(id, {}).then(function(subcategory) {
|
||||
subcategory.name = name;
|
||||
return subcategory.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.get('/admin/items/list', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
var showDeleted = req.query.showDeleted == 'true';
|
||||
|
||||
sequelize.models.Item.findAll({paranoid: !showDeleted}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
}
|
||||
catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/items/create', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var name = req.body.name;
|
||||
var defaultPrice = req.body.defaultPrice;
|
||||
var measures = req.body.measures;
|
||||
|
||||
sequelize.models.Item.create({
|
||||
name: name,
|
||||
defaultPrice: defaultPrice,
|
||||
measures: measures
|
||||
}).then(function(user) {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'duplicate'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/items/delete', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
|
||||
sequelize.models.Item.destroy({where: {id: id}}).then(function(count) {
|
||||
if(count == 1) {
|
||||
res.json({result: 'success'});
|
||||
}
|
||||
else {
|
||||
res.json({result: 'failure'});
|
||||
}
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.post('/admin/items/edit', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
if(req.user.admin) {
|
||||
var id = req.body.id;
|
||||
var name = req.body.name;
|
||||
var defaultPrice = req.body.defaultPrice;
|
||||
var measures = req.body.measures;
|
||||
|
||||
sequelize.models.Item.findById(id, {}).then(function(item) {
|
||||
item.name = name;
|
||||
item.defaultPrice = defaultPrice;
|
||||
item.measures = measures;
|
||||
return item.save();
|
||||
}).then(function() {
|
||||
res.json({result: 'success'});
|
||||
}).catch(function(err) {
|
||||
console.log(err);
|
||||
res.json({result: 'failure'});
|
||||
});
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
/*
|
||||
app.get('/admin/getCategories', isLoggedIn, function(req, res) {
|
||||
sequelize.models.Category.findAll({attributes: ['id', 'name', 'visible'], order: [['name', 'DESC'], ['visible', 'DESC']]}).then(function(values) {
|
||||
res.json(values);
|
||||
@@ -685,7 +431,7 @@ module.exports = function(app, rootPath, passport, smtpTransport, sequelize) {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
*/
|
||||
};
|
||||
|
||||
// route middleware to make sure a user is logged in
|
||||
|
||||
Reference in New Issue
Block a user