mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Inline _do_join as it now only has one caller
Also, consistently apply rate limiting. Again, ugly, but a step in the right direction.
This commit is contained in:
parent
e71095801f
commit
f318d4f2a4
@ -492,69 +492,6 @@ class RoomMemberHandler(BaseHandler):
|
|||||||
if not is_guest_access_allowed:
|
if not is_guest_access_allowed:
|
||||||
raise AuthError(403, "Guest access not allowed")
|
raise AuthError(403, "Guest access not allowed")
|
||||||
|
|
||||||
yield self._do_join(event, context, room_hosts=room_hosts)
|
|
||||||
else:
|
|
||||||
if event.membership == Membership.LEAVE:
|
|
||||||
is_host_in_room = yield self.is_host_in_room(room_id, context)
|
|
||||||
if not is_host_in_room:
|
|
||||||
# Rejecting an invite, rather than leaving a joined room
|
|
||||||
handler = self.hs.get_handlers().federation_handler
|
|
||||||
inviter = yield self.get_inviter(event)
|
|
||||||
if not inviter:
|
|
||||||
# return the same error as join_room_alias does
|
|
||||||
raise SynapseError(404, "No known servers")
|
|
||||||
yield handler.do_remotely_reject_invite(
|
|
||||||
[inviter.domain],
|
|
||||||
room_id,
|
|
||||||
event.user_id
|
|
||||||
)
|
|
||||||
defer.returnValue({"room_id": room_id})
|
|
||||||
return
|
|
||||||
|
|
||||||
# FIXME: This isn't idempotency.
|
|
||||||
if prev_state and prev_state.membership == event.membership:
|
|
||||||
# double same action, treat this event as a NOOP.
|
|
||||||
defer.returnValue({})
|
|
||||||
return
|
|
||||||
|
|
||||||
yield self._do_local_membership_update(
|
|
||||||
event,
|
|
||||||
context=context,
|
|
||||||
)
|
|
||||||
|
|
||||||
if prev_state and prev_state.membership == Membership.JOIN:
|
|
||||||
user = UserID.from_string(event.user_id)
|
|
||||||
user_left_room(self.distributor, user, event.room_id)
|
|
||||||
|
|
||||||
defer.returnValue({"room_id": room_id})
|
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
|
||||||
def lookup_room_alias(self, room_alias):
|
|
||||||
"""
|
|
||||||
Get the room ID associated with a room alias.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
room_alias (RoomAlias): The alias to look up.
|
|
||||||
Returns:
|
|
||||||
The room ID as a RoomID object.
|
|
||||||
Raises:
|
|
||||||
SynapseError if room alias could not be found.
|
|
||||||
"""
|
|
||||||
directory_handler = self.hs.get_handlers().directory_handler
|
|
||||||
mapping = yield directory_handler.get_association(room_alias)
|
|
||||||
|
|
||||||
if not mapping:
|
|
||||||
raise SynapseError(404, "No such room alias")
|
|
||||||
|
|
||||||
room_id = mapping["room_id"]
|
|
||||||
hosts = mapping["servers"]
|
|
||||||
if not hosts:
|
|
||||||
raise SynapseError(404, "No known servers")
|
|
||||||
|
|
||||||
defer.returnValue((RoomID.from_string(room_id), hosts))
|
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
|
||||||
def _do_join(self, event, context, room_hosts=None):
|
|
||||||
room_id = event.room_id
|
room_id = event.room_id
|
||||||
|
|
||||||
# XXX: We don't do an auth check if we are doing an invite
|
# XXX: We don't do an auth check if we are doing an invite
|
||||||
@ -589,6 +526,7 @@ class RoomMemberHandler(BaseHandler):
|
|||||||
yield self._do_local_membership_update(
|
yield self._do_local_membership_update(
|
||||||
event,
|
event,
|
||||||
context=context,
|
context=context,
|
||||||
|
ratelimit=ratelimit,
|
||||||
)
|
)
|
||||||
|
|
||||||
prev_state = context.current_state.get((event.type, event.state_key))
|
prev_state = context.current_state.get((event.type, event.state_key))
|
||||||
@ -598,6 +536,66 @@ class RoomMemberHandler(BaseHandler):
|
|||||||
# info.
|
# info.
|
||||||
user = UserID.from_string(event.user_id)
|
user = UserID.from_string(event.user_id)
|
||||||
yield user_joined_room(self.distributor, user, room_id)
|
yield user_joined_room(self.distributor, user, room_id)
|
||||||
|
else:
|
||||||
|
if event.membership == Membership.LEAVE:
|
||||||
|
is_host_in_room = yield self.is_host_in_room(room_id, context)
|
||||||
|
if not is_host_in_room:
|
||||||
|
# Rejecting an invite, rather than leaving a joined room
|
||||||
|
handler = self.hs.get_handlers().federation_handler
|
||||||
|
inviter = yield self.get_inviter(event)
|
||||||
|
if not inviter:
|
||||||
|
# return the same error as join_room_alias does
|
||||||
|
raise SynapseError(404, "No known servers")
|
||||||
|
yield handler.do_remotely_reject_invite(
|
||||||
|
[inviter.domain],
|
||||||
|
room_id,
|
||||||
|
event.user_id
|
||||||
|
)
|
||||||
|
defer.returnValue({"room_id": room_id})
|
||||||
|
return
|
||||||
|
|
||||||
|
# FIXME: This isn't idempotency.
|
||||||
|
if prev_state and prev_state.membership == event.membership:
|
||||||
|
# double same action, treat this event as a NOOP.
|
||||||
|
defer.returnValue({})
|
||||||
|
return
|
||||||
|
|
||||||
|
yield self._do_local_membership_update(
|
||||||
|
event,
|
||||||
|
context=context,
|
||||||
|
ratelimit=ratelimit,
|
||||||
|
)
|
||||||
|
|
||||||
|
if prev_state and prev_state.membership == Membership.JOIN:
|
||||||
|
user = UserID.from_string(event.user_id)
|
||||||
|
user_left_room(self.distributor, user, event.room_id)
|
||||||
|
|
||||||
|
defer.returnValue({"room_id": room_id})
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def lookup_room_alias(self, room_alias):
|
||||||
|
"""
|
||||||
|
Get the room ID associated with a room alias.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
room_alias (RoomAlias): The alias to look up.
|
||||||
|
Returns:
|
||||||
|
The room ID as a RoomID object.
|
||||||
|
Raises:
|
||||||
|
SynapseError if room alias could not be found.
|
||||||
|
"""
|
||||||
|
directory_handler = self.hs.get_handlers().directory_handler
|
||||||
|
mapping = yield directory_handler.get_association(room_alias)
|
||||||
|
|
||||||
|
if not mapping:
|
||||||
|
raise SynapseError(404, "No such room alias")
|
||||||
|
|
||||||
|
room_id = mapping["room_id"]
|
||||||
|
hosts = mapping["servers"]
|
||||||
|
if not hosts:
|
||||||
|
raise SynapseError(404, "No known servers")
|
||||||
|
|
||||||
|
defer.returnValue((RoomID.from_string(room_id), hosts))
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_inviter(self, event):
|
def get_inviter(self, event):
|
||||||
@ -653,7 +651,7 @@ class RoomMemberHandler(BaseHandler):
|
|||||||
defer.returnValue(room_ids)
|
defer.returnValue(room_ids)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _do_local_membership_update(self, event, context):
|
def _do_local_membership_update(self, event, context, ratelimit=True):
|
||||||
yield run_on_reactor()
|
yield run_on_reactor()
|
||||||
|
|
||||||
target_user = UserID.from_string(event.state_key)
|
target_user = UserID.from_string(event.state_key)
|
||||||
@ -662,6 +660,7 @@ class RoomMemberHandler(BaseHandler):
|
|||||||
event,
|
event,
|
||||||
context,
|
context,
|
||||||
extra_users=[target_user],
|
extra_users=[target_user],
|
||||||
|
ratelimit=ratelimit,
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
Loading…
Reference in New Issue
Block a user