Skip to content
Snippets Groups Projects
Unverified Commit de655e66 authored by Erik Johnston's avatar Erik Johnston Committed by GitHub
Browse files

Merge pull request #5104 from matrix-org/erikj/ratelimit_3pid_invite

Ratelimit 3pid invites
parents 59e2d269 176f31c2
No related branches found
No related tags found
No related merge requests found
Fix the ratelimting on third party invites.
...@@ -33,6 +33,8 @@ from synapse.types import RoomID, UserID ...@@ -33,6 +33,8 @@ from synapse.types import RoomID, UserID
from synapse.util.async_helpers import Linearizer from synapse.util.async_helpers import Linearizer
from synapse.util.distributor import user_joined_room, user_left_room from synapse.util.distributor import user_joined_room, user_left_room
from ._base import BaseHandler
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
id_server_scheme = "https://" id_server_scheme = "https://"
...@@ -72,6 +74,11 @@ class RoomMemberHandler(object): ...@@ -72,6 +74,11 @@ class RoomMemberHandler(object):
self._server_notices_mxid = self.config.server_notices_mxid self._server_notices_mxid = self.config.server_notices_mxid
self._enable_lookup = hs.config.enable_3pid_lookup self._enable_lookup = hs.config.enable_3pid_lookup
# This is only used to get at ratelimit function, and
# maybe_kick_guest_users. It's fine there are multiple of these as
# it doesn't store state.
self.base_handler = BaseHandler(hs)
@abc.abstractmethod @abc.abstractmethod
def _remote_join(self, requester, remote_room_hosts, room_id, user, content): def _remote_join(self, requester, remote_room_hosts, room_id, user, content):
"""Try and join a room that this server is not in """Try and join a room that this server is not in
...@@ -703,6 +710,10 @@ class RoomMemberHandler(object): ...@@ -703,6 +710,10 @@ class RoomMemberHandler(object):
Codes.FORBIDDEN, Codes.FORBIDDEN,
) )
# We need to rate limit *before* we send out any 3PID invites, so we
# can't just rely on the standard ratelimiting of events.
yield self.base_handler.ratelimit(requester)
invitee = yield self._lookup_3pid( invitee = yield self._lookup_3pid(
id_server, medium, address id_server, medium, address
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment