HistoryController.coffee 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. selectHistoryApi: (req, res, next = (error) ->) ->
  8. project_id = req.params?.Project_id
  9. # find out which type of history service this project uses
  10. ProjectDetailsHandler.getDetails project_id, (err, project) ->
  11. return next(err) if err?
  12. history = project.overleaf?.history
  13. if history?.id? and history?.display
  14. req.useProjectHistory = true
  15. else
  16. req.useProjectHistory = false
  17. next()
  18. proxyToHistoryApi: (req, res, next = (error) ->) ->
  19. user_id = AuthenticationController.getLoggedInUserId req
  20. url = HistoryController.buildHistoryServiceUrl(req.useProjectHistory) + req.url
  21. logger.log url: url, "proxying to history api"
  22. getReq = request(
  23. url: url
  24. method: req.method
  25. headers:
  26. "X-User-Id": user_id
  27. )
  28. getReq.pipe(res)
  29. getReq.on "error", (error) ->
  30. logger.error url: url, err: error, "history API error"
  31. next(error)
  32. buildHistoryServiceUrl: (useProjectHistory) ->
  33. # choose a history service, either document-level (trackchanges)
  34. # or project-level (project_history)
  35. if useProjectHistory
  36. return settings.apis.project_history.url
  37. else
  38. return settings.apis.trackchanges.url