ErrorController.coffee 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. forbidden: (req, res) ->
  10. res.status(403)
  11. res.render 'user/restricted'
  12. serverError: (req, res)->
  13. res.status(500)
  14. res.render 'general/500',
  15. title: "Server Error"
  16. accountMergeError: (req, res)->
  17. res.status(500)
  18. res.render 'general/account-merge-error',
  19. title: "Account Access Error"
  20. handleError: (error, req, res, next) ->
  21. user = AuthenticationController.getSessionUser(req)
  22. if error?.code is 'EBADCSRFTOKEN'
  23. logger.warn err: error,url:req.url, method:req.method, user:user, "invalid csrf"
  24. res.sendStatus(403)
  25. return
  26. if error instanceof Errors.NotFoundError
  27. logger.warn {err: error, url: req.url}, "not found error"
  28. ErrorController.notFound req, res
  29. else if error instanceof Errors.ForbiddenError
  30. logger.error err: error, "forbidden error"
  31. ErrorController.forbidden req, res
  32. else if error instanceof Errors.TooManyRequestsError
  33. logger.warn {err: error, url: req.url}, "too many requests error"
  34. res.sendStatus(429)
  35. else if error instanceof Errors.InvalidError
  36. logger.warn {err: error, url: req.url}, "invalid error"
  37. res.status(400)
  38. res.send(error.message)
  39. else if error instanceof Errors.InvalidNameError
  40. logger.warn {err: error, url: req.url}, "invalid name error"
  41. res.status(400)
  42. res.send(error.message)
  43. else if error instanceof Errors.AccountMergeError
  44. logger.error err: error, "account merge error"
  45. ErrorController.accountMergeError req, res
  46. else
  47. logger.error err: error, url:req.url, method:req.method, user:user, "error passed to top level next middlewear"
  48. ErrorController.serverError req, res
  49. handleApiError: (error, req, res, next) ->
  50. if error instanceof Errors.NotFoundError
  51. logger.warn {err: error, url: req.url}, "not found error"
  52. res.sendStatus(404)
  53. else
  54. logger.error err: error, url:req.url, method:req.method, "error passed to top level next middlewear"
  55. res.sendStatus(500)