LoginRateLimiter.js 830 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const { RateLimiter } = require('../../infrastructure/RateLimiter')
  2. const { promisifyAll } = require('@overleaf/promise-utils')
  3. const rateLimiter = new RateLimiter('login', {
  4. points: 10,
  5. duration: 120,
  6. })
  7. function processLoginRequest(email, callback) {
  8. rateLimiter
  9. .consume(email)
  10. .then(() => {
  11. callback(null, true)
  12. })
  13. .catch(err => {
  14. if (err instanceof Error) {
  15. callback(err)
  16. } else {
  17. callback(null, false)
  18. }
  19. })
  20. }
  21. function recordSuccessfulLogin(email, callback) {
  22. rateLimiter
  23. .delete(email)
  24. .then(() => {
  25. callback()
  26. })
  27. .catch(err => {
  28. callback(err)
  29. })
  30. }
  31. const LoginRateLimiter = {
  32. processLoginRequest,
  33. recordSuccessfulLogin,
  34. }
  35. LoginRateLimiter.promises = promisifyAll(LoginRateLimiter)
  36. module.exports = LoginRateLimiter