mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-01 07:26:02 -04:00
Correctly ratelimit invites when creating a room (#9968)
* Correctly ratelimit invites when creating a room Also allow ratelimiting for more than one action at a time.
This commit is contained in:
parent
7562d887e1
commit
a683028d81
6 changed files with 157 additions and 12 deletions
|
@ -463,6 +463,43 @@ class RoomsCreateTestCase(RoomBase):
|
|||
)
|
||||
self.assertEquals(400, channel.code)
|
||||
|
||||
@unittest.override_config({"rc_invites": {"per_room": {"burst_count": 3}}})
|
||||
def test_post_room_invitees_ratelimit(self):
|
||||
"""Test that invites sent when creating a room are ratelimited by a RateLimiter,
|
||||
which ratelimits them correctly, including by not limiting when the requester is
|
||||
exempt from ratelimiting.
|
||||
"""
|
||||
|
||||
# Build the request's content. We use local MXIDs because invites over federation
|
||||
# are more difficult to mock.
|
||||
content = json.dumps(
|
||||
{
|
||||
"invite": [
|
||||
"@alice1:red",
|
||||
"@alice2:red",
|
||||
"@alice3:red",
|
||||
"@alice4:red",
|
||||
]
|
||||
}
|
||||
).encode("utf8")
|
||||
|
||||
# Test that the invites are correctly ratelimited.
|
||||
channel = self.make_request("POST", "/createRoom", content)
|
||||
self.assertEqual(400, channel.code)
|
||||
self.assertEqual(
|
||||
"Cannot invite so many users at once",
|
||||
channel.json_body["error"],
|
||||
)
|
||||
|
||||
# Add the current user to the ratelimit overrides, allowing them no ratelimiting.
|
||||
self.get_success(
|
||||
self.hs.get_datastore().set_ratelimit_for_user(self.user_id, 0, 0)
|
||||
)
|
||||
|
||||
# Test that the invites aren't ratelimited anymore.
|
||||
channel = self.make_request("POST", "/createRoom", content)
|
||||
self.assertEqual(200, channel.code)
|
||||
|
||||
|
||||
class RoomTopicTestCase(RoomBase):
|
||||
""" Tests /rooms/$room_id/topic REST events. """
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue