ErrorController.coffee 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. Errors = require "./Errors"
  2. logger = require "logger-sharelatex"
  3. AuthenticationController = require '../Authentication/AuthenticationController'
  4. module.exports = ErrorController =
  5. notFound: (req, res)->
  6. res.status(404)
  7. res.render 'general/404',
  8. title: "page_not_found"
  9. serverError: (req, res)->
  10. res.status(500)
  11. res.render 'general/500',
  12. title: "Server Error"
  13. accountMergeError: (req, res)->
  14. res.status(500)
  15. res.render 'general/account-merge-error',
  16. title: "Account Access Error"
  17. handleError: (error, req, res, next) ->
  18. user = AuthenticationController.getSessionUser(req)
  19. if error?.code is 'EBADCSRFTOKEN'
  20. logger.warn err: error,url:req.url, method:req.method, user:user, "invalid csrf"
  21. res.sendStatus(403)
  22. return
  23. if error instanceof Errors.NotFoundError
  24. logger.warn {err: error, url: req.url}, "not found error"
  25. ErrorController.notFound req, res
  26. else if error instanceof Errors.TooManyRequestsError
  27. logger.warn {err: error, url: req.url}, "too many requests error"
  28. res.sendStatus(429)
  29. else if error instanceof Errors.InvalidError
  30. logger.warn {err: error, url: req.url}, "invalid error"
  31. res.status(400)
  32. res.send(error.message)
  33. else if error instanceof Errors.InvalidNameError
  34. logger.warn {err: error, url: req.url}, "invalid name error"
  35. res.status(400)
  36. res.send(error.message)
  37. else if error instanceof Errors.AccountMergeError
  38. logger.error err: error, "account merge error"
  39. ErrorController.accountMergeError req, res
  40. else
  41. logger.error err: error, url:req.url, method:req.method, user:user, "error passed to top level next middlewear"
  42. ErrorController.serverError req, res
  43. handleApiError: (error, req, res, next) ->
  44. if error instanceof Errors.NotFoundError
  45. logger.warn {err: error, url: req.url}, "not found error"
  46. res.sendStatus(404)
  47. else
  48. logger.error err: error, url:req.url, method:req.method, "error passed to top level next middlewear"
  49. res.sendStatus(500)