Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Merge pull request #2981 from matrix-org/erikj/factor_remote_leave
Browse files Browse the repository at this point in the history
Factor out _remote_reject_invite in RoomMember
erikjohnston authored Mar 13, 2018

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents 56e7098 + bf8e97b commit 5d8476d
Showing 1 changed file with 54 additions and 22 deletions.
76 changes: 54 additions & 22 deletions synapse/handlers/room_member.py
Original file line number Diff line number Diff line change
@@ -138,6 +138,19 @@ def _local_membership_update(

@defer.inlineCallbacks
def _remote_join(self, remote_room_hosts, room_id, user, content):
"""Try and join a room that this server is not in
Args:
remote_room_hosts (list[str]): List of servers that can be used
to join via.
room_id (str): Room that we are trying to join
user (UserID): User who is trying to join
content (dict): A dict that should be used as the content of the
join event.
Returns:
Deferred
"""
if len(remote_room_hosts) == 0:
raise SynapseError(404, "No known servers")

@@ -153,6 +166,43 @@ def _remote_join(self, remote_room_hosts, room_id, user, content):
)
yield user_joined_room(self.distributor, user, room_id)

@defer.inlineCallbacks
def _remote_reject_invite(self, remote_room_hosts, room_id, target):
"""Attempt to reject an invite for a room this server is not in. If we
fail to do so we locally mark the invite as rejected.
Args:
remote_room_hosts (list[str]): List of servers to use to try and
reject invite
room_id (str)
target (UserID): The user rejecting the invite
Returns:
Deferred[dict]: A dictionary to be returned to the client, may
include event_id etc, or nothing if we locally rejected
"""
fed_handler = self.federation_handler
try:
ret = yield fed_handler.do_remotely_reject_invite(
remote_room_hosts,
room_id,
target.to_string(),
)
defer.returnValue(ret)
except Exception as e:
# if we were unable to reject the exception, just mark
# it as rejected on our end and plough ahead.
#
# The 'except' clause is very broad, but we need to
# capture everything from DNS failures upwards
#
logger.warn("Failed to reject invite: %s", e)

yield self.store.locally_reject_invite(
target.to_string(), room_id
)
defer.returnValue({})

@defer.inlineCallbacks
def update_membership(
self,
@@ -327,28 +377,10 @@ def _update_membership(
else:
# send the rejection to the inviter's HS.
remote_room_hosts = remote_room_hosts + [inviter.domain]
fed_handler = self.federation_handler
try:
ret = yield fed_handler.do_remotely_reject_invite(
remote_room_hosts,
room_id,
target.to_string(),
)
defer.returnValue(ret)
except Exception as e:
# if we were unable to reject the exception, just mark
# it as rejected on our end and plough ahead.
#
# The 'except' clause is very broad, but we need to
# capture everything from DNS failures upwards
#
logger.warn("Failed to reject invite: %s", e)

yield self.store.locally_reject_invite(
target.to_string(), room_id
)

defer.returnValue({})
res = yield self._remote_reject_invite(
remote_room_hosts, room_id, target,
)
defer.returnValue(res)

res = yield self._local_membership_update(
requester=requester,

0 comments on commit 5d8476d

Please sign in to comment.