From 3372750f948c46cea78719fab2da1546c652b667 Mon Sep 17 00:00:00 2001 From: Daniel Saewitz Date: Mon, 18 Feb 2013 16:00:46 -0500 Subject: [PATCH 1/5] Move large middleware to separate file for cleanliness --- src/server/index.coffee | 72 +++++++++++------------------------- src/server/middleware.coffee | 17 +++++++++ 2 files changed, 38 insertions(+), 51 deletions(-) create mode 100644 src/server/middleware.coffee diff --git a/src/server/index.coffee b/src/server/index.coffee index 4a5e1ff72d..5b8f39f1da 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -8,7 +8,8 @@ serverError = require './serverError' MongoStore = require('connect-mongo')(express) auth = require 'derby-auth' priv = require './private' -habitrpgStore = require('./store') +habitrpgStore = require './store' +middleware = require './middleware' ## RACER CONFIGURATION ## @@ -51,65 +52,34 @@ options = mongo_store = new MongoStore {url: process.env.NODE_DB_URI}, -> expressApp - #.use (req, res, next) -> - # if toobusy() - # return res.redirect 307, '/500.html' - # else - # next() - - .use(express.favicon()) + .use express.favicon() # Gzip static files and serve from memory - .use(gzippo.staticGzip publicPath, maxAge: ONE_YEAR) + .use gzippo.staticGzip publicPath, maxAge: ONE_YEAR # Gzip dynamically rendered content - .use(express.compress()) - - # Uncomment to add form data parsing support - .use(express.bodyParser()) - .use(express.methodOverride()) - + .use express.compress() + .use express.bodyParser() + .use express.methodOverride() # Uncomment and supply secret to add Derby session handling # Derby session middleware creates req.session and socket.io sessions - .use(express.cookieParser()) - .use(store.sessionMiddleware + .use express.cookieParser()) + .use store.sessionMiddleware secret: process.env.SESSION_SECRET || 'YOUR SECRET HERE' cookie: {maxAge: TWO_WEEKS} # defaults to 2 weeks? aka, can delete this line? store: mongo_store - ) - - #show splash page for newcomers - .use (req, res, next) -> - # This was an API call, not a page load - return next() if req.is('json') - - if !req.session.userId? and !req.query?.play? - res.redirect('/splash.html') - else - next() - + # Show splash page for newcomers + .use middleware.splash # Adds req.getModel method - .use(store.modelMiddleware()) - # Middelware can be inserted after the modelMiddleware and before - # the app router to pass server accessible data to a model - .use(priv.middleware) - - # HabitRPG Custom Middleware - .use (req, res, next) -> - model = req.getModel() - _view = model.get('_view') || {} - ## Set _mobileDevice to true or false so view can exclude portions from mobile device - _view.mobileDevice = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header 'User-Agent') - _view.nodeEnv = process.env.NODE_ENV - model.set '_view', _view - next() - - .use(auth(store, strategies, options)) + .use store.modelMiddleware() + .use priv.middleware + .use middleware.view + .use auth(store, strategies, options) # Creates an express middleware from the app's routes - .use(app.router()) - .use('/v1', require('./api').middleware) - .use(require('./static').middleware) - .use(require('./deprecated').middleware) - .use(expressApp.router) - .use(serverError root) + .use app.router() + .use '/v1', require('./api').middleware + .use require('./static').middleware + .use require('./deprecated').middleware + .use expressApp.router + .use serverError(root) priv.routes(expressApp) diff --git a/src/server/middleware.coffee b/src/server/middleware.coffee new file mode 100644 index 0000000000..51475885d5 --- /dev/null +++ b/src/server/middleware.coffee @@ -0,0 +1,17 @@ +module.exports.splash = (req, res, next) -> + # This was an API call, not a page load + return next() if req.is('json') + + if !req.session.userId? and !req.query?.play? + res.redirect('/splash.html') + else + next() + +module.exports.view = (req, res, next) -> + model = req.getModel() + _view = model.get('_view') || {} + ## Set _mobileDevice to true or false so view can exclude portions from mobile device + _view.mobileDevice = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header 'User-Agent') + _view.nodeEnv = process.env.NODE_ENV + model.set '_view', _view + next() From 8c41425462a3612cb27ecbc7abc00a6118fc80e0 Mon Sep 17 00:00:00 2001 From: Daniel Saewitz Date: Mon, 18 Feb 2013 16:06:52 -0500 Subject: [PATCH 2/5] Cleanup middleware --- src/server/index.coffee | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/server/index.coffee b/src/server/index.coffee index 5b8f39f1da..202fc2038a 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -52,37 +52,38 @@ options = mongo_store = new MongoStore {url: process.env.NODE_DB_URI}, -> expressApp - .use express.favicon() + .use(express.favicon()) # Gzip static files and serve from memory - .use gzippo.staticGzip publicPath, maxAge: ONE_YEAR + .use(gzippo.staticGzip(publicPath, maxAge: ONE_YEAR)) # Gzip dynamically rendered content - .use express.compress() - .use express.bodyParser() - .use express.methodOverride() + .use(express.compress()) + .use(express.bodyParser()) + .use(express.methodOverride()) # Uncomment and supply secret to add Derby session handling # Derby session middleware creates req.session and socket.io sessions - .use express.cookieParser()) - .use store.sessionMiddleware + .use(express.cookieParser()) + .use(store.sessionMiddleware secret: process.env.SESSION_SECRET || 'YOUR SECRET HERE' - cookie: {maxAge: TWO_WEEKS} # defaults to 2 weeks? aka, can delete this line? + cookie: { maxAge: TWO_WEEKS } # defaults to 2 weeks? aka, can delete this line? store: mongo_store + ) # Show splash page for newcomers - .use middleware.splash + .use(middleware.splash) # Adds req.getModel method - .use store.modelMiddleware() - .use priv.middleware - .use middleware.view - .use auth(store, strategies, options) + .use(store.modelMiddleware()) + .use(priv.middleware) + .use(middleware.view) + .use(auth(store, strategies, options)) # Creates an express middleware from the app's routes - .use app.router() - .use '/v1', require('./api').middleware - .use require('./static').middleware - .use require('./deprecated').middleware - .use expressApp.router - .use serverError(root) + .use(app.router()) + .use('/v1', require('./api').middleware) + .use(require('./static').middleware) + .use(require('./deprecated').middleware) + .use(expressApp.router) + .use(serverError(root)) priv.routes(expressApp) # Errors expressApp.all '*', (req) -> - throw "404: #{req.url}" \ No newline at end of file + throw "404: #{req.url}" From 52e5b42ad5c07cfd4c1d374d91bc46a8b3dccbaf Mon Sep 17 00:00:00 2001 From: Daniel Saewitz Date: Mon, 18 Feb 2013 16:09:05 -0500 Subject: [PATCH 3/5] Reorder some code around --- src/server/index.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/index.coffee b/src/server/index.coffee index 202fc2038a..42187a8e85 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -3,17 +3,17 @@ path = require 'path' express = require 'express' gzippo = require 'gzippo' derby = require 'derby' +racer = require 'racer' +auth = require 'derby-auth' app = require '../app' serverError = require './serverError' MongoStore = require('connect-mongo')(express) -auth = require 'derby-auth' priv = require './private' habitrpgStore = require './store' middleware = require './middleware' ## RACER CONFIGURATION ## -racer = require 'racer' racer.io.set('transports', ['xhr-polling']) racer.ioClient.set('reconnection limit', 300000) # max reconect timeout to 5 minutes racer.set('bundleTimeout', 40000) @@ -27,7 +27,7 @@ expressApp = express() server = http.createServer expressApp module.exports = server -derby.use(require 'racer-db-mongo') +derby.use require('racer-db-mongo') store = derby.createStore db: {type: 'Mongo', uri: process.env.NODE_DB_URI, safe:true} listen: server From e4622803c93419d37f614a4c1f88c0242e7ef7c9 Mon Sep 17 00:00:00 2001 From: Daniel Saewitz Date: Mon, 18 Feb 2013 20:14:43 -0500 Subject: [PATCH 4/5] Remove serverRoutes --- src/server/index.coffee | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/server/index.coffee b/src/server/index.coffee index f96711d18a..ad845d0599 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -11,7 +11,6 @@ MongoStore = require('connect-mongo')(express) priv = require './private' habitrpgStore = require './store' middleware = require './middleware' -serverRoutes = require './serverRoutes' ## RACER CONFIGURATION ## @@ -77,8 +76,6 @@ mongo_store = new MongoStore {url: process.env.NODE_DB_URI}, -> .use(priv.middleware) .use(middleware.view) .use(auth.middleware(strategies, options)) - - .use(serverRoutes.API()) # Creates an express middleware from the app's routes .use(app.router()) .use('/v1', require('./api').middleware) From 40036109ef800947247ad0340afba2f7a8625ff4 Mon Sep 17 00:00:00 2001 From: Daniel Saewitz Date: Tue, 19 Feb 2013 21:00:29 -0500 Subject: [PATCH 5/5] Fix merge errors --- src/server/index.coffee | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/server/index.coffee b/src/server/index.coffee index 1d218d632f..ad845d0599 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -9,12 +9,8 @@ app = require '../app' serverError = require './serverError' MongoStore = require('connect-mongo')(express) priv = require './private' -<<<<<<< HEAD habitrpgStore = require './store' middleware = require './middleware' -======= -habitrpgStore = require('./store') ->>>>>>> b1f7c3cdfa9363b26b59f6e651ccf0d680313773 ## RACER CONFIGURATION ##