ProjectUploadController.coffee 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. logger = require "logger-sharelatex"
  2. metrics = require "metrics-sharelatex"
  3. fs = require "fs"
  4. Path = require "path"
  5. FileSystemImportManager = require "./FileSystemImportManager"
  6. ProjectUploadManager = require "./ProjectUploadManager"
  7. AuthenticationController = require('../Authentication/AuthenticationController')
  8. LockManager = require("../../infrastructure/LockManager")
  9. module.exports = ProjectUploadController =
  10. uploadProject: (req, res, next) ->
  11. timer = new metrics.Timer("project-upload")
  12. user_id = AuthenticationController.getLoggedInUserId(req)
  13. {originalname, path} = req.files.qqfile
  14. name = Path.basename(originalname, ".zip")
  15. ProjectUploadManager.createProjectFromZipArchive user_id, name, path, (error, project) ->
  16. fs.unlink path, ->
  17. timer.done()
  18. if error?
  19. logger.error
  20. err: error, file_path: path, file_name: name,
  21. "error uploading project"
  22. res.send success: false
  23. else
  24. logger.log
  25. project: project._id, file_path: path, file_name: name,
  26. "uploaded project"
  27. res.send success: true, project_id: project._id
  28. uploadFile: (req, res, next) ->
  29. timer = new metrics.Timer("file-upload")
  30. name = req.files.qqfile?.originalname
  31. path = req.files.qqfile?.path
  32. project_id = req.params.Project_id
  33. folder_id = req.query.folder_id
  34. if !name? or name.length == 0 or name.length > 150
  35. logger.err project_id:project_id, name:name, "bad name when trying to upload file"
  36. return res.send success: false
  37. logger.log folder_id:folder_id, project_id:project_id, "getting upload file request"
  38. user_id = AuthenticationController.getLoggedInUserId(req)
  39. LockManager.getLock project_id, (err)->
  40. if err?
  41. logger.err err:err, project_id:project_id, source:source, "could not get lock to uploadFile"
  42. return callback(err)
  43. FileSystemImportManager.addEntity user_id, project_id, folder_id, name, path, true, (error, entity) ->
  44. LockManager.releaseLock project_id, ->
  45. fs.unlink path, ->
  46. timer.done()
  47. if error?
  48. logger.error
  49. err: error, project_id: project_id, file_path: path,
  50. file_name: name, folder_id: folder_id,
  51. "error uploading file"
  52. res.send success: false
  53. else
  54. logger.log
  55. project_id: project_id, file_path: path, file_name: name, folder_id: folder_id
  56. "uploaded file"
  57. res.send success: true, entity_id: entity?._id, entity_type: entity?.type