2014-01-27 15:36:35 -08:00
express = require ' express '
path = require ' path '
2014-02-04 23:08:20 +01:00
authentication = require ' passport '
2014-01-27 15:36:35 -08:00
useragent = require ' express-useragent '
fs = require ' graceful-fs '
2014-02-04 21:30:05 +01:00
database = require ' ./server/commons/database '
2014-02-04 22:29:13 +01:00
baseRoute = require ' ./server/routes/base '
2014-01-27 15:36:35 -08:00
user = require ' ./server/users/user_handler '
logging = require ' ./server/commons/logging '
config = require ' ./server_config '
###Middleware setup functions implementation###
2014-03-03 08:13:53 -08:00
# 2014-03-03: Try not using this and see if it's still a problem
#setupRequestTimeoutMiddleware = (app) ->
# app.use (req, res, next) ->
# req.setTimeout 15000, ->
# console.log 'timed out!'
# req.abort()
# self.emit('pass',message)
# next()
2014-01-27 15:36:35 -08:00
2014-03-15 23:08:22 +09:00
productionLogging = (tokens, req, res) ->
2014-03-02 01:48:21 +05:30
status = res . statusCode
2014-03-03 08:10:36 -08:00
color = 32
if status >= 500 then color = 31
else if status >= 400 then color = 33
else if status >= 300 then color = 36
elapsed = ( new Date ( ) ) - req . _startTime
elapsedColor = if elapsed < 500 then 90 else 31
if ( status isnt 200 and status isnt 304 ) or elapsed > 500
return " \x 1b[90m #{ req . method } #{ req . originalUrl } \x 1b[ #{ color } m #{ res . statusCode } \x 1b[ #{ elapsedColor } m #{ elapsed } ms \x 1b[0m "
null
2014-03-02 01:48:21 +05:30
2014-01-27 15:36:35 -08:00
setupExpressMiddleware = (app) ->
2014-03-03 08:13:53 -08:00
#setupRequestTimeoutMiddleware app
2014-03-03 08:10:36 -08:00
if config . isProduction
express . logger . format ( ' prod ' , productionLogging )
app . use ( express . logger ( ' prod ' ) )
else
app . use ( express . logger ( ' dev ' ) )
2014-01-27 15:36:35 -08:00
app . use ( express . static ( path . join ( __dirname , ' public ' ) ) )
app . use ( useragent . express ( ) )
app . use ( express . favicon ( ) )
app . use ( express . cookieParser ( config . cookie_secret ) )
app . use ( express . bodyParser ( ) )
app . use ( express . methodOverride ( ) )
app . use ( express . cookieSession ( { secret : ' defenestrate ' } ) )
2014-03-03 18:50:59 -08:00
#app.use(express.compress()) if config.isProduction # just let Cloudflare do it
2014-01-27 15:36:35 -08:00
setupPassportMiddleware = (app) ->
2014-02-04 23:08:20 +01:00
app . use ( authentication . initialize ( ) )
app . use ( authentication . session ( ) )
2014-01-27 15:36:35 -08:00
setupOneSecondDelayMiddlware = (app) ->
if ( config . slow_down )
app . use ( (req, res, next) -> setTimeout ( ( -> next ( ) ) , 1000 ) )
setupMiddlewareToSendOldBrowserWarningWhenPlayersViewLevelDirectly = (app) ->
isOldBrowser = (req) ->
# https://github.com/biggora/express-useragent/blob/master/lib/express-useragent.js
return false unless ua = req . useragent
return true if ua . isiPad or ua . isiPod or ua . isiPhone or ua . isOpera
return false unless ua and ua . Browser in [ " Chrome " , " Safari " , " Firefox " , " IE " ] and ua . Version
b = ua . Browser
v = parseInt ua . Version . split ( ' . ' ) [ 0 ] , 10
return true if b is ' Chrome ' and v < 17
return true if b is ' Safari ' and v < 6
return true if b is ' Firefox ' and v < 21
return true if b is ' IE ' and v < 10
false
app . use ' /play/ ' , (req, res, next) ->
return next ( ) if req . query [ ' try-old-browser-anyway ' ] or not isOldBrowser req
res . sendfile ( path . join ( __dirname , ' public ' , ' index_old_browser.html ' ) )
exports.setupMiddleware = (app) ->
setupMiddlewareToSendOldBrowserWarningWhenPlayersViewLevelDirectly app
setupExpressMiddleware app
setupPassportMiddleware app
setupOneSecondDelayMiddlware app
###Routing function implementations###
setupFallbackRouteToIndex = (app) ->
2014-03-12 10:07:18 -07:00
app . all ' * ' , (req, res) ->
2014-01-27 15:36:35 -08:00
res . sendfile path . join ( __dirname , ' public ' , ' index.html ' )
setupFacebookCrossDomainCommunicationRoute = (app) ->
app . get ' /channel.html ' , (req, res) ->
res . sendfile path . join ( __dirname , ' public ' , ' channel.html ' )
exports.setupRoutes = (app) ->
app . use app . router
2014-02-05 09:42:25 -08:00
2014-02-04 22:29:13 +01:00
baseRoute . setup app
2014-01-27 15:36:35 -08:00
setupFacebookCrossDomainCommunicationRoute app
setupFallbackRouteToIndex app
###Miscellaneous configuration functions###
exports.setupLogging = ->
logging . setup ( )
exports.connectToDatabase = ->
2014-02-04 21:30:05 +01:00
database . connect ( )
2014-01-27 15:36:35 -08:00
exports.setupMailchimp = ->
mcapi = require ' mailchimp-api '
mc = new mcapi . Mailchimp ( config . mail . mailchimpAPIKey )
GLOBAL.mc = mc
exports.setExpressConfigurationOptions = (app) ->
app . set ( ' port ' , config . port )
app . set ( ' views ' , __dirname + ' /app/views ' )
app . set ( ' view engine ' , ' jade ' )
app . set ( ' view options ' , { layout: false } )
2014-03-03 16:19:35 -08:00
app . set ( ' env ' , if config . isProduction then ' production ' else ' development ' )
app . set ( ' json spaces ' , 0 )