summary refs log tree commit diff
path: root/synapse/handlers/room.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-08-20 14:42:36 +0100
committerErik Johnston <erik@matrix.org>2014-08-20 14:42:47 +0100
commit5ef0948eaa48d44822345efe04ec1612a96a4d37 (patch)
treecf9d5e86d966600181d2f74bfff5329d696b7329 /synapse/handlers/room.py
parentReplaced the image URL text input by a file selector button: "Send Image" (diff)
downloadsynapse-5ef0948eaa48d44822345efe04ec1612a96a4d37.tar.xz
Better handle the edge cases of trying to remote join rooms
Diffstat (limited to 'synapse/handlers/room.py')
-rw-r--r--synapse/handlers/room.py47
1 files changed, 10 insertions, 37 deletions
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 7ab881847d..6ecb6dd0e4 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -599,9 +599,9 @@ class RoomMemberHandler(BaseHandler):
         # that we are allowed to join when we decide whether or not we
         # need to do the invite/join dance.
 
-        room = yield self.store.get_room(room_id)
+        hosts = yield self.store.get_joined_hosts_for_room(room_id)
 
-        if room:
+        if self.hs.hostname in hosts:
             should_do_dance = False
         elif room_host:
             should_do_dance = True
@@ -621,8 +621,15 @@ class RoomMemberHandler(BaseHandler):
             else:
                 should_do_dance = False
 
+        have_joined = False
+        if should_do_dance:
+            handler = self.hs.get_handlers().federation_handler
+            have_joined = yield handler.do_invite_join(
+                room_host, room_id, event.user_id, event.content
+            )
+
         # We want to do the _do_update inside the room lock.
-        if not should_do_dance:
+        if not have_joined:
             logger.debug("Doing normal join")
 
             if do_auth:
@@ -635,14 +642,6 @@ class RoomMemberHandler(BaseHandler):
                 broadcast_msg=broadcast_msg,
             )
 
-        if should_do_dance:
-            yield self._do_invite_join_dance(
-                room_id=room_id,
-                joinee=event.user_id,
-                target_host=room_host,
-                content=event.content,
-            )
-
         user = self.hs.parse_userid(event.user_id)
         self.distributor.fire(
             "user_joined_room", user=user, room_id=room_id
@@ -749,32 +748,6 @@ class RoomMemberHandler(BaseHandler):
             )
 
     @defer.inlineCallbacks
-    def _do_invite_join_dance(self, room_id, joinee, target_host, content):
-        logger.debug("Doing remote join dance")
-
-        # do invite join dance
-        federation = self.hs.get_federation()
-        new_event = self.event_factory.create_event(
-            etype=InviteJoinEvent.TYPE,
-            target_host=target_host,
-            room_id=room_id,
-            user_id=joinee,
-            content=content
-        )
-
-        new_event.destinations = [target_host]
-
-        yield self.store.store_room(
-            room_id, "", is_public=False
-        )
-
-        # yield self.state_handler.handle_new_event(event)
-        yield federation.handle_new_event(new_event)
-        yield federation.get_state_for_room(
-            target_host, room_id
-        )
-
-    @defer.inlineCallbacks
     def _inject_membership_msg(self, room_id=None, source=None, target=None,
                                membership=None):
         # TODO this should be a different type of message, not m.text