HttpController.coffee 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. DocManager = require "./DocManager"
  2. logger = require "logger-sharelatex"
  3. DocArchive = require "./DocArchive"
  4. module.exports = HttpController =
  5. getDoc: (req, res, next = (error) ->) ->
  6. project_id = req.params.project_id
  7. doc_id = req.params.doc_id
  8. include_deleted = req.query?.include_deleted == "true"
  9. logger.log project_id: project_id, doc_id: doc_id, "getting doc"
  10. DocManager.getDoc project_id, doc_id, (error, doc) ->
  11. return next(error) if error?
  12. logger.log doc: doc, "got doc"
  13. if !doc?
  14. res.send 404
  15. else if doc.deleted && !include_deleted
  16. res.send 404
  17. else
  18. res.json HttpController._buildDocView(doc)
  19. getRawDoc: (req, res, next = (error)->)->
  20. project_id = req.params.project_id
  21. doc_id = req.params.doc_id
  22. logger.log project_id: project_id, doc_id: doc_id, "getting raw doc"
  23. DocManager.getDoc project_id, doc_id, (error, doc) ->
  24. return next(error) if error?
  25. if !doc?
  26. res.send 404
  27. else
  28. res.setHeader('content-type', 'text/plain')
  29. res.send HttpController._buildRawDocView(doc)
  30. getAllDocs: (req, res, next = (error) ->) ->
  31. project_id = req.params.project_id
  32. logger.log project_id: project_id, "getting all docs"
  33. DocManager.getAllDocs project_id, (error, docs = []) ->
  34. return next(error) if error?
  35. docViews = []
  36. for doc in docs
  37. if doc? # There can end up being null docs for some reason :( (probably a race condition)
  38. docViews.push HttpController._buildDocView(doc)
  39. else
  40. logger.error err: new Error("null doc"), project_id: project_id, "encountered null doc"
  41. res.json docViews
  42. updateDoc: (req, res, next = (error) ->) ->
  43. project_id = req.params.project_id
  44. doc_id = req.params.doc_id
  45. lines = req.body?.lines
  46. if !lines? or lines not instanceof Array
  47. logger.error project_id: project_id, doc_id: doc_id, "no doc lines provided"
  48. res.send 400 # Bad Request
  49. return
  50. logger.log project_id: project_id, doc_id: doc_id, "got http request to update doc"
  51. DocManager.updateDoc project_id, doc_id, lines, (error, modified, rev) ->
  52. return next(error) if error?
  53. res.json {
  54. modified: modified
  55. rev: rev
  56. }
  57. deleteDoc: (req, res, next = (error) ->) ->
  58. project_id = req.params.project_id
  59. doc_id = req.params.doc_id
  60. logger.log project_id: project_id, doc_id: doc_id, "deleting doc"
  61. DocManager.deleteDoc project_id, doc_id, (error) ->
  62. return next(error) if error?
  63. res.send 204
  64. _buildDocView: (doc) ->
  65. return {
  66. _id: doc._id?.toString()
  67. lines: doc.lines
  68. rev: doc.rev
  69. deleted: !!doc.deleted
  70. }
  71. _buildRawDocView: (doc)->
  72. return (doc?.lines or []).join("\n")
  73. archiveAllDocs: (req, res, next = (error) ->) ->
  74. project_id = req.params.project_id
  75. logger.log project_id: project_id, "archiving all docs"
  76. DocArchive.archiveAllDocs project_id, (error) ->
  77. return next(error) if error?
  78. res.send 204