TrackChangesClient.coffee 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. request = require "request"
  2. rclient = require("redis").createClient() # Only works locally for now
  3. {db, ObjectId} = require "../../../../app/js/mongojs"
  4. Settings = require "settings-sharelatex"
  5. module.exports = TrackChangesClient =
  6. flushAndGetCompressedUpdates: (project_id, doc_id, callback = (error, updates) ->) ->
  7. TrackChangesClient.flushDoc project_id, doc_id, (error) ->
  8. return callback(error) if error?
  9. TrackChangesClient.getCompressedUpdates doc_id, callback
  10. flushDoc: (project_id, doc_id, callback = (error) ->) ->
  11. request.post {
  12. url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/flush"
  13. }, (error, response, body) =>
  14. response.statusCode.should.equal 204
  15. callback(error)
  16. flushProject: (project_id, callback = (error) ->) ->
  17. request.post {
  18. url: "http://localhost:3015/project/#{project_id}/flush"
  19. }, (error, response, body) =>
  20. response.statusCode.should.equal 204
  21. callback(error)
  22. getCompressedUpdates: (doc_id, callback = (error, updates) ->) ->
  23. db.docHistory
  24. .find(doc_id: ObjectId(doc_id))
  25. .sort("meta.end_ts": 1)
  26. .toArray callback
  27. getProjectMetaData: (project_id, callback = (error, updates) ->) ->
  28. db.projectHistoryMetaData
  29. .find {
  30. project_id: ObjectId(project_id)
  31. },
  32. (error, projects) ->
  33. callback error, projects[0]
  34. setPreserveHistoryForProject: (project_id, callback = (error) ->) ->
  35. db.projectHistoryMetaData.update {
  36. project_id: ObjectId(project_id)
  37. }, {
  38. $set: { preserveHistory: true }
  39. }, {
  40. upsert: true
  41. }, callback
  42. pushRawUpdates: (project_id, doc_id, updates, callback = (error) ->) ->
  43. rclient.sadd "DocsWithHistoryOps:#{project_id}", doc_id, (error) ->
  44. return callback(error) if error?
  45. rclient.rpush "UncompressedHistoryOps:#{doc_id}", (JSON.stringify(u) for u in updates)..., callback
  46. getDiff: (project_id, doc_id, from, to, callback = (error, diff) ->) ->
  47. request.get {
  48. url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/diff?from=#{from}&to=#{to}"
  49. }, (error, response, body) =>
  50. response.statusCode.should.equal 200
  51. callback null, JSON.parse(body)
  52. getUpdates: (project_id, options, callback = (error, body) ->) ->
  53. request.get {
  54. url: "http://localhost:3015/project/#{project_id}/updates?before=#{options.before}&min_count=#{options.min_count}"
  55. }, (error, response, body) =>
  56. response.statusCode.should.equal 200
  57. callback null, JSON.parse(body)
  58. restoreDoc: (project_id, doc_id, version, user_id, callback = (error) ->) ->
  59. request.post {
  60. url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/version/#{version}/restore"
  61. headers:
  62. "X-User-Id": user_id
  63. }, (error, response, body) =>
  64. response.statusCode.should.equal 204
  65. callback null
  66. archiveProject: (project_id, callback = (error) ->) ->
  67. request.post {
  68. url: "http://localhost:3015/project/#{project_id}/archive"
  69. }, (error, response, body) =>
  70. response.statusCode.should.equal 204
  71. callback(error)
  72. unarchiveProject: (project_id, callback = (error) ->) ->
  73. request.post {
  74. url: "http://localhost:3015/project/#{project_id}/unarchive"
  75. }, (error, response, body) =>
  76. response.statusCode.should.equal 204
  77. callback(error)
  78. buildS3Options: (content, key)->
  79. return {
  80. aws:
  81. key: Settings.filestore.s3.key
  82. secret: Settings.filestore.s3.secret
  83. bucket: Settings.filestore.stores.user_files
  84. timeout: 30 * 1000
  85. json: content
  86. uri:"https://#{Settings.filestore.stores.user_files}.s3.amazonaws.com/#{key}"
  87. }
  88. getS3Doc: (project_id, doc_id, callback = (error, res, body) ->) ->
  89. options = TrackChangesClient.buildS3Options(true, project_id+"/changes-"+doc_id)
  90. request.get options, callback
  91. removeS3Doc: (project_id, doc_id, callback = (error, res, body) ->) ->
  92. options = TrackChangesClient.buildS3Options(true, project_id+"/changes-"+doc_id)
  93. request.del options, callback