ProjectGetter = require "../Project/ProjectGetter" ProjectLocator = require "../Project/ProjectLocator" ProjectEntityHandler = require "../Project/ProjectEntityHandler" ProjectEntityUpdateHandler = require "../Project/ProjectEntityUpdateHandler" logger = require("logger-sharelatex") module.exports = getDocument: (req, res, next = (error) ->) -> project_id = req.params.Project_id doc_id = req.params.doc_id plain = req?.query?.plain == 'true' logger.log doc_id:doc_id, project_id:project_id, "receiving get document request from api (docupdater)" ProjectGetter.getProject project_id, rootFolder: true, overleaf: true, (error, project) -> return next(error) if error? return res.sendStatus(404) if !project? ProjectLocator.findElement {project: project, element_id: doc_id, type: 'doc'}, (error, doc, path) -> if error? logger.err err:error, doc_id:doc_id, project_id:project_id, "error finding element for getDocument" return next(error) ProjectEntityHandler.getDoc project_id, doc_id, (error, lines, rev, version, ranges) -> if error? logger.err err:error, doc_id:doc_id, project_id:project_id, "error finding doc contents for getDocument" return next(error) if plain res.type "text/plain" res.send lines.join('\n') else projectHistoryId = project?.overleaf?.history?.id res.type "json" res.send JSON.stringify { lines: lines version: version ranges: ranges pathname: path.fileSystem projectHistoryId: projectHistoryId } setDocument: (req, res, next = (error) ->) -> project_id = req.params.Project_id doc_id = req.params.doc_id {lines, version, ranges} = req.body logger.log doc_id:doc_id, project_id:project_id, "receiving set document request from api (docupdater)" ProjectEntityUpdateHandler.updateDocLines project_id, doc_id, lines, version, ranges, (error) -> if error? logger.err err:error, doc_id:doc_id, project_id:project_id, "error finding element for getDocument" return next(error) logger.log doc_id:doc_id, project_id:project_id, "finished receiving set document request from api (docupdater)" res.sendStatus 200