EditorHttpController.coffee 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. ProjectEntityHandler = require "../Project/ProjectEntityHandler"
  2. ProjectDeleter = require "../Project/ProjectDeleter"
  3. logger = require "logger-sharelatex"
  4. EditorRealTimeController = require "./EditorRealTimeController"
  5. EditorController = require "./EditorController"
  6. ProjectGetter = require('../Project/ProjectGetter')
  7. UserGetter = require('../User/UserGetter')
  8. AuthorizationManager = require("../Security/AuthorizationManager")
  9. ProjectEditorHandler = require('../Project/ProjectEditorHandler')
  10. Metrics = require('../../infrastructure/Metrics')
  11. CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
  12. module.exports = EditorHttpController =
  13. joinProject: (req, res, next) ->
  14. project_id = req.params.Project_id
  15. user_id = req.query.user_id
  16. logger.log {user_id, project_id}, "join project request"
  17. Metrics.inc "editor.join-project"
  18. EditorHttpController._buildJoinProjectView project_id, user_id, (error, project, privilegeLevel) ->
  19. return next(error) if error?
  20. res.json {
  21. project: project
  22. privilegeLevel: privilegeLevel
  23. }
  24. # Only show the 'renamed or deleted' message once
  25. if project?.deletedByExternalDataSource
  26. ProjectDeleter.unmarkAsDeletedByExternalSource project_id
  27. _buildJoinProjectView: (project_id, user_id, callback = (error, project, privilegeLevel) ->) ->
  28. ProjectGetter.getProjectWithoutDocLines project_id, (error, project) ->
  29. return callback(error) if error?
  30. return callback(new Error("not found")) if !project?
  31. CollaboratorsHandler.getMembersWithPrivilegeLevels project, (error, members) ->
  32. return callback(error) if error?
  33. UserGetter.getUser user_id, { isAdmin: true }, (error, user) ->
  34. return callback(error) if error?
  35. AuthorizationManager.getPrivilegeLevelForProject project, user, (error, canAccess, privilegeLevel) ->
  36. return callback(error) if error?
  37. if !canAccess
  38. callback null, null, false
  39. else
  40. callback(null,
  41. ProjectEditorHandler.buildProjectModelView(project, members),
  42. privilegeLevel
  43. )
  44. restoreDoc: (req, res, next) ->
  45. project_id = req.params.Project_id
  46. doc_id = req.params.doc_id
  47. name = req.body.name
  48. if !name?
  49. return res.sendStatus 400 # Malformed request
  50. logger.log project_id: project_id, doc_id: doc_id, "restoring doc"
  51. ProjectEntityHandler.restoreDoc project_id, doc_id, name, (err, doc, folder_id) =>
  52. return next(error) if error?
  53. EditorRealTimeController.emitToRoom(project_id, 'reciveNewDoc', folder_id, doc)
  54. res.json {
  55. doc_id: doc._id
  56. }
  57. _nameIsAcceptableLength: (name)->
  58. return name? and name.length < 150 and name.length != 0
  59. addDoc: (req, res, next) ->
  60. project_id = req.params.Project_id
  61. name = req.body.name
  62. parent_folder_id = req.body.parent_folder_id
  63. if !EditorHttpController._nameIsAcceptableLength(name)
  64. return res.sendStatus 400
  65. EditorController.addDoc project_id, parent_folder_id, name, [], "editor", (error, doc) ->
  66. return next(error) if error?
  67. res.json doc
  68. addFolder: (req, res, next) ->
  69. project_id = req.params.Project_id
  70. name = req.body.name
  71. parent_folder_id = req.body.parent_folder_id
  72. if !EditorHttpController._nameIsAcceptableLength(name)
  73. return res.sendStatus 400
  74. EditorController.addFolder project_id, parent_folder_id, name, "editor", (error, doc) ->
  75. return next(error) if error?
  76. res.json doc
  77. renameEntity: (req, res, next) ->
  78. project_id = req.params.Project_id
  79. entity_id = req.params.entity_id
  80. entity_type = req.params.entity_type
  81. name = req.body.name
  82. if !EditorHttpController._nameIsAcceptableLength(name)
  83. return res.sendStatus 400
  84. EditorController.renameEntity project_id, entity_id, entity_type, name, (error) ->
  85. return next(error) if error?
  86. res.sendStatus 204
  87. moveEntity: (req, res, next) ->
  88. project_id = req.params.Project_id
  89. entity_id = req.params.entity_id
  90. entity_type = req.params.entity_type
  91. folder_id = req.body.folder_id
  92. EditorController.moveEntity project_id, entity_id, folder_id, entity_type, (error) ->
  93. return next(error) if error?
  94. res.sendStatus 204
  95. deleteDoc: (req, res, next)->
  96. req.params.entity_type = "doc"
  97. EditorHttpController.deleteEntity(req, res, next)
  98. deleteFile: (req, res, next)->
  99. req.params.entity_type = "file"
  100. EditorHttpController.deleteEntity(req, res, next)
  101. deleteFolder: (req, res, next)->
  102. req.params.entity_type = "folder"
  103. EditorHttpController.deleteEntity(req, res, next)
  104. deleteEntity: (req, res, next) ->
  105. project_id = req.params.Project_id
  106. entity_id = req.params.entity_id
  107. entity_type = req.params.entity_type
  108. EditorController.deleteEntity project_id, entity_id, entity_type, "editor", (error) ->
  109. return next(error) if error?
  110. res.sendStatus 204