TpdsUpdateSender.coffee 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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.  
  16. addFile : (options, sl_req_id, callback = (err)->)->
  17. metrics.inc("tpds.add-file")
  18. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  19. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  20. 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"
  21. postOptions =
  22. method : "post"
  23. headers:
  24. "sl_req_id":sl_req_id
  25. sl_entity_rev:options.rev
  26. sl_project_id:options.project_id
  27. sl_all_user_ids:JSON.stringify(allUserIds)
  28. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  29. title:"addFile"
  30. streamOrigin : settings.apis.filestore.url + path.join("/project/#{options.project_id}/file/","#{options.file_id}")
  31. queue.enqueue options.project_id, "pipeStreamFrom", postOptions, ->
  32. 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"
  33. callback()
  34. addDoc : (options, sl_req_id, callback = (err)->)->
  35. metrics.inc("tpds.add-doc")
  36. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  37. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  38. return callback(err) if err?
  39. logger.log project_id: options.project_id, user_id:user_id, path: options.path, rev:options.rev, uri:options.uri, project_name:options.project_name, docLines:options.docLines, sl_req_id:sl_req_id, "sending doc to third party data store"
  40. postOptions =
  41. method : "post"
  42. headers:
  43. "sl_req_id":sl_req_id,
  44. sl_entity_rev:options.rev,
  45. sl_project_id:options.project_id
  46. sl_all_user_ids:JSON.stringify(allUserIds)
  47. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  48. title: "addDoc"
  49. docLines: options.docLines
  50. queue.enqueue options.project_id, "sendDoc", postOptions, callback
  51.   
  52. moveEntity : (options, sl_req_id, callback = (err)->)->
  53. metrics.inc("tpds.move-entity")
  54. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  55. if options.newProjectName?
  56. startPath = path.join("/#{options.project_name}/")
  57. endPath = path.join("/#{options.newProjectName}/")
  58. else
  59. startPath = mergeProjectNameAndPath(options.project_name, options.startPath)
  60. endPath = mergeProjectNameAndPath(options.project_name, options.endPath)
  61. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  62. 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"
  63. moveOptions =
  64. method : "put"
  65. title:"moveEntity"
  66. uri : "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/entity"
  67. headers:
  68. "sl_req_id":sl_req_id,
  69. sl_project_id:options.project_id,
  70. sl_entity_rev:options.rev
  71. sl_all_user_ids:JSON.stringify(allUserIds)
  72. json :
  73. user_id : user_id
  74. endPath: endPath
  75. startPath: startPath
  76. queue.enqueue options.project_id, "standardHttpRequest", moveOptions, callback
  77. deleteEntity : (options, sl_req_id, callback = (err)->)->
  78. metrics.inc("tpds.delete-entity")
  79. {callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
  80. getProjectsUsersIds options.project_id, (err, user_id, allUserIds)->
  81. 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"
  82. deleteOptions =
  83. method : "DELETE"
  84. headers:
  85. "sl_req_id":sl_req_id,
  86. sl_project_id:options.project_id
  87. sl_all_user_ids:JSON.stringify(allUserIds)
  88. uri : "#{settings.apis.thirdPartyDataStore.url}#{buildPath(user_id, options.project_name, options.path)}"
  89. title:"deleteEntity"
  90. sl_all_user_ids:JSON.stringify(allUserIds)
  91. queue.enqueue options.project_id, "standardHttpRequest", deleteOptions, callback
  92. getProjectsUsersIds = (project_id, callback = (err, owner_id, allUserIds)->)->
  93. Project.findById project_id, "_id owner_ref readOnly_refs collaberator_refs", (err, project)->
  94. allUserIds = [].concat(project.collaberator_refs).concat(project.readOnly_refs).concat(project.owner_ref)
  95. callback err, project.owner_ref, allUserIds
  96. mergeProjectNameAndPath = (project_name, path)->
  97. if(path.indexOf('/') == 0)
  98. path = path.substring(1)
  99. fullPath = "/#{project_name}/#{path}"
  100. return fullPath