DocstoreManager.coffee 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. request = require("request").defaults(jar: false)
  2. logger = require "logger-sharelatex"
  3. settings = require "settings-sharelatex"
  4. module.exports = DocstoreManager =
  5. deleteDoc: (project_id, doc_id, callback = (error) ->) ->
  6. logger.log project_id: project_id, doc_id: doc_id, "deleting doc in docstore api"
  7. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  8. request.del url, (error, res, body) ->
  9. return callback(error) if error?
  10. if 200 <= res.statusCode < 300
  11. callback(null)
  12. else
  13. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  14. logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc in docstore"
  15. callback(error)
  16. getAllDocs: (project_id, callback = (error) ->) ->
  17. logger.log project_id: project_id, "getting all docs for project in docstore api"
  18. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc"
  19. request.get {
  20. url: url
  21. json: true
  22. }, (error, res, docs) ->
  23. return callback(error) if error?
  24. if 200 <= res.statusCode < 300
  25. callback(null, docs)
  26. else
  27. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  28. logger.error err: error, project_id: project_id, "error getting all docs from docstore"
  29. callback(error)
  30. getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev) ->) ->
  31. if typeof(options) == "function"
  32. callback = options
  33. options = {}
  34. logger.log project_id: project_id, doc_id: doc_id, options: options, "getting doc in docstore api"
  35. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  36. if options.include_deleted
  37. url += "?include_deleted=true"
  38. request.get {
  39. url: url
  40. json: true
  41. }, (error, res, doc) ->
  42. return callback(error) if error?
  43. if 200 <= res.statusCode < 300
  44. logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api"
  45. callback(null, doc.lines, doc.rev)
  46. else
  47. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  48. logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore"
  49. callback(error)
  50. updateDoc: (project_id, doc_id, lines, callback = (error, modified, rev) ->) ->
  51. logger.log project_id: project_id, doc_id: doc_id, "updating doc in docstore api"
  52. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  53. request.post {
  54. url: url
  55. json:
  56. lines: lines
  57. }, (error, res, result) ->
  58. return callback(error) if error?
  59. if 200 <= res.statusCode < 300
  60. logger.log project_id: project_id, doc_id: doc_id, "update doc in docstore url finished"
  61. callback(null, result.modified, result.rev)
  62. else
  63. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  64. logger.error err: error, project_id: project_id, doc_id: doc_id, "error updating doc in docstore"
  65. callback(error)
  66. archiveProject: (project_id, callback)->
  67. url = "#{settings.apis.docstore.url}/project/#{project_id}/archive"
  68. logger.log project_id:project_id, "archiving project in docstore"
  69. request.post url, (err, res, docs) ->
  70. if err?
  71. logger.err err:err, project_id:project_id, "error archving project in docstore"
  72. return callback(err)
  73. if 200 <= res.statusCode < 300
  74. callback()
  75. else
  76. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  77. logger.err err: error, project_id: project_id, "error archiving project in docstore"
  78. return callback(error)
  79. unarchiveProject: (project_id, callback)->
  80. url = "#{settings.apis.docstore.url}/project/#{project_id}/unarchive"
  81. logger.log project_id:project_id, "unarchiving project in docstore"
  82. request.post url, (err, res, docs) ->
  83. if err?
  84. logger.err err:err, project_id:project_id, "error unarchiving project in docstore"
  85. return callback(err)
  86. if 200 <= res.statusCode < 300
  87. callback()
  88. else
  89. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  90. logger.err err: error, project_id: project_id, "error unarchiving project in docstore"
  91. return callback(error)