diff --git a/services/web/app/coffee/Features/Security/RateLimiterMiddlewear.coffee b/services/web/app/coffee/Features/Security/RateLimiterMiddlewear.coffee index 8e7f1f7bc5..19b8c15648 100644 --- a/services/web/app/coffee/Features/Security/RateLimiterMiddlewear.coffee +++ b/services/web/app/coffee/Features/Security/RateLimiterMiddlewear.coffee @@ -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() \ No newline at end of file diff --git a/services/web/test/UnitTests/coffee/Security/RateLimiterMiddlewearTests.coffee b/services/web/test/UnitTests/coffee/Security/RateLimiterMiddlewearTests.coffee index 0a7b4dfbc5..fa9c148b3e 100644 --- a/services/web/test/UnitTests/coffee/Security/RateLimiterMiddlewearTests.coffee +++ b/services/web/test/UnitTests/coffee/Security/RateLimiterMiddlewearTests.coffee @@ -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 \ No newline at end of file