TpdsUpdateSender.coffee 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. settings = require('settings-sharelatex')
  2. logger = require('logger-sharelatex')
  3. slReqIdHelper = require('soa-req-id')
  4. path = require('path')
  5. Project = require('../../models/Project').Project
  6. keys = require('../../infrastructure/Keys')
  7. metrics = require("../../infrastructure/Metrics")
  8. buildPath = (user_id, project_name, filePath)->
  9. projectPath = path.join(project_name, "/", filePath)
  10. projectPath = encodeURIComponent(projectPath)
  11. fullPath = path.join("/user/", "#{user_id}", "/entity/",projectPath)
  12. return fullPath
  13. queue = require('fairy').connect(settings.redis.fairy).queue(keys.queue.web_to_tpds_http_requests)
  14. module.exports =
  15. _addEntity: (options, sl_req_id, callback = (err)->)->
  16. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  17. logger.log project_id: options.project_id, user_id:user_id, path: options.path, uri:options.uri, sl_req_id:sl_req_id, rev:options.rev, "sending file to third party data store"
  18. postOptions =
  19. method : "post"
  20. headers:
  21. "sl_req_id":sl_req_id
  22. sl_entity_rev:options.rev
  23. sl_project_id:options.project_id
  24. sl_all_user_ids:JSON.stringify(allUserIds)
  25. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  26. title: "addFile"
  27. streamOrigin : options.streamOrigin
  28. queue.enqueue options.project_id, "pipeStreamFrom", postOptions, ->
  29. logger.log project_id: options.project_id, user_id:user_id, path: options.path, uri:options.uri, sl_req_id:sl_req_id, rev:options.rev, "sending file to third party data store queued up for processing"
  30. callback()
  31. addFile : (options, sl_req_id, callback = (err)->)->
  32. metrics.inc("tpds.add-file")
  33. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  34. options.streamOrigin = settings.apis.filestore.url + path.join("/project/#{options.project_id}/file/","#{options.file_id}")
  35. @_addEntity(options, sl_req_id, callback)
  36. addDoc : (options, sl_req_id, callback = (err)->)->
  37. metrics.inc("tpds.add-doc")
  38. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  39. options.streamOrigin = settings.apis.docstore.pubUrl + path.join("/project/#{options.project_id}/doc/","#{options.doc_id}/raw")
  40. @_addEntity(options, sl_req_id, callback)
  41.   
  42. moveEntity : (options, sl_req_id, callback = (err)->)->
  43. metrics.inc("tpds.move-entity")
  44. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  45. if options.newProjectName?
  46. startPath = path.join("/#{options.project_name}/")
  47. endPath = path.join("/#{options.newProjectName}/")
  48. else
  49. startPath = mergeProjectNameAndPath(options.project_name, options.startPath)
  50. endPath = mergeProjectNameAndPath(options.project_name, options.endPath)
  51. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  52. logger.log project_id: options.project_id, user_id:user_id, startPath:startPath, endPath:endPath, uri:options.uri, sl_req_id:sl_req_id, "moving entity in third party data store"
  53. moveOptions =
  54. method : "put"
  55. title:"moveEntity"
  56. uri : "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/entity"
  57. headers:
  58. "sl_req_id":sl_req_id,
  59. sl_project_id:options.project_id,
  60. sl_entity_rev:options.rev
  61. sl_all_user_ids:JSON.stringify(allUserIds)
  62. json :
  63. user_id : user_id
  64. endPath: endPath
  65. startPath: startPath
  66. queue.enqueue options.project_id, "standardHttpRequest", moveOptions, callback
  67. deleteEntity : (options, sl_req_id, callback = (err)->)->
  68. metrics.inc("tpds.delete-entity")
  69. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  70. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  71. logger.log project_id: options.project_id, user_id:user_id, path: options.path, uri:options.uri, sl_req_id:sl_req_id, "deleting entity in third party data store"
  72. deleteOptions =
  73. method : "DELETE"
  74. headers:
  75. "sl_req_id":sl_req_id,
  76. sl_project_id:options.project_id
  77. sl_all_user_ids:JSON.stringify(allUserIds)
  78. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  79. title:"deleteEntity"
  80. sl_all_user_ids:JSON.stringify(allUserIds)
  81. queue.enqueue options.project_id, "standardHttpRequest", deleteOptions, callback
  82. pollDropboxForUser: (user_id, callback = (err) ->) ->
  83. metrics.inc("tpds.poll-dropbox")
  84. logger.log user_id: user_id, "polling dropbox for user"
  85. options =
  86. method: "POST"
  87. uri:"#{settings.apis.thirdPartyDataStore.url}/user/poll"
  88. json:
  89. user_ids: [user_id]
  90. queue.enqueue "poll-dropbox:#{user_id}", "standardHttpRequest", options, callback
  91. getProjectsUsersIds = (project_id, callback = (err, owner_id, allUserIds)->)->
  92. Project.findById project_id, "_id owner_ref readOnly_refs collaberator_refs", (err, project)->
  93. allUserIds = [].concat(project.collaberator_refs).concat(project.readOnly_refs).concat(project.owner_ref)
  94. callback err, project.owner_ref, allUserIds
  95. mergeProjectNameAndPath = (project_name, path)->
  96. if(path.indexOf('/') == 0)
  97. path = path.substring(1)
  98. fullPath = "/#{project_name}/#{path}"
  99. return fullPath