habitica/src/server/index.coffee

88 lines
2.7 KiB
CoffeeScript
Raw Normal View History

http = require 'http'
path = require 'path'
express = require 'express'
gzippo = require 'gzippo'
derby = require 'derby'
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'])
2013-02-11 16:22:24 +00:00
racer.ioClient.set('reconnection limit', 300000) # max reconect timeout to 5 minutes
racer.set('bundleTimeout', 40000)
2013-02-04 06:21:03 +00:00
#unless process.env.NODE_ENV == 'production'
# racer.use(racer.logPlugin)
# derby.use(derby.logPlugin)
## SERVER CONFIGURATION ##
expressApp = express()
server = http.createServer expressApp
module.exports = server
derby.use(require 'racer-db-mongo')
store = derby.createStore
2012-12-05 00:20:46 +00:00
db: {type: 'Mongo', uri: process.env.NODE_DB_URI, safe:true}
listen: server
ONE_YEAR = 1000 * 60 * 60 * 24 * 365
TWO_WEEKS = 1000 * 60 * 60 * 24 * 14
root = path.dirname path.dirname __dirname
publicPath = path.join root, 'public'
# Authentication setup
strategies =
facebook:
strategy: require("passport-facebook").Strategy
conf:
clientID: process.env.FACEBOOK_KEY
clientSecret: process.env.FACEBOOK_SECRET
options =
2013-01-03 08:12:36 +00:00
domain: process.env.BASE_URL || 'http://localhost:3000'
allowPurl: true
schema: require('../app/character').newUserObject()
customAccessControl: habitrpgStore.customAccessControl
2012-11-16 16:00:24 +00:00
mongo_store = new MongoStore {url: process.env.NODE_DB_URI}, ->
expressApp
.use express.favicon()
# Gzip static files and serve from memory
.use gzippo.staticGzip publicPath, maxAge: ONE_YEAR
# Gzip dynamically rendered content
.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
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 middleware.splash
# Adds req.getModel method
.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)
priv.routes(expressApp)
# Errors
expressApp.all '*', (req) ->
throw "404: #{req.url}"