| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- AuthenticationController = require '../Authentication/AuthenticationController'
- EditorController = require '../Editor/EditorController'
- ProjectLocator = require '../Project/ProjectLocator'
- Settings = require 'settings-sharelatex'
- logger = require 'logger-sharelatex'
- _ = require 'underscore'
- LinkedFilesHandler = require './LinkedFilesHandler'
- {
- UrlFetchFailedError,
- InvalidUrlError,
- OutputFileFetchFailedError,
- AccessDeniedError,
- BadEntityTypeError,
- BadDataError,
- ProjectNotFoundError,
- V1ProjectNotFoundError,
- SourceFileNotFoundError,
- NotOriginalImporterError,
- FeatureNotAvailableError,
- RemoteServiceError,
- FileCannotRefreshError
- } = require './LinkedFilesErrors'
- Modules = require '../../infrastructure/Modules'
- module.exports = LinkedFilesController = {
- Agents: _.extend(
- {
- url: require('./UrlAgent'),
- project_file: require('./ProjectFileAgent'),
- project_output_file: require('./ProjectOutputFileAgent'),
- },
- Modules.linkedFileAgentsIncludes()
- )
- _getAgent: (provider) ->
- if !LinkedFilesController.Agents.hasOwnProperty(provider)
- return null
- unless provider in Settings.enabledLinkedFileTypes
- return null
- LinkedFilesController.Agents[provider]
- createLinkedFile: (req, res, next) ->
- {project_id} = req.params
- {name, provider, data, parent_folder_id} = req.body
- user_id = AuthenticationController.getLoggedInUserId(req)
- logger.log {project_id, name, provider, data, parent_folder_id, user_id}, 'create linked file request'
- Agent = LinkedFilesController._getAgent(provider)
- if !Agent?
- return res.sendStatus(400)
- data.provider = provider
- Agent.createLinkedFile project_id,
- data,
- name,
- parent_folder_id,
- user_id,
- (err, newFileId) ->
- return LinkedFilesController.handleError(err, req, res, next) if err?
- res.json(new_file_id: newFileId)
- refreshLinkedFile: (req, res, next) ->
- {project_id, file_id} = req.params
- user_id = AuthenticationController.getLoggedInUserId(req)
- logger.log {project_id, file_id, user_id}, 'refresh linked file request'
- LinkedFilesHandler.getFileById project_id, file_id, (err, file, path, parentFolder) ->
- return next(err) if err?
- return res.sendStatus(404) if !file?
- name = file.name
- linkedFileData = file.linkedFileData
- if !linkedFileData? || !linkedFileData?.provider?
- return res.send(409)
- provider = linkedFileData.provider
- parent_folder_id = parentFolder._id
- Agent = LinkedFilesController._getAgent(provider)
- if !Agent?
- return res.sendStatus(400)
- Agent.refreshLinkedFile project_id,
- linkedFileData,
- name,
- parent_folder_id,
- user_id,
- (err, newFileId) ->
- return LinkedFilesController.handleError(err, req, res, next) if err?
- res.json(new_file_id: newFileId)
- handleError: (error, req, res, next) ->
- if error instanceof BadDataError
- res.status(400).send("The submitted data is not valid")
- else if error instanceof AccessDeniedError
- res.status(403).send("You do not have access to this project")
- else if error instanceof BadDataError
- res.status(400).send("The submitted data is not valid")
- else if error instanceof BadEntityTypeError
- res.status(400).send("The file is the wrong type")
- else if error instanceof SourceFileNotFoundError
- res.status(404).send("Source file not found")
- else if error instanceof ProjectNotFoundError
- res.status(404).send("Project not found")
- else if error instanceof V1ProjectNotFoundError
- res.status(409).send("Sorry, the source project is not yet imported to Overleaf v2. Please import it to Overleaf v2 to refresh this file")
- else if error instanceof OutputFileFetchFailedError
- res.status(404).send("Could not get output file")
- else if error instanceof UrlFetchFailedError
- res.status(422).send(
- "Your URL could not be reached (#{error.statusCode} status code). Please check it and try again."
- )
- else if error instanceof InvalidUrlError
- res.status(422).send(
- "Your URL is not valid. Please check it and try again."
- )
- else if error instanceof NotOriginalImporterError
- res.status(400).send(
- "You are not the user who originally imported this file"
- )
- else if error instanceof FeatureNotAvailableError
- res.status(400).send(
- "This feature is not enabled on your account"
- )
- else if error instanceof RemoteServiceError
- res.status(502).send(
- "The remote service produced an error"
- )
- else if error instanceof FileCannotRefreshError
- res.status(400).send(
- "This file cannot be refreshed"
- )
- else
- next(error)
- }
|