mirror of
https://github.com/overleaf/overleaf.git
synced 2025-02-17 03:22:10 +00:00
Log when rate limit is hit
This commit is contained in:
parent
993c5bcee7
commit
e35d80211e
2 changed files with 16 additions and 2 deletions
|
@ -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()
|
|
@ -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
|
||||
|
Loading…
Reference in a new issue