summary refs log tree commit diff
path: root/synapse/api/ratelimiting.py
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2019-03-19 12:19:20 +0000
committerRichard van der Hoff <richard@matrix.org>2019-03-19 12:19:20 +0000
commit2561b628af267ab567118a3e40038504c60acf41 (patch)
treee283996a2db1e6fa540c1ae963ca7c03903d06cc /synapse/api/ratelimiting.py
parentRevert "Reinstate EDU-batching hacks" (diff)
parentfix test_auto_create_auto_join_where_no_consent (#4886) (diff)
downloadsynapse-2561b628af267ab567118a3e40038504c60acf41.tar.xz
Merge branch 'develop' into matrix-org-hotfixes
Diffstat (limited to 'synapse/api/ratelimiting.py')
-rw-r--r--synapse/api/ratelimiting.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/synapse/api/ratelimiting.py b/synapse/api/ratelimiting.py

index ad68079eeb..296c4a1c17 100644 --- a/synapse/api/ratelimiting.py +++ b/synapse/api/ratelimiting.py
@@ -14,6 +14,8 @@ import collections +from synapse.api.errors import LimitExceededError + class Ratelimiter(object): """ @@ -82,3 +84,13 @@ class Ratelimiter(object): break else: del self.message_counts[key] + + def ratelimit(self, key, time_now_s, rate_hz, burst_count, update=True): + allowed, time_allowed = self.can_do_action( + key, time_now_s, rate_hz, burst_count, update + ) + + if not allowed: + raise LimitExceededError( + retry_after_ms=int(1000 * (time_allowed - time_now_s)), + )