HistoryController.coffee 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. HistoryManager = require "./HistoryManager"
  7. module.exports = HistoryController =
  8. selectHistoryApi: (req, res, next = (error) ->) ->
  9. project_id = req.params?.Project_id
  10. # find out which type of history service this project uses
  11. ProjectDetailsHandler.getDetails project_id, (err, project) ->
  12. return next(err) if err?
  13. history = project.overleaf?.history
  14. if history?.id? and history?.display
  15. req.useProjectHistory = true
  16. else
  17. req.useProjectHistory = false
  18. next()
  19. proxyToHistoryApi: (req, res, next = (error) ->) ->
  20. user_id = AuthenticationController.getLoggedInUserId req
  21. url = HistoryController.buildHistoryServiceUrl(req.useProjectHistory) + req.url
  22. logger.log url: url, "proxying to history api"
  23. getReq = request(
  24. url: url
  25. method: req.method
  26. headers:
  27. "X-User-Id": user_id
  28. )
  29. getReq.pipe(res)
  30. getReq.on "error", (error) ->
  31. logger.error url: url, err: error, "history API error"
  32. next(error)
  33. proxyToHistoryApiAndInjectUserDetails: (req, res, next = (error) ->) ->
  34. user_id = AuthenticationController.getLoggedInUserId req
  35. url = HistoryController.buildHistoryServiceUrl(req.useProjectHistory) + req.url
  36. logger.log url: url, "proxying to history api"
  37. request {
  38. url: url
  39. method: req.method
  40. json: true
  41. headers:
  42. "X-User-Id": user_id
  43. }, (error, response, body) ->
  44. return next(error) if error?
  45. if 200 <= response.statusCode < 300
  46. HistoryManager.injectUserDetails body, (error, data) ->
  47. return next(error) if error?
  48. res.json data
  49. else
  50. error = new Error("history api responded with non-success code: #{response.statusCode}")
  51. logger.error err: error, user_id: user_id, "error proxying request to history api"
  52. next(error)
  53. buildHistoryServiceUrl: (useProjectHistory) ->
  54. # choose a history service, either document-level (trackchanges)
  55. # or project-level (project_history)
  56. if useProjectHistory
  57. return settings.apis.project_history.url
  58. else
  59. return settings.apis.trackchanges.url