Server.coffee 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. Path = require "path"
  2. express = require('express')
  3. Settings = require('settings-sharelatex')
  4. logger = require 'logger-sharelatex'
  5. metrics = require('./Metrics')
  6. crawlerLogger = require('./CrawlerLogger')
  7. expressLocals = require('./ExpressLocals')
  8. socketIoConfig = require('./SocketIoConfig')
  9. soareqid = require('soa-req-id')
  10. Router = require('../router')
  11. metrics.inc("startup")
  12. redis = require('redis')
  13. RedisStore = require('connect-redis')(express)
  14. SessionSockets = require('session.socket.io')
  15. sessionStore = new RedisStore(host:Settings.redis.web.host, port:Settings.redis.web.port, pass:Settings.redis.web.password)
  16. cookieParser = express.cookieParser(Settings.security.sessionSecret)
  17. oneDayInMilliseconds = 86400000
  18. ReferalConnect = require('../Features/Referal/ReferalConnect')
  19. metrics.mongodb.monitor(Path.resolve(__dirname + "/../../../node_modules/mongojs/node_modules/mongodb"), logger)
  20. metrics.mongodb.monitor(Path.resolve(__dirname + "/../../../node_modules/mongoose/node_modules/mongodb"), logger)
  21. Settings.editorIsOpen ||= true
  22. if Settings.cacheStaticAssets
  23. staticCacheAge = (oneDayInMilliseconds * 365)
  24. else
  25. staticCacheAge = 0
  26. app = express()
  27. cookieKey = "sharelatex.sid"
  28. cookieSessionLength = 5 * oneDayInMilliseconds
  29. csrf = express.csrf()
  30. ignoreCsrfRoutes = []
  31. app.ignoreCsrf = (method, route) ->
  32. ignoreCsrfRoutes.push new express.Route(method, route)
  33. app.configure ()->
  34. app.use express.static(__dirname + '/../../../public', {maxAge: staticCacheAge })
  35. app.set 'views', __dirname + '/../../views'
  36. app.set 'view engine', 'jade'
  37. app.use express.bodyParser(uploadDir: Settings.path.uploadFolder)
  38. app.use cookieParser
  39. app.use express.session
  40. proxy: true
  41. cookie:
  42. maxAge: cookieSessionLength
  43. secure: Settings.secureCookie
  44. store: sessionStore
  45. key: cookieKey
  46. # Measure expiry from last request, not last login
  47. app.use (req, res, next) ->
  48. req.session.expires = Date.now() + cookieSessionLength
  49. next()
  50. app.use (req, res, next) ->
  51. for route in ignoreCsrfRoutes
  52. if route.method == req.method?.toLowerCase() and route.match(req.path)
  53. return next()
  54. csrf(req, res, next)
  55. app.use ReferalConnect.use
  56. app.use express.methodOverride()
  57. expressLocals(app)
  58. app.configure 'production', ->
  59. logger.info "Production Enviroment"
  60. app.enable('view cache')
  61. app.use metrics.http.monitor(logger)
  62. app.use (req, res, next)->
  63. metrics.inc "http-request"
  64. crawlerLogger.log(req)
  65. next()
  66. app.use (req, res, next) ->
  67. if !Settings.editorIsOpen
  68. res.status(503)
  69. res.render("general/closed", {title:"Maintenance"})
  70. else
  71. next()
  72. app.get "/status", (req, res)->
  73. res.send("web sharelatex is alive")
  74. req.session.destroy()
  75. logger.info ("creating HTTP server").yellow
  76. server = require('http').createServer(app)
  77. io = require('socket.io').listen(server)
  78. sessionSockets = new SessionSockets(io, sessionStore, cookieParser, cookieKey)
  79. router = new Router(app, io, sessionSockets)
  80. socketIoConfig.configure(io)
  81. module.exports =
  82. io: io
  83. app: app
  84. server: server