diff options
author | Erik Johnston <erikj@jki.re> | 2018-03-13 15:44:56 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-13 15:44:56 +0000 |
commit | 5d8476d8fff7dc204db58147483c93c2a9be1b3e (patch) | |
tree | 61234343a3cd67fc1b14793bacc928d56fc4f788 /synapse | |
parent | Merge pull request #2979 from matrix-org/erikj/no_handlers (diff) | |
parent | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/factor_rem... (diff) | |
download | synapse-5d8476d8fff7dc204db58147483c93c2a9be1b3e.tar.xz |
Merge pull request #2981 from matrix-org/erikj/factor_remote_leave
Factor out _remote_reject_invite in RoomMember
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/handlers/room_member.py | 76 |
1 files changed, 54 insertions, 22 deletions
diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 2dbd6b5184..0127cf4166 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -138,6 +138,19 @@ class RoomMemberHandler(object): @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") @@ -154,6 +167,43 @@ class RoomMemberHandler(object): 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, requester, @@ -327,28 +377,10 @@ class RoomMemberHandler(object): 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, |