1 files changed, 17 insertions, 0 deletions
diff --git a/synapse/handlers/_base.py b/synapse/handlers/_base.py
index b37c8be964..dc1298366e 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 cs_error, Codes
class BaseHandler(object):
@@ -25,8 +26,24 @@ 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_messsage_burst_count,
+ )
+ if not allowed:
+ raise cs_error(
+ "Limit exceeded",
+ Codes.M_LIMIT_EXCEEDED,
+ retry_after_ms=1000*(time_allowed - time_now),
+ )
+
class BaseRoomHandler(BaseHandler):
|