crunch-node/app.js

202 lines
5.7 KiB
JavaScript
Raw 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 markdown = require( "markdown" ).markdown;
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');
User = require('./user.js');
Category = require('./category.js');
Static = require('./static.js');
var database = require('./db.js');
2015-12-01 03:06:36 +00:00
var genPhotos = require('./genPhotos.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);
res.render('admin-view-uploads', {
successNotice: req.flash('successNotice'),
failureNotice: req.flash('failureNotice'),
posts: posts,
user: req.user
});
});
}
);
// Admin dashboard page.
app.get('/admin',
function(req, res, next) {
Post.countPosts(function (err, postCount) {
Category.countCategories(function (err, categoryCount) {
Post.getLastBuildDate(function (err, lastBuildDate) {
Post.getLastUploadDate( function (err, lastUploadDate) {
res.render('admin-dashboard', {
successNotice: req.flash('successNotice'),
failureNotice: req.flash('failureNotice'),
categories: categoryCount,
posts: postCount,
galleries: "###",
photos: "###",
tags: "###",
regenerateDate: moment(lastBuildDate).format("YYYY-MM-DD HH:mm"),
uploadDate: moment(lastUploadDate).format("YYYY-MM-DD HH:mm"),
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'));
});
}
});