app.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. Metrics = require "metrics-sharelatex"
  2. Metrics.initialize("docstore")
  3. Settings = require "settings-sharelatex"
  4. logger = require "logger-sharelatex"
  5. express = require "express"
  6. bodyParser = require "body-parser"
  7. Errors = require "./app/js/Errors"
  8. HttpController = require "./app/js/HttpController"
  9. Path = require "path"
  10. logger.initialize("docstore")
  11. Metrics.event_loop?.monitor(logger)
  12. app = express()
  13. app.use Metrics.http.monitor(logger)
  14. Metrics.injectMetricsRoute(app)
  15. app.param 'project_id', (req, res, next, project_id) ->
  16. if project_id?.match /^[0-9a-f]{24}$/
  17. next()
  18. else
  19. next new Error("invalid project id")
  20. app.param 'doc_id', (req, res, next, doc_id) ->
  21. if doc_id?.match /^[0-9a-f]{24}$/
  22. next()
  23. else
  24. next new Error("invalid doc id")
  25. Metrics.injectMetricsRoute(app)
  26. app.get '/project/:project_id/doc', HttpController.getAllDocs
  27. app.get '/project/:project_id/ranges', HttpController.getAllRanges
  28. app.get '/project/:project_id/doc/:doc_id', HttpController.getDoc
  29. app.get '/project/:project_id/doc/:doc_id/raw', HttpController.getRawDoc
  30. # Add 64kb overhead for the JSON encoding, and double the size to allow for ranges in the json payload
  31. app.post '/project/:project_id/doc/:doc_id', bodyParser.json(limit: (Settings.max_doc_length + 64 * 1024) * 2), HttpController.updateDoc
  32. app.del '/project/:project_id/doc/:doc_id', HttpController.deleteDoc
  33. app.post '/project/:project_id/archive', HttpController.archiveAllDocs
  34. app.post '/project/:project_id/unarchive', HttpController.unArchiveAllDocs
  35. app.post '/project/:project_id/destroy', HttpController.destroyAllDocs
  36. app.get "/health_check", HttpController.healthCheck
  37. app.get '/status', (req, res)->
  38. res.send('docstore is alive')
  39. app.use (error, req, res, next) ->
  40. logger.error err: error, req:req, "request errored"
  41. if error instanceof Errors.NotFoundError
  42. res.send 404
  43. else
  44. res.send(500, "Oops, something went wrong")
  45. port = Settings.internal.docstore.port
  46. host = Settings.internal.docstore.host
  47. if !module.parent # Called directly
  48. app.listen port, host, (error) ->
  49. throw error if error?
  50. logger.info "Docstore starting up, listening on #{host}:#{port}"
  51. module.exports = app