| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- /* eslint-disable
- camelcase,
- handle-callback-err,
- max-len,
- no-unused-vars,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let EditorHttpController
- const ProjectEntityUpdateHandler = require('../Project/ProjectEntityUpdateHandler')
- const ProjectDeleter = require('../Project/ProjectDeleter')
- const logger = require('logger-sharelatex')
- const EditorRealTimeController = require('./EditorRealTimeController')
- const EditorController = require('./EditorController')
- const ProjectGetter = require('../Project/ProjectGetter')
- const UserGetter = require('../User/UserGetter')
- const AuthorizationManager = require('../Authorization/AuthorizationManager')
- const ProjectEditorHandler = require('../Project/ProjectEditorHandler')
- const Metrics = require('metrics-sharelatex')
- const CollaboratorsHandler = require('../Collaborators/CollaboratorsHandler')
- const CollaboratorsInviteHandler = require('../Collaborators/CollaboratorsInviteHandler')
- const PrivilegeLevels = require('../Authorization/PrivilegeLevels')
- const TokenAccessHandler = require('../TokenAccess/TokenAccessHandler')
- const AuthenticationController = require('../Authentication/AuthenticationController')
- const Errors = require('../Errors/Errors')
- module.exports = EditorHttpController = {
- joinProject(req, res, next) {
- const project_id = req.params.Project_id
- let { user_id } = req.query
- if (user_id === 'anonymous-user') {
- user_id = null
- }
- logger.log({ user_id, project_id }, 'join project request')
- Metrics.inc('editor.join-project')
- return EditorHttpController._buildJoinProjectView(
- req,
- project_id,
- user_id,
- function(error, project, privilegeLevel) {
- if (error != null) {
- return next(error)
- }
- // Hide access tokens if this is not the project owner
- TokenAccessHandler.protectTokens(project, privilegeLevel)
- res.json({
- project,
- privilegeLevel
- })
- // Only show the 'renamed or deleted' message once
- if (project != null ? project.deletedByExternalDataSource : undefined) {
- return ProjectDeleter.unmarkAsDeletedByExternalSource(project_id)
- }
- }
- )
- },
- _buildJoinProjectView(req, project_id, user_id, callback) {
- if (callback == null) {
- callback = function(error, project, privilegeLevel) {}
- }
- logger.log({ project_id, user_id }, 'building the joinProject view')
- return ProjectGetter.getProjectWithoutDocLines(project_id, function(
- error,
- project
- ) {
- if (error != null) {
- return callback(error)
- }
- if (project == null) {
- return callback(new Errors.NotFoundError('project not found'))
- }
- return CollaboratorsHandler.getInvitedMembersWithPrivilegeLevels(
- project_id,
- function(error, members) {
- if (error != null) {
- return callback(error)
- }
- const token = TokenAccessHandler.getRequestToken(req, project_id)
- return AuthorizationManager.getPrivilegeLevelForProject(
- user_id,
- project_id,
- token,
- function(error, privilegeLevel) {
- if (error != null) {
- return callback(error)
- }
- if (
- privilegeLevel == null ||
- privilegeLevel === PrivilegeLevels.NONE
- ) {
- logger.log(
- { project_id, user_id, privilegeLevel },
- 'not an acceptable privilege level, returning null'
- )
- return callback(null, null, false)
- }
- return CollaboratorsInviteHandler.getAllInvites(
- project_id,
- function(error, invites) {
- if (error != null) {
- return callback(error)
- }
- logger.log(
- {
- project_id,
- user_id,
- memberCount: members.length,
- inviteCount: invites.length,
- privilegeLevel
- },
- 'returning project model view'
- )
- return callback(
- null,
- ProjectEditorHandler.buildProjectModelView(
- project,
- members,
- invites
- ),
- privilegeLevel
- )
- }
- )
- }
- )
- }
- )
- })
- },
- _nameIsAcceptableLength(name) {
- return name != null && name.length < 150 && name.length !== 0
- },
- addDoc(req, res, next) {
- const project_id = req.params.Project_id
- const { name } = req.body
- const { parent_folder_id } = req.body
- const user_id = AuthenticationController.getLoggedInUserId(req)
- logger.log(
- { project_id, name, parent_folder_id },
- 'getting request to add doc to project'
- )
- if (!EditorHttpController._nameIsAcceptableLength(name)) {
- return res.sendStatus(400)
- }
- return EditorController.addDoc(
- project_id,
- parent_folder_id,
- name,
- [],
- 'editor',
- user_id,
- function(error, doc) {
- if (error && error.message === 'project_has_to_many_files') {
- return res
- .status(400)
- .json(req.i18n.translate('project_has_to_many_files'))
- } else if (error) {
- return next(error)
- } else {
- return res.json(doc)
- }
- }
- )
- },
- addFolder(req, res, next) {
- const project_id = req.params.Project_id
- const { name } = req.body
- const { parent_folder_id } = req.body
- if (!EditorHttpController._nameIsAcceptableLength(name)) {
- return res.sendStatus(400)
- }
- return EditorController.addFolder(
- project_id,
- parent_folder_id,
- name,
- 'editor',
- function(error, doc) {
- if (error && error.message === 'project_has_to_many_files') {
- return res
- .status(400)
- .json(req.i18n.translate('project_has_to_many_files'))
- } else if (error && error.message === 'invalid element name') {
- return res.status(400).json(req.i18n.translate('invalid_file_name'))
- } else if (error) {
- return next(error)
- } else {
- return res.json(doc)
- }
- }
- )
- },
- renameEntity(req, res, next) {
- const project_id = req.params.Project_id
- const { entity_id } = req.params
- const { entity_type } = req.params
- const { name } = req.body
- if (!EditorHttpController._nameIsAcceptableLength(name)) {
- return res.sendStatus(400)
- }
- const user_id = AuthenticationController.getLoggedInUserId(req)
- return EditorController.renameEntity(
- project_id,
- entity_id,
- entity_type,
- name,
- user_id,
- function(error) {
- if (error != null) {
- return next(error)
- }
- return res.sendStatus(204)
- }
- )
- },
- moveEntity(req, res, next) {
- const project_id = req.params.Project_id
- const { entity_id } = req.params
- const { entity_type } = req.params
- const { folder_id } = req.body
- const user_id = AuthenticationController.getLoggedInUserId(req)
- return EditorController.moveEntity(
- project_id,
- entity_id,
- folder_id,
- entity_type,
- user_id,
- function(error) {
- if (error != null) {
- return next(error)
- }
- return res.sendStatus(204)
- }
- )
- },
- deleteDoc(req, res, next) {
- req.params.entity_type = 'doc'
- return EditorHttpController.deleteEntity(req, res, next)
- },
- deleteFile(req, res, next) {
- req.params.entity_type = 'file'
- return EditorHttpController.deleteEntity(req, res, next)
- },
- deleteFolder(req, res, next) {
- req.params.entity_type = 'folder'
- return EditorHttpController.deleteEntity(req, res, next)
- },
- deleteEntity(req, res, next) {
- const project_id = req.params.Project_id
- const { entity_id } = req.params
- const { entity_type } = req.params
- const user_id = AuthenticationController.getLoggedInUserId(req)
- return EditorController.deleteEntity(
- project_id,
- entity_id,
- entity_type,
- 'editor',
- user_id,
- function(error) {
- if (error != null) {
- return next(error)
- }
- return res.sendStatus(204)
- }
- )
- }
- }
|