@@ -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