2323from typing import TYPE_CHECKING
2424
2525from synapse .api .errors import SynapseError
26+ from synapse .api .ratelimiting import Ratelimiter
2627from synapse .http .server import HttpServer
2728from synapse .http .servlet import RestServlet , parse_json_object_from_request
2829from synapse .http .site import SynapseRequest
@@ -46,6 +47,12 @@ def __init__(self, hs: "HomeServer"):
4647 self .auth = hs .get_auth ()
4748 self .user_directory_handler = hs .get_user_directory_handler ()
4849
50+ self ._per_user_limiter = Ratelimiter (
51+ store = hs .get_datastores ().main ,
52+ clock = hs .get_clock (),
53+ cfg = hs .config .ratelimiting .rc_user_directory ,
54+ )
55+
4956 async def on_POST (self , request : SynapseRequest ) -> tuple [int , JsonMapping ]:
5057 """Searches for users in directory
5158
@@ -69,6 +76,8 @@ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonMapping]:
6976 if not self .hs .config .userdirectory .user_directory_search_enabled :
7077 return 200 , {"limited" : False , "results" : []}
7178
79+ await self ._per_user_limiter .ratelimit (requester )
80+
7281 body = parse_json_object_from_request (request )
7382
7483 limit = int (body .get ("limit" , 10 ))
0 commit comments