diff options
author | Erik Johnston <erik@matrix.org> | 2014-08-20 14:42:36 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2014-08-20 14:42:47 +0100 |
commit | 5ef0948eaa48d44822345efe04ec1612a96a4d37 (patch) | |
tree | cf9d5e86d966600181d2f74bfff5329d696b7329 /synapse/handlers/room.py | |
parent | Replaced the image URL text input by a file selector button: "Send Image" (diff) | |
download | synapse-5ef0948eaa48d44822345efe04ec1612a96a4d37.tar.xz |
Better handle the edge cases of trying to remote join rooms
Diffstat (limited to '')
-rw-r--r-- | synapse/handlers/room.py | 47 |
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 |