LoginRateLimiter.coffee 606 B

1234567891011121314151617181920212223
  1. Settings = require('settings-sharelatex')
  2. redis = require("redis-sharelatex")
  3. rclient = redis.createClient(Settings.redis.web)
  4. buildKey = (k)->
  5. return "LoginRateLimit:#{k}"
  6. ONE_MIN = 60
  7. ATTEMPT_LIMIT = 10
  8. module.exports =
  9. processLoginRequest: (email, callback)->
  10. multi = rclient.multi()
  11. multi.incr(buildKey(email))
  12. multi.get(buildKey(email))
  13. multi.expire(buildKey(email), ONE_MIN * 2)
  14. multi.exec (err, results)->
  15. loginCount = results[1]
  16. allow = loginCount <= ATTEMPT_LIMIT
  17. callback err, allow
  18. recordSuccessfulLogin: (email, callback = ->)->
  19. rclient.del buildKey(email), callback