From 26f612cb0bb9d60af24017fb94ecbfef5c16b14e Mon Sep 17 00:00:00 2001 From: Anubhav Jain Date: Tue, 30 Jun 2015 11:17:40 -0700 Subject: [PATCH] Moving DDPRateLimiter to a weak dependency to minimize dependencies on DDP --- packages/ddp-server/livedata_server.js | 57 +++++++++++++++----------- packages/ddp-server/package.js | 2 +- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/packages/ddp-server/livedata_server.js b/packages/ddp-server/livedata_server.js index 1dbe62e24b..1b2886636a 100644 --- a/packages/ddp-server/livedata_server.js +++ b/packages/ddp-server/livedata_server.js @@ -580,22 +580,26 @@ _.extend(Session.prototype, { // reconnect. return; - var rateLimiterInput = { - userId: self.userId, - ipAddr: self.connectionHandle.clientAddress, - type: msg.msg, - name: msg.name, - sessionId: self.id - }; + if (Package['ddp-rate-limiter']) { + var DDPRateLimiter = Package['ddp-rate-limiter'].DDPRateLimiter; + var rateLimiterInput = { + userId: self.userId, + ipAddr: self.connectionHandle.clientAddress, + type: msg.msg, + name: msg.name, + sessionId: self.id + }; - DDPRateLimiter._increment(rateLimiterInput); - var rateLimitResult = DDPRateLimiter._check(rateLimiterInput) - if (!rateLimitResult.allowed) { - self.send({ - msg: 'nosub', id: msg.id, - error: new Meteor.Error('too-many-requests', DDPRateLimiter.getErrorMessage(rateLimitResult)) - }); + DDPRateLimiter._increment(rateLimiterInput); + var rateLimitResult = DDPRateLimiter._check(rateLimiterInput) + if (!rateLimitResult.allowed) { + self.send({ + msg: 'nosub', id: msg.id, + error: new Meteor.Error('too-many-requests', DDPRateLimiter.getErrorMessage(rateLimitResult)) + }); + } } + var handler = self.server.publish_handlers[msg.name]; self._startSubscription(handler, msg.id, msg.params, msg.name); @@ -663,17 +667,20 @@ _.extend(Session.prototype, { }); try { - var rateLimiterInput = { - userId: self.userId, - ipAddr: self.connectionHandle.clientAddress, - type: msg.msg, - name: msg.method, - sessionId: self.id - }; - DDPRateLimiter._increment(rateLimiterInput); - var rateLimitResult = DDPRateLimiter._check(rateLimiterInput) - if (!rateLimitResult.allowed) { - throw new Meteor.Error("too-many-requests", DDPRateLimiter.getErrorMessage(rateLimitResult)); + if (Package['ddp-rate-limiter']) { + var DDPRateLimiter = Package['ddp-rate-limiter'].DDPRateLimiter; + var rateLimiterInput = { + userId: self.userId, + ipAddr: self.connectionHandle.clientAddress, + type: msg.msg, + name: msg.method, + sessionId: self.id + }; + DDPRateLimiter._increment(rateLimiterInput); + var rateLimitResult = DDPRateLimiter._check(rateLimiterInput) + if (!rateLimitResult.allowed) { + throw new Meteor.Error("too-many-requests", DDPRateLimiter.getErrorMessage(rateLimitResult)); + } } var result = DDPServer._CurrentWriteFence.withValue(fence, function () { diff --git a/packages/ddp-server/package.js b/packages/ddp-server/package.js index b76435494a..427a47ecb3 100644 --- a/packages/ddp-server/package.js +++ b/packages/ddp-server/package.js @@ -15,7 +15,7 @@ Package.onUse(function (api) { // common functionality api.use('ddp-common', 'server'); // heartbeat - api.use('ddp-rate-limiter'); + api.use('ddp-rate-limiter', 'server', {weak: true}); // Transport api.use('ddp-client', 'server'); api.imply('ddp-client');