Log when rate limit is hit

This commit is contained in:
James Allen 2015-02-05 09:52:40 +00:00
parent 993c5bcee7
commit e35d80211e
2 changed files with 16 additions and 2 deletions

View file

@ -1,4 +1,5 @@
RateLimiter = require "../../infrastructure/RateLimiter"
logger = require "logger-sharelatex"
module.exports = RateLimiterMiddlewear =
###
@ -22,16 +23,18 @@ module.exports = RateLimiterMiddlewear =
params.push user_id
if !opts.endpointName?
throw new Error("no endpointName provided")
RateLimiter.addCount {
options = {
endpointName: opts.endpointName
timeInterval: opts.timeInterval or 60
subjectName: params.join(":")
throttle: opts.maxRequests or 6
}, (error, canContinue)->
}
RateLimiter.addCount options, (error, canContinue)->
return next(error) if error?
if canContinue
next()
else
logger.warn options, "rate limit exceeded"
res.status(429) # Too many requests
res.write("Rate limit reached, please try again later")
res.end()

View file

@ -7,6 +7,7 @@ describe "RateLimiterMiddlewear", ->
beforeEach ->
@RateLimiterMiddlewear = SandboxedModule.require modulePath, requires:
'../../infrastructure/RateLimiter' : @RateLimiter = {}
"logger-sharelatex": @logger = {warn: sinon.stub()}
@req =
params: {}
session: {}
@ -79,4 +80,14 @@ describe "RateLimiterMiddlewear", ->
it "should not continue", ->
@next.called.should.equal false
it "should log a warning", ->
@logger.warn
.calledWith({
endpointName: "test-endpoint"
timeInterval: 42
throttle: 12
subjectName: "#{@project_id}:#{@doc_id}:#{@user_id}"
}, "rate limit exceeded")
.should.equal true