LinkedFilesController.coffee 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. createLinkedFile: (req, res, next) ->
  21. {project_id} = req.params
  22. {name, provider, data, parent_folder_id} = req.body
  23. user_id = AuthenticationController.getLoggedInUserId(req)
  24. logger.log {project_id, name, provider, data, parent_folder_id, user_id}, 'create linked file request'
  25. Agent = LinkedFilesController._getAgent(provider)
  26. if !Agent?
  27. return res.sendStatus(400)
  28. data.provider = provider
  29. Agent.createLinkedFile project_id,
  30. data,
  31. name,
  32. parent_folder_id,
  33. user_id,
  34. (err, newFileId) ->
  35. return LinkedFilesErrors.handleError(err, req, res, next) if err?
  36. res.json(new_file_id: newFileId)
  37. refreshLinkedFile: (req, res, next) ->
  38. {project_id, file_id} = req.params
  39. user_id = AuthenticationController.getLoggedInUserId(req)
  40. logger.log {project_id, file_id, user_id}, 'refresh linked file request'
  41. LinkedFilesHandler.getFileById project_id, file_id, (err, file, path, parentFolder) ->
  42. return next(err) if err?
  43. return res.sendStatus(404) if !file?
  44. name = file.name
  45. linkedFileData = file.linkedFileData
  46. if !linkedFileData? || !linkedFileData?.provider?
  47. return res.send(409)
  48. provider = linkedFileData.provider
  49. parent_folder_id = parentFolder._id
  50. Agent = LinkedFilesController._getAgent(provider)
  51. if !Agent?
  52. return res.sendStatus(400)
  53. Agent.refreshLinkedFile project_id,
  54. linkedFileData,
  55. name,
  56. parent_folder_id,
  57. user_id,
  58. (err, newFileId) ->
  59. return LinkedFilesErrors.handleError(err, req, res, next) if err?
  60. res.json(new_file_id: newFileId)
  61. }