Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit b38984a

Browse files
committed
Rate limiting invites per issuer
1 parent 1017f09 commit b38984a

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

synapse/config/ratelimiting.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ def read_config(self, config: JsonDict, **kwargs: Any) -> None:
136136
defaults={"per_second": 0.003, "burst_count": 5},
137137
)
138138

139+
self.rc_invites_per_issuer = RateLimitConfig(
140+
config.get("rc_invites", {}).get("per_issuer", {}),
141+
defaults={"per_second": 0.003, "burst_count": 5},
142+
)
143+
139144
self.rc_third_party_invite = RateLimitConfig(
140145
config.get("rc_third_party_invite", {}),
141146
defaults={

synapse/handlers/room_member.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,33 @@ def __init__(self, hs: "HomeServer"):
101101
burst_count=hs.config.ratelimiting.rc_joins_remote.burst_count,
102102
)
103103

104+
# Ratelimiter for invites, keyed by room (across all issuers, all
105+
# recipients).
104106
self._invites_per_room_limiter = Ratelimiter(
105107
store=self.store,
106108
clock=self.clock,
107109
rate_hz=hs.config.ratelimiting.rc_invites_per_room.per_second,
108110
burst_count=hs.config.ratelimiting.rc_invites_per_room.burst_count,
109111
)
110-
self._invites_per_user_limiter = Ratelimiter(
112+
113+
# Ratelimiter for invites, keyed by recipient (across all rooms, all
114+
# issuers).
115+
self._invites_per_recipient_limiter = Ratelimiter(
111116
store=self.store,
112117
clock=self.clock,
113118
rate_hz=hs.config.ratelimiting.rc_invites_per_user.per_second,
114119
burst_count=hs.config.ratelimiting.rc_invites_per_user.burst_count,
115120
)
116121

122+
# Ratelimiter for invites, keyed by issuer (across all rooms, all
123+
# recipients).
124+
self._invites_per_issuer_limiter = Ratelimiter(
125+
store=self.store,
126+
clock=self.clock,
127+
rate_hz=hs.config.ratelimiting.rc_invites_per_issuer.per_second,
128+
burst_count=hs.config.ratelimiting.rc_invites_per_issuer.burst_count,
129+
)
130+
117131
self._third_party_invite_limiter = Ratelimiter(
118132
store=self.store,
119133
clock=self.clock,
@@ -258,7 +272,9 @@ async def ratelimit_invite(
258272
if room_id:
259273
await self._invites_per_room_limiter.ratelimit(requester, room_id)
260274

261-
await self._invites_per_user_limiter.ratelimit(requester, invitee_user_id)
275+
await self._invites_per_recipient_limiter.ratelimit(requester, invitee_user_id)
276+
if requester is not None:
277+
await self._invites_per_issuer_limiter.ratelimit(requester, requester.user)
262278

263279
async def _local_membership_update(
264280
self,

0 commit comments

Comments
 (0)