var express = require('express'); var flash = require('express-flash'); var path = require('path'); var passport = require('passport'); var Strategy = require('passport-local').Strategy; var async = require('async'); var fs = require('fs'); var moment = require("moment"); // Make ourselves a nice little express app. var app = express(); // Get connected to our database var MongoClient = require('mongodb').MongoClient; // Include some other JS Post = require('./post.js'); Photo = require('./photo.js'); User = require('./user.js'); Category = require('./category.js'); Static = require('./static.js'); // Get config variables var config = require('./config.js').config; // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(require('serve-favicon')(path.join(__dirname, 'public', // 'favicon.ico'))); app.use(flash()); app.use(require('morgan')('dev')); app.use(require('body-parser').urlencoded({ extended: true })); app.use(require('cookie-parser')()); var session = require('express-session'); var RedisStore = require('connect-redis')(session); app.use(session({ store: new RedisStore({ host: 'localhost', port: 6379, }), secret: 'amdasdfasdf', resave: true, saveUninitialized: true })); app.use(express.static(path.join(__dirname, 'public'))); // Setup authentication via twitter. passport.use(new Strategy( function(username, password, done) { User.verify(username, password, function(err, user) { console.log("Verifying user: " + username); if (!user) { return done(null, false); } return done(null, user); }); } )); passport.serializeUser(function(user, done) { // console.log("Serializing user: "+user.username); done(null, user.username); }); passport.deserializeUser(function(username, done) { // console.log("Deserializing user: "+username); User.getByUsername(username, function (err, user) { if (!user) { return done(false); } done(null, user); }); }); app.use(passport.initialize()); app.use(passport.session()); // Require logins for all admin pages other pages have to be handled separately. app.all('/admin*', require('connect-ensure-login').ensureLoggedIn()); // Pull in all our external routes. require('./routes-post.js')(app); require('./routes-photo.js')(app); require('./routes-preview.js')(app); // User management routing app.get('/login', function(req, res) { res.render('admin-login', {user: req.user}); }); app.post('/login', passport.authenticate('local', { successReturnToOrRedirect: '/admin', failureRedirect: '/login' }) ); app.get('/logout', function(req, res) { req.logout(); res.redirect('/'); } ); // Admin page to view all the items that need to be uploaded. app.get('/admin/view/uploads', function(req, res, next) { Post.getNeedsUpload(function (err, posts) { if (err) console.log(err); Photo.getNeedsUpload(function (err, photos) { res.render('admin-view-uploads', { successNotice: req.flash('successNotice'), failureNotice: req.flash('failureNotice'), user: req.user }); }); }); } ); // Admin page to view all the items that need to be built. app.get('/admin/view/builds', function(req, res, next) { Post.getNeedsBuild(function (err, posts) { if (err) console.log(err); Photo.getNeedsBuild(function (err, photos) { res.render('admin-view-builds', { successNotice: req.flash('successNotice'), failureNotice: req.flash('failureNotice'), user: req.user }); }); }); } ); // Admin page to build all unbuilt items app.get('/admin/build', function(req, res, next) { Post.getNeedsBuild(function (err, posts) { if (!err) { for (i=0; i