LinkedFilesController.coffee 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. LinkedFilesHandler = require './LinkedFilesHandler'
  9. module.exports = LinkedFilesController = {
  10. Agents: {
  11. url: require('./UrlAgent'),
  12. project_file: require('./ProjectFileAgent'),
  13. project_output_file: require('./ProjectOutputFileAgent')
  14. }
  15. _getAgent: (provider) ->
  16. if !LinkedFilesController.Agents.hasOwnProperty(provider)
  17. return null
  18. unless provider in Settings.enabledLinkedFileTypes
  19. return null
  20. LinkedFilesController.Agents[provider]
  21. createLinkedFile: (req, res, next) ->
  22. {project_id} = req.params
  23. {name, provider, data, parent_folder_id} = req.body
  24. user_id = AuthenticationController.getLoggedInUserId(req)
  25. logger.log {project_id, name, provider, data, parent_folder_id, user_id}, 'create linked file request'
  26. Agent = LinkedFilesController._getAgent(provider)
  27. if !Agent?
  28. return res.sendStatus(400)
  29. data.provider = provider
  30. Agent.createLinkedFile project_id,
  31. data,
  32. name,
  33. parent_folder_id,
  34. user_id,
  35. (err, newFileId) ->
  36. return LinkedFilesErrors.handleError(err, req, res, next) if err?
  37. res.json(new_file_id: newFileId)
  38. refreshLinkedFile: (req, res, next) ->
  39. {project_id, file_id} = req.params
  40. user_id = AuthenticationController.getLoggedInUserId(req)
  41. logger.log {project_id, file_id, user_id}, 'refresh linked file request'
  42. LinkedFilesHandler.getFileById project_id, file_id, (err, file, path, parentFolder) ->
  43. return next(err) if err?
  44. return res.sendStatus(404) if !file?
  45. name = file.name
  46. linkedFileData = file.linkedFileData
  47. if !linkedFileData? || !linkedFileData?.provider?
  48. return res.send(409)
  49. provider = linkedFileData.provider
  50. parent_folder_id = parentFolder._id
  51. Agent = LinkedFilesController._getAgent(provider)
  52. if !Agent?
  53. return res.sendStatus(400)
  54. Agent.refreshLinkedFile project_id,
  55. linkedFileData,
  56. name,
  57. parent_folder_id,
  58. user_id,
  59. (err, newFileId) ->
  60. return LinkedFilesErrors.handleError(err, req, res, next) if err?
  61. res.json(new_file_id: newFileId)
  62. }