/* jshint node: true */ var ejs = require('ejs'); ejs.open = '[['; ejs.close = ']]'; var config = require('../config.json'), api = require('./lib/api'), auth = require('./lib/auth'), middleware = require('./lib/middleware'), views = require('./lib/views'); var http = require('http'), express = require('express'), bodyParser = require('body-parser'), multer = require('multer'), MongoStore = require('connect-mongo')(express), passport = require('passport'), path = require('path'), mongoose = require('mongoose'); var app = express() var server var DATABASE_URI = process.env.MONGOLAB_URI || ('mongodb://' + config.hostName + '/vvalls') // var site = {} site.init = function(){ mongoose.connect(DATABASE_URI, {}, site.ready); } site.ready = function(){ auth.init() site.setup() site.route() } site.setup = function(){ var SessionStore = new MongoStore({ mongoose_connection: mongoose.connection }) app.set('port', config.port); app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'ejs'); app.use(express.static(path.join(__dirname, '../public'))); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.cookieParser()); app.use(express.session({ key: 'vvalls.sid', secret: 'flibbertigibbet', cookie: { domain: '.' + config.hostName, maxAge: 432000000 }, store: SessionStore })); app.use(bodyParser()); app.use(multer()); app.use(express.query()); app.use(express.csrf()); app.use(express.methodOverride()); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.enable('trust proxy') app.get('env') === 'development' && app.use(express.errorHandler()); // Essential middleware // app.all('*', middleware.enableCORS); app.all('*', middleware.ensureLocals); server = http.createServer(app) server.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); }); // var io = websocket.listen(server) // auth.initSockets(io, SessionStore) } site.route = function () { app.get('/', views.home); app.get('/login', views.modal); app.get('/logout', auth.logout); app.get('/signup', views.modal); app.post('/auth/signin', auth.loggedInLocal); app.post('/auth/signup', auth.signup); app.get('/auth/twitter', auth.login('twitter')); app.get('/auth/twitter/callback', auth.loggedIn('twitter')); app.get('/auth/facebook', auth.login('facebook')); app.get('/auth/facebook/callback', auth.loggedIn('facebook')); app.get('/auth/usernameTaken', auth.views.usernameTaken); app.post('/auth/usernameTaken', auth.usernameFixed); app.get('/auth/password', auth.views.resetPassword); app.post('/auth/password', auth.resetPassword); app.post('/auth/passwordForgot', auth.forgotPassword); app.get('/profile', views.profile) app.get('/profile/edit', views.profile) app.get('/profile/:name', views.profile) app.get('/about', views.docs); app.get('/about/:name/edit', views.docs); app.get('/about/:name', views.docs); app.get('/api/profile', middleware.ensureAuthenticated, api.profile.show) app.put('/api/profile', middleware.ensureAuthenticated, api.profile.update) app.get('/staff', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.staff.index); app.get('/staff/bless', middleware.ensureAuthenticated, views.staff.bless); app.get('/api/docs', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.show) app.post('/api/docs/new', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.create) app.post('/api/docs/edit', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.update) app.delete('/api/docs/destroy', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.docs.destroy) app.get('/layout', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.modal) app.get('/layout/:name', middleware.ensureAuthenticated, middleware.ensureIsStaff, views.builder) app.get('/project', middleware.ensureAuthenticated, views.modal) app.get('/project/new', middleware.ensureAuthenticated, views.modal) app.get('/project/new/:layout', middleware.ensureAuthenticated, views.editor) app.get('/project/:slug', middleware.ensureProject, views.editor) app.get('/api/layout', middleware.ensureAuthenticated, api.layouts.index) app.get('/api/layout/:slug', middleware.ensureAuthenticated, api.layouts.show) app.post('/api/layout/new', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.layouts.create) app.post('/api/layout/edit', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.layouts.update) app.delete('/api/layout/destroy', middleware.ensureAuthenticated, middleware.ensureIsStaff, api.layouts.destroy) app.get('/api/project', middleware.ensureAuthenticated, api.projects.index) app.get('/api/project/:slug', api.projects.show) app.post('/api/project/new', middleware.ensureAuthenticated, api.projects.create) app.post('/api/project/edit', middleware.ensureAuthenticated, api.projects.update) app.delete('/api/project/destroy', middleware.ensureAuthenticated, api.projects.destroy) app.get('/api/media/user', middleware.ensureAuthenticated, api.media.user) app.post('/api/media/new', middleware.ensureAuthenticated, api.media.create) app.post('/api/media/upload', middleware.ensureAuthenticated, api.media.upload) app.delete('/api/media/destroy', middleware.ensureAuthenticated, api.media.destroy) } site.init()