LinkedFilesController.coffee 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. AuthenticationController = require '../Authentication/AuthenticationController'
  2. EditorController = require '../Editor/EditorController'
  3. ProjectLocator = require '../Project/ProjectLocator'
  4. Settings = require 'settings-sharelatex'
  5. logger = require 'logger-sharelatex'
  6. _ = require 'underscore'
  7. LinkedFilesErrors = require './LinkedFilesErrors'
  8. module.exports = LinkedFilesController = {
  9. Agents: {
  10. url: require('./UrlAgent'),
  11. project_file: require('./ProjectFileAgent'),
  12. project_output_file: require('./ProjectOutputFileAgent')
  13. }
  14. _getAgent: (provider) ->
  15. if !LinkedFilesController.Agents.hasOwnProperty(provider)
  16. return null
  17. unless provider in Settings.enabledLinkedFileTypes
  18. return null
  19. LinkedFilesController.Agents[provider]
  20. _getFileById: (project_id, file_id, callback=(err, file)->) ->
  21. ProjectLocator.findElement {
  22. project_id,
  23. element_id: file_id,
  24. type: 'file'
  25. }, (err, file, path, parentFolder) ->
  26. return callback(err) if err?
  27. callback(null, file, path, parentFolder)
  28. createLinkedFile: (req, res, next) ->
  29. {project_id} = req.params
  30. {name, provider, data, parent_folder_id} = req.body
  31. user_id = AuthenticationController.getLoggedInUserId(req)
  32. logger.log {project_id, name, provider, data, parent_folder_id, user_id}, 'create linked file request'
  33. Agent = LinkedFilesController._getAgent(provider)
  34. if !Agent?
  35. return res.sendStatus(400)
  36. data.provider = provider
  37. Agent.createLinkedFile project_id,
  38. data,
  39. name,
  40. parent_folder_id,
  41. user_id,
  42. (err, newFileId) ->
  43. return LinkedFilesErrors.handleError(err, req, res, next) if err?
  44. res.json(new_file_id: newFileId)
  45. refreshLinkedFile: (req, res, next) ->
  46. {project_id, file_id} = req.params
  47. user_id = AuthenticationController.getLoggedInUserId(req)
  48. logger.log {project_id, file_id, user_id}, 'refresh linked file request'
  49. LinkedFilesController._getFileById project_id, file_id, (err, file, path, parentFolder) ->
  50. return next(err) if err?
  51. return res.sendStatus(404) if !file?
  52. name = file.name
  53. linkedFileData = file.linkedFileData
  54. if !linkedFileData? || !linkedFileData?.provider?
  55. return res.send(409)
  56. provider = linkedFileData.provider
  57. parent_folder_id = parentFolder._id
  58. Agent = LinkedFilesController._getAgent(provider)
  59. if !Agent?
  60. return res.sendStatus(400)
  61. Agent.refreshLinkedFile project_id,
  62. linkedFileData,
  63. name,
  64. parent_folder_id,
  65. user_id,
  66. (err, newFileId) ->
  67. return LinkedFilesErrors.handleError(err, req, res, next) if err?
  68. res.json(new_file_id: newFileId)
  69. }