diff options
author | Mark Haines <mark.haines@matrix.org> | 2014-09-03 09:15:52 +0100 |
---|---|---|
committer | Mark Haines <mark.haines@matrix.org> | 2014-09-03 09:15:52 +0100 |
commit | 30ad0c567437d19ebb4b172c12a2e22f65d2dd9a (patch) | |
tree | 9961b92b2b0ea6084d0bdda11bf32cfde88fa833 /synapse/handlers/_base.py | |
parent | howto: Link jsfiddles correctly. Hide ugly TODOs. (diff) | |
parent | Fix tests to support ratelimiting (diff) | |
download | synapse-30ad0c567437d19ebb4b172c12a2e22f65d2dd9a.tar.xz |
Merge branch 'ratelimiting' into develop
Diffstat (limited to 'synapse/handlers/_base.py')
-rw-r--r-- | synapse/handlers/_base.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/synapse/handlers/_base.py b/synapse/handlers/_base.py index b37c8be964..935adea1ac 100644 --- a/synapse/handlers/_base.py +++ b/synapse/handlers/_base.py @@ -14,6 +14,7 @@ # limitations under the License. from twisted.internet import defer +from synapse.api.errors import LimitExceededError class BaseHandler(object): @@ -25,8 +26,22 @@ class BaseHandler(object): self.room_lock = hs.get_room_lock_manager() self.state_handler = hs.get_state_handler() self.distributor = hs.get_distributor() + self.ratelimiter = hs.get_ratelimiter() + self.clock = hs.get_clock() self.hs = hs + def ratelimit(self, user_id): + time_now = self.clock.time() + allowed, time_allowed = self.ratelimiter.send_message( + user_id, time_now, + msg_rate_hz=self.hs.config.rc_messages_per_second, + burst_count=self.hs.config.rc_message_burst_count, + ) + if not allowed: + raise LimitExceededError( + retry_after_ms=1000*(time_allowed - time_now), + ) + class BaseRoomHandler(BaseHandler): |