HistoryController.coffee 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. logger = require "logger-sharelatex"
  2. request = require "request"
  3. settings = require "settings-sharelatex"
  4. AuthenticationController = require "../Authentication/AuthenticationController"
  5. ProjectDetailsHandler = require "../Project/ProjectDetailsHandler"
  6. module.exports = HistoryController =
  7. initializeProject: (callback = (error, history_id) ->) ->
  8. return callback() if !settings.apis.project_history?.initializeHistoryForNewProjects
  9. request.post {
  10. url: "#{settings.apis.project_history.url}/project"
  11. }, (error, res, body)->
  12. return callback(error) if error?
  13. if res.statusCode >= 200 and res.statusCode < 300
  14. try
  15. project = JSON.parse(body)
  16. catch error
  17. return callback(error)
  18. overleaf_id = project?.project?.id
  19. if !overleaf_id
  20. error = new Error("project-history did not provide an id", project)
  21. return callback(error)
  22. callback null, { overleaf_id }
  23. else
  24. error = new Error("project-history returned a non-success status code: #{res.statusCode}")
  25. callback error
  26. selectHistoryApi: (req, res, next = (error) ->) ->
  27. project_id = req.params?.Project_id
  28. # find out which type of history service this project uses
  29. ProjectDetailsHandler.getDetails project_id, (err, project) ->
  30. return next(err) if err?
  31. history = project.overleaf?.history
  32. if history?.id? and history?.display
  33. req.useProjectHistory = true
  34. else
  35. req.useProjectHistory = false
  36. next()
  37. proxyToHistoryApi: (req, res, next = (error) ->) ->
  38. user_id = AuthenticationController.getLoggedInUserId req
  39. url = HistoryController.buildHistoryServiceUrl(req.useProjectHistory) + req.url
  40. logger.log url: url, "proxying to history api"
  41. getReq = request(
  42. url: url
  43. method: req.method
  44. headers:
  45. "X-User-Id": user_id
  46. )
  47. getReq.pipe(res)
  48. getReq.on "error", (error) ->
  49. logger.error url: url, err: error, "history API error"
  50. next(error)
  51. buildHistoryServiceUrl: (useProjectHistory) ->
  52. # choose a history service, either document-level (trackchanges)
  53. # or project-level (project_history)
  54. if useProjectHistory
  55. return settings.apis.project_history.url
  56. else
  57. return settings.apis.trackchanges.url