crunch-node/app.js

255 lines
7.5 KiB
JavaScript
Raw Permalink Normal View History

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');
2016-01-24 03:53:53 +00:00
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());
2016-01-23 22:29:19 +00:00
// 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);
2016-01-24 03:53:53 +00:00
Photo.getNeedsUpload(function (err, photos) {
res.render('admin-view-uploads', {
successNotice: req.flash('successNotice'),
failureNotice: req.flash('failureNotice'),
user: req.user
});
});
});
}
);
2016-01-23 23:19:37 +00:00
// 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);
2016-01-24 03:53:53 +00:00
Photo.getNeedsBuild(function (err, photos) {
res.render('admin-view-builds', {
successNotice: req.flash('successNotice'),
failureNotice: req.flash('failureNotice'),
user: req.user
});
2016-01-23 23:19:37 +00:00
});
});
}
);
2016-01-24 03:53:53 +00:00
// 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<posts.length; i++) {
posts[i].build(function (err) {
if (err) console.log(err);
});
}
} else {
console.log(err);
}
});
Photo.getNeedsBuild(function(err, photos) {
if (!err) {
for (i=0; i<photos.length; i++) {
photos[i].build(function (err) {
if (err) console.log(err);
});
}
} else {
console.log(err);
}
});
req.flash('successNotice', 'All items built.');
res.redirect(req.header('Referer') || '/admin');
}
);
// Admin dashboard page.
app.get('/admin',
function(req, res, next) {
Post.countPosts(function (err, postCount) {
Category.countCategories(function (err, categoryCount) {
Photo.countPhotos(function (err, photoCount) {
Post.getNeedsBuild(function (err, buildPosts) {
Photo.getNeedsBuild(function (err, buildPhotos) {
Post.getNeedsUpload(function (err, uploadPosts) {
Photo.getNeedsUpload(function (err, uploadPhotos) {
res.render('admin-dashboard', {
successNotice: req.flash('successNotice'),
failureNotice: req.flash('failureNotice'),
categories: categoryCount,
posts: postCount,
galleries: "###",
photos: photoCount,
tags: "TBD",
buildCount: buildPosts.length + buildPhotos.length,
uploadCount: uploadPosts.length + uploadPhotos.length,
user: req.user
});
});
});
});
});
});
});
});
}
);
// Have to have some sort of home page.
app.get('/', function(req, res, next) {
res.render('admin-index', { title: 'AMDavidson.com', user: req.user });
}
);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.locals.pretty = true;
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('admin-error', {
message: err.message,
error: err,
user: req.user
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
user: req.user,
error: {}
});
});
app.set('port', process.env.PORT || 3000)
var server = require('http').createServer(app)
process.on('uncaughtException', function (exception) {
console.log(exception);
});
MongoClient.connect('mongodb://localhost/crunch', function(err, database) {
if (!err) {
global.db = database;
server.listen(app.get('port'), function() {
console.log("Server listening on port " + app.get('port'));
});
}
});