add resync project history endpoint

This commit is contained in:
Hayden Faulds 2018-02-28 17:31:26 +00:00
parent d93f5fa6be
commit 4d2f0218af
3 changed files with 37 additions and 0 deletions

View file

@ -5,7 +5,9 @@ _ = require 'underscore'
async = require 'async' async = require 'async'
logger = require('logger-sharelatex') logger = require('logger-sharelatex')
metrics = require('metrics-sharelatex') metrics = require('metrics-sharelatex')
FileStoreHandler = require("../FileStore/FileStoreHandler")
Project = require("../../models/Project").Project Project = require("../../models/Project").Project
ProjectGetter = require "../Project/ProjectGetter"
module.exports = DocumentUpdaterHandler = module.exports = DocumentUpdaterHandler =
flushProjectToMongo: (project_id, callback = (error) ->)-> flushProjectToMongo: (project_id, callback = (error) ->)->
@ -203,6 +205,33 @@ module.exports = DocumentUpdaterHandler =
logger.error {project_id, doc_id, thread_id}, "doc updater returned a non-success status code: #{res.statusCode}" logger.error {project_id, doc_id, thread_id}, "doc updater returned a non-success status code: #{res.statusCode}"
callback new Error("doc updater returned a non-success status code: #{res.statusCode}") callback new Error("doc updater returned a non-success status code: #{res.statusCode}")
resyncProject: (project_id, callback) ->
ProjectEntityHandler = require "../Project/ProjectEntityHandler"
ProjectGetter.getProject project_id, rootFolder: true, (error, project) ->
return callback(error) if error?
ProjectEntityHandler.getAllEntitiesFromProject project, (error, docs, files) ->
return callback(error) if error?
docs = _.map docs, (doc) ->
doc: doc.doc._id
path: doc.path
files = _.map files, (file) ->
file: file.file._id
path: file.path
url: FileStoreHandler._buildUrl(project_id, file.file._id)
request.post
url: "#{settings.apis.documentupdater.url}/project/#{project_id}/resync"
json: { docs, files }
, (error, res, body) ->
if error?
logger.error {error, project_id}, "error resyncing project in doc updater"
callback(error)
else if res.statusCode >= 200 and res.statusCode < 300
logger.log {project_id}, "resynced project in doc updater"
callback()
updateProjectStructure : (project_id, userId, changes, callback = (error) ->)-> updateProjectStructure : (project_id, userId, changes, callback = (error) ->)->
return callback() if !settings.apis.project_history?.sendProjectStructureOps return callback() if !settings.apis.project_history?.sendProjectStructureOps
Project.findOne {_id: project_id}, {version:true}, (err, currentProject) -> Project.findOne {_id: project_id}, {version:true}, (err, currentProject) ->

View file

@ -2,6 +2,7 @@ logger = require "logger-sharelatex"
request = require "request" request = require "request"
settings = require "settings-sharelatex" settings = require "settings-sharelatex"
AuthenticationController = require "../Authentication/AuthenticationController" AuthenticationController = require "../Authentication/AuthenticationController"
DocumentUpdaterHandler = require "../DocumentUpdater/DocumentUpdaterHandler"
ProjectDetailsHandler = require "../Project/ProjectDetailsHandler" ProjectDetailsHandler = require "../Project/ProjectDetailsHandler"
HistoryManager = require "./HistoryManager" HistoryManager = require "./HistoryManager"
@ -62,3 +63,9 @@ module.exports = HistoryController =
return settings.apis.project_history.url return settings.apis.project_history.url
else else
return settings.apis.trackchanges.url return settings.apis.trackchanges.url
resyncProject: (req, res, next = (error) ->) ->
project_id = req.params.Project_id
DocumentUpdaterHandler.resyncProject project_id, (error) ->
return next(error) if error?
res.sendStatus 204

View file

@ -201,6 +201,7 @@ module.exports = class Router
webRouter.get "/project/:Project_id/doc/:doc_id/diff", AuthorizationMiddlewear.ensureUserCanReadProject, HistoryController.selectHistoryApi, HistoryController.proxyToHistoryApi webRouter.get "/project/:Project_id/doc/:doc_id/diff", AuthorizationMiddlewear.ensureUserCanReadProject, HistoryController.selectHistoryApi, HistoryController.proxyToHistoryApi
webRouter.get "/project/:Project_id/diff", AuthorizationMiddlewear.ensureUserCanReadProject, HistoryController.selectHistoryApi, HistoryController.proxyToHistoryApiAndInjectUserDetails webRouter.get "/project/:Project_id/diff", AuthorizationMiddlewear.ensureUserCanReadProject, HistoryController.selectHistoryApi, HistoryController.proxyToHistoryApiAndInjectUserDetails
webRouter.post "/project/:Project_id/doc/:doc_id/version/:version_id/restore", AuthorizationMiddlewear.ensureUserCanReadProject, HistoryController.selectHistoryApi, HistoryController.proxyToHistoryApi webRouter.post "/project/:Project_id/doc/:doc_id/version/:version_id/restore", AuthorizationMiddlewear.ensureUserCanReadProject, HistoryController.selectHistoryApi, HistoryController.proxyToHistoryApi
privateApiRouter.post "/project/:Project_id/history/resync", AuthenticationController.httpAuth, HistoryController.resyncProject
webRouter.get '/Project/:Project_id/download/zip', AuthorizationMiddlewear.ensureUserCanReadProject, ProjectDownloadsController.downloadProject webRouter.get '/Project/:Project_id/download/zip', AuthorizationMiddlewear.ensureUserCanReadProject, ProjectDownloadsController.downloadProject
webRouter.get '/project/download/zip', AuthorizationMiddlewear.ensureUserCanReadMultipleProjects, ProjectDownloadsController.downloadMultipleProjects webRouter.get '/project/download/zip', AuthorizationMiddlewear.ensureUserCanReadMultipleProjects, ProjectDownloadsController.downloadMultipleProjects