HttpController.coffee 2.8 KB

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