TpdsUpdateHandler.coffee 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. updateMerger = require('./UpdateMerger')
  2. logger = require('logger-sharelatex')
  3. projectLocator = require('../Project/ProjectLocator')
  4. projectCreationHandler = require('../Project/ProjectCreationHandler')
  5. projectDeleter = require('../Project/ProjectDeleter')
  6. ProjectRootDocManager = require "../Project/ProjectRootDocManager"
  7. FileTypeManager = require('../Uploads/FileTypeManager')
  8. CooldownManager = require('../Cooldown/CooldownManager')
  9. Errors = require('../Errors/Errors')
  10. commitMessage = "Before update from Dropbox"
  11. module.exports =
  12. newUpdate: (user_id, projectName, path, updateRequest, source, callback)->
  13. getOrCreateProject = (cb)=>
  14. projectLocator.findUsersProjectByName user_id, projectName, (err, project)=>
  15. logger.log user_id:user_id, filePath:path, projectName:projectName, "handling new update from tpds"
  16. if !project?
  17. projectCreationHandler.createBlankProject user_id, projectName, (err, project)=>
  18. # have a crack at setting the root doc after a while, on creation we won't have it yet, but should have
  19. # been sent it it within 30 seconds
  20. setTimeout (-> ProjectRootDocManager.setRootDocAutomatically project._id ), @_rootDocTimeoutLength
  21. cb err, project
  22. else
  23. cb err, project
  24. getOrCreateProject (err, project)->
  25. return callback(err) if err?
  26. CooldownManager.isProjectOnCooldown project._id, (err, projectIsOnCooldown) ->
  27. return callback(err) if err?
  28. if projectIsOnCooldown
  29. logger.log {projectId: project._id}, "project is on cooldown, denying request"
  30. return callback(new Errors.TooManyRequestsError('project on cooldown'))
  31. FileTypeManager.shouldIgnore path, (err, shouldIgnore)->
  32. if shouldIgnore
  33. return callback()
  34. updateMerger.mergeUpdate user_id, project._id, path, updateRequest, source, callback
  35. deleteUpdate: (user_id, projectName, path, source, callback)->
  36. logger.log user_id:user_id, filePath:path, "handling delete update from tpds"
  37. projectLocator.findUsersProjectByName user_id, projectName, (err, project)->
  38. if !project?
  39. logger.log user_id:user_id, filePath:path, projectName:projectName, "project not found from tpds update, ignoring folder or project"
  40. return callback()
  41. if path == "/"
  42. logger.log user_id:user_id, filePath:path, projectName:projectName, project_id:project._id, "project found for delete update, path is root so marking project as deleted"
  43. return projectDeleter.markAsDeletedByExternalSource project._id, callback
  44. else
  45. updateMerger.deleteUpdate user_id, project._id, path, source, (err)->
  46. callback(err)
  47. _rootDocTimeoutLength : 30 * 1000