Merged PetitTetonApps with the website now that the deployment server always uses SSL. Used the Apps more recent implementation of NodeJS/Express.
This commit is contained in:
242
app/routes.js
Normal file
242
app/routes.js
Normal file
@@ -0,0 +1,242 @@
|
||||
var ejs = require('ejs');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var adminPath;
|
||||
|
||||
//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
|
||||
//Use res.render("my.ejs", {root: adminPath}) to render EJS files (if you have setup the ejs renderer
|
||||
|
||||
module.exports = function(app, rootPath, passport, smtpTransport, sequelize) {
|
||||
adminPath = path.join(rootPath, 'admin');
|
||||
|
||||
// =====================================
|
||||
// HOME PAGE (with login links)
|
||||
// =====================================
|
||||
//app.get('/', isLoggedIn, function(req, res) {
|
||||
// res.render('index.ejs'); // load the index.ejs file
|
||||
//});
|
||||
//Handle the root being requested, and the search engine requesting a static page with content.
|
||||
app.get('/', function(req, res) {
|
||||
try {
|
||||
//Note: This is for search engines.
|
||||
if(typeof(req.query._escaped_fragment_) !== "undefined") {
|
||||
console.log("Search Engine Detected");
|
||||
var viewArgs = {}; //What args to use for a search engine?
|
||||
|
||||
//The DIY method which is somewhat brittle since it relies on <!--CONTENT--> existing in the index file, and it replaces that with the contents of the passed parameter (what is after the #!) for the content html which is inserted into the index file in place of <!--CONTENT-->.
|
||||
fs.readFile(rootPath + '/index.html', {encoding: "UTF8"}, function(err, indexContent) {
|
||||
if(!err) {
|
||||
var file = rootPath + '/' + req.query._escaped_fragment_ + '.html';
|
||||
|
||||
fs.readFile(file, {encoding: "UTF8"}, function(err, content) {
|
||||
if(!err) {
|
||||
//Non-regex method.//
|
||||
if(content.indexOf("<runonce>") != -1 && content.indexOf("</runonce>") != -1) {
|
||||
content = content.substr(0, content.indexOf("<runonce>")) + content.substr(content.indexOf("</runonce>") + 10, -1);
|
||||
}
|
||||
//Doesn't work? Not sure why. Works in the regex test tools.//
|
||||
//content = content.replace(/<runonce>(.|\n)*?<\x2frunonce>/, " ");
|
||||
|
||||
//Doesn't work? Based on the regex failure above, I think that replace is failing.//
|
||||
var html = indexContent.replace(/<!--CONTENT-->/g, content);
|
||||
|
||||
//console.log(html);
|
||||
//res.send(ejs.render(html, viewArgs));
|
||||
res.send(html);
|
||||
}
|
||||
else console.log("Error reading the content file '" + file + "'. " + err);
|
||||
});
|
||||
}
|
||||
else console.log("Error reading the index.html file. " + err);
|
||||
});
|
||||
}
|
||||
else {
|
||||
//res.render("index.html", {root: rootPath});
|
||||
res.sendFile("index.html", {root: rootPath});
|
||||
}
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/admin', isLoggedIn, function(req, res) {
|
||||
try {
|
||||
//Note: This is for search engines.
|
||||
if(typeof(req.query._escaped_fragment_) !== "undefined") {
|
||||
var viewArgs = {}; //What args to use for a search engine?
|
||||
|
||||
//The DIY method which is somewhat brittle since it relies on <!--CONTENT--> existing in the index file, and it replaces that with the contents of the passed parameter (what is after the #!) for the content html which is inserted into the index file in place of <!--CONTENT-->.
|
||||
fs.readFile(adminPath + '/index.ejs', {encoding: "UTF8"}, function(err, indexContent) {
|
||||
if(!err) {
|
||||
var file = adminPath + '/' + req.query._escaped_fragment_ + '.ejs';
|
||||
|
||||
fs.readFile(file, {encoding: "UTF8"}, function(err, content) {
|
||||
if(!err) {
|
||||
//Non-regex method.//
|
||||
if(content.indexOf("<runonce>") != -1 && content.indexOf("</runonce>") != -1) {
|
||||
content = content.substr(0, content.indexOf("<runonce>")) + content.substr(content.indexOf("</runonce>") + 10, -1);
|
||||
}
|
||||
//Doesn't work? Not sure why. Works in the regex test tools.//
|
||||
//content = content.replace(/<runonce>(.|\n)*?<\x2frunonce>/, " ");
|
||||
|
||||
//Doesn't work? Based on the regex failure above, I think that replace is failing.//
|
||||
var html = indexContent.replace(/<!--CONTENT-->/g, content);
|
||||
|
||||
//console.log(html);
|
||||
res.send(ejs.render(html, viewArgs));
|
||||
}
|
||||
else console.log("Error reading the content file '" + file + "'. " + err);
|
||||
});
|
||||
}
|
||||
else console.log("Error reading the index.ejs file. " + err);
|
||||
});
|
||||
}
|
||||
else {
|
||||
console.log("Looking for index.ejs in " + adminPath);
|
||||
//res.render("index.ejs", {root: adminPath});
|
||||
res.render(path.join(adminPath, req.baseUrl, "index"));
|
||||
}
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
app.use('/ContactUs', function(req, res) {
|
||||
try {
|
||||
var firstName = req.body.FirstName;
|
||||
var lastName = req.body.LastName;
|
||||
var email = req.body.Email;
|
||||
var message = req.body.Text;
|
||||
var params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Contact Us", text: "A user has commented via the Petit Teton website.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\n" + message};
|
||||
|
||||
smtpTransport.sendMail(params, function(error, response) {
|
||||
if(error) {
|
||||
try {
|
||||
console.log("Received an error while sending the contact us email to the admin. " + error);
|
||||
fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (contact us)");}});
|
||||
} catch(e) {console.log(e);}
|
||||
}
|
||||
});
|
||||
|
||||
res.status(200).send('success');
|
||||
} catch(e) {console.log(e);}
|
||||
});
|
||||
|
||||
// =====================================
|
||||
// LOGIN
|
||||
// =====================================
|
||||
// show the login form
|
||||
app.get('/admin/login', function(req, res) {
|
||||
// render the page and pass in any flash data if it exists
|
||||
res.render(path.join(adminPath, req.baseUrl, 'login.ejs'), { message: req.flash('loginMessage') });
|
||||
});
|
||||
|
||||
// process the login form
|
||||
app.post('/admin/login', passport.authenticate('local-login', {successRedirect: '/admin', failureRedirect: '/admin/login', failureFlash: true}));
|
||||
|
||||
// =====================================
|
||||
// SIGNUP
|
||||
// =====================================
|
||||
// show the signup form
|
||||
/* Turned off since only admin users can add admin users.
|
||||
app.get('/admin/signup', function(req, res) {
|
||||
|
||||
// render the page and pass in any flash data if it exists
|
||||
res.render(path.join(adminPath, req.baseUrl, 'signup.ejs'), { message: req.flash('signupMessage') });
|
||||
});
|
||||
|
||||
app.post('/admin/signup', passport.authenticate('local-signup', {successRedirect: '/admin', failureRedirect: '/admin/signup', failureFlash: true}));
|
||||
*/
|
||||
// =====================================
|
||||
// PROFILE SECTION
|
||||
// =====================================
|
||||
// we will want this protected so you have to be logged in to visit
|
||||
// we will use route middleware to verify this (the isLoggedIn function)
|
||||
app.get('/admin/profile', isLoggedIn, function(req, res) {
|
||||
res.render(path.join(adminPath, req.baseUrl, 'profile.ejs'), {
|
||||
user : req.user // get the user out of session and pass to template
|
||||
});
|
||||
});
|
||||
|
||||
// =====================================
|
||||
// LOGOUT
|
||||
// =====================================
|
||||
app.get('/admin/logout', function(req, res) {
|
||||
req.logout();
|
||||
res.redirect('/');
|
||||
});
|
||||
|
||||
// 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";
|
||||
|
||||
//console.log("Checking for an ejs: " + ejs);
|
||||
|
||||
fs.stat(ejs, function(err, stats) {
|
||||
if(!err) {
|
||||
res.render(ejs);
|
||||
}
|
||||
else {
|
||||
res.sendFile(req.path);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/admin/getSubcategories', isLoggedIn, function(req, res) {
|
||||
sequelize.models.Subcategory.findAll({where: {categoryId: req.query.id}, attributes: ['id', 'name', 'visible'], order: [['name', 'DESC'], ['visible', 'DESC']]}).then(function(values) {
|
||||
res.json(values);
|
||||
}).catch(function(error) {
|
||||
console.log(error);
|
||||
res.json("[]");
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/admin/getItems', isLoggedIn, function(req, res) {
|
||||
sequelize.models.Item.findAll({where: {subcategoryId: req.query.id}, attributes: ['id', 'name', 'counts', 'visible', 'subcategoryId'], order: [['name', 'DESC'], ['visible', 'DESC']]}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/admin/getMeasures', isLoggedIn, function(req, res) {
|
||||
sequelize.models.Measure.findAll({attributes: ['id', 'name', "image", 'postfix', 'visible'], order: [['name', 'DESC'], ['visible', 'DESC']]}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/admin/getVenues', isLoggedIn, function(req, res) {
|
||||
sequelize.models.Venue.findAll({attributes: ['id', 'name', 'visible'], order: [['name', 'DESC'], ['visible', 'DESC']]}).then(function(values) {
|
||||
res.json(values);
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/admin/toggleVenueVisibility', isLoggedIn, function(req, res) {
|
||||
sequelize.models.Venue.find({where: {id: req.query.id}, attributes: ['id', 'name', 'visible']}).then(function(venue) {
|
||||
if(venue) {
|
||||
venue.visible = venue.visible ? false : true;
|
||||
venue.save().then(function() {
|
||||
res.json({visible: venue.visible});
|
||||
}).catch(function(error) {
|
||||
res.json({error: error});
|
||||
});
|
||||
}
|
||||
else {
|
||||
res.json({error: "Can't find the venue!"});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// route middleware to make sure a user is logged in
|
||||
function isLoggedIn(req, res, next) {
|
||||
if(req.isAuthenticated()) return next();
|
||||
|
||||
//Redirect if the user isn't logged in.
|
||||
res.redirect('/admin/login');
|
||||
}
|
||||
Reference in New Issue
Block a user