HttpController.coffee 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. DocManager = require "./DocManager"
  2. logger = require "logger-sharelatex"
  3. DocArchive = require "./DocArchiveManager"
  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
  79. unArchiveAllDocs: (req, res, next = (error) ->) ->
  80. project_id = req.params.project_id
  81. logger.log project_id: project_id, "unarchiving all docs"
  82. DocArchive.unArchiveAllDocs project_id, (error) ->
  83. return next(error) if error?
  84. res.send 200