summary refs log tree commit diff
path: root/synapse/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/handlers')
-rw-r--r--synapse/handlers/_base.py20
-rw-r--r--synapse/handlers/room.py5
2 files changed, 17 insertions, 8 deletions
diff --git a/synapse/handlers/_base.py b/synapse/handlers/_base.py
index c1f40a4ec0..363b10e3b7 100644
--- a/synapse/handlers/_base.py
+++ b/synapse/handlers/_base.py
@@ -208,14 +208,22 @@ class BaseHandler(object):
                 builder.sender, builder.room_id
             )
 
-            # if we have the prev_member_event in context, we didn't receive
-            # the invite over federation. (More likely is that the inviting
-            # user, and all other local users, have left, making
-            # is_host_in_room return false).
+            # The prev_member_event may already be in context.current_state,
+            # despite us not being present in the room; in particular, if
+            # inviting user, and all other local users, have already left.
             #
-            context_events = (e.event_id for e in context.current_state.values())
+            # In that case, we have all the information we need, and we don't
+            # want to drop "context" - not least because we may need to handle
+            # the invite locally, which will require us to have the whole
+            # context (not just prev_member_event) to auth it.
+            #
+            context_event_ids = (
+                e.event_id for e in context.current_state.values()
+            )
 
-            if prev_member_event and prev_member_event.event_id not in context_events:
+            if (prev_member_event and
+                prev_member_event.event_id not in context_event_ids
+            ):
                 # The prev_member_event is missing from context, so it must
                 # have arrived over federation and is an outlier. We forcibly
                 # set our context to the invite we received over federation
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 714bff1750..de72398588 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -528,7 +528,7 @@ class RoomMemberHandler(BaseHandler):
                 if not inviter:
                     raise SynapseError(404, "Not a known room")
 
-                if inviter.domain == self.server_name:
+                if self.hs.is_mine(inviter):
                     # the inviter was on our server, but has now left. Carry on
                     # with the normal rejection codepath.
                     #
@@ -537,7 +537,8 @@ class RoomMemberHandler(BaseHandler):
                     pass
                 else:
                     # send the rejection to the inviter's HS.
-                    remote_room_hosts = [inviter.domain]
+                    remote_room_hosts = remote_room_hosts or []
+                    remote_room_hosts.append(inviter.domain)
                     action = "remote_reject"
 
         federation_handler = self.hs.get_handlers().federation_handler