LinkedFilesController.coffee 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. AuthenticationController = require '../Authentication/AuthenticationController'
  2. EditorController = require '../Editor/EditorController'
  3. Settings = require 'settings-sharelatex'
  4. logger = require 'logger-sharelatex'
  5. module.exports = LinkedFilesController = {
  6. Agents: {
  7. url: require('./UrlAgent'),
  8. project_file: require('./ProjectFileAgent')
  9. }
  10. createLinkedFile: (req, res, next) ->
  11. {project_id} = req.params
  12. {name, provider, data, parent_folder_id} = req.body
  13. user_id = AuthenticationController.getLoggedInUserId(req)
  14. logger.log {project_id, name, provider, data, parent_folder_id, user_id}, 'create linked file request'
  15. if !LinkedFilesController.Agents.hasOwnProperty(provider)
  16. return res.send(400)
  17. unless provider in Settings.enabledLinkedFileTypes
  18. return res.send(400)
  19. Agent = LinkedFilesController.Agents[provider]
  20. linkedFileData = Agent.sanitizeData(data)
  21. linkedFileData.provider = provider
  22. Agent.checkAuth project_id, data, user_id, (err, allowed) ->
  23. return Agent.handleError(err, req, res, next) if err?
  24. return res.sendStatus(403) if !allowed
  25. Agent.writeIncomingFileToDisk project_id, linkedFileData, user_id, (error, fsPath) ->
  26. if error?
  27. logger.error {err: error, project_id, name, linkedFileData, parent_folder_id, user_id}, 'error writing linked file to disk'
  28. return Agent.handleError(error, req, res, next)
  29. EditorController.upsertFile project_id, parent_folder_id, name, fsPath, linkedFileData, "upload", user_id, (error, file) ->
  30. return next(error) if error?
  31. res.json(new_file_id: file._id) # created
  32. }