From 11a168442da40d44b003ec96b58a49ffa47cf037 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 28 Nov 2018 08:57:56 -0700 Subject: Catch room profile errors and anything else that can go wrong Fixes an issue where things become unhappy when the room profile for a user is missing. --- synapse/handlers/room_member.py | 53 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 25 deletions(-) (limited to 'synapse/handlers/room_member.py') diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 147f8e1789..f463bb3349 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -464,31 +464,34 @@ class RoomMemberHandler(object): @defer.inlineCallbacks def _send_merged_user_invites(self, requester, room_id): - profile_alias = "#_profile_" + requester.user.localpart + ":" + self.hs.hostname - profile_alias = RoomAlias.from_string(profile_alias) - profile_room_id, remote_room_hosts = yield self.lookup_room_alias(profile_alias) - if profile_room_id: - linked_accounts = yield self.state_handler.get_current_state( - room_id=profile_room_id.to_string(), - event_type="m.linked_accounts", - state_key="", - ) - if not linked_accounts or not linked_accounts.content['all_children']: - return - for child_id in linked_accounts.content['all_children']: - child = UserID.from_string(child_id) - if self.hs.is_mine(child) or child_id == requester.user.to_string(): - # TODO: Handle auto-invite for local users (not a priority) - continue - try: - yield self.update_membership( - requester=requester, - target=child, - room_id=room_id, - action="invite", - ) - except Exception: - logger.exception("Failed to invite %s to %s" % (child_id, room_id)) + try: + profile_alias = "#_profile_" + requester.user.localpart + ":" + self.hs.hostname + profile_alias = RoomAlias.from_string(profile_alias) + profile_room_id, remote_room_hosts = yield self.lookup_room_alias(profile_alias) + if profile_room_id: + linked_accounts = yield self.state_handler.get_current_state( + room_id=profile_room_id.to_string(), + event_type="m.linked_accounts", + state_key="", + ) + if not linked_accounts or not linked_accounts.content['all_children']: + return + for child_id in linked_accounts.content['all_children']: + child = UserID.from_string(child_id) + if self.hs.is_mine(child) or child_id == requester.user.to_string(): + # TODO: Handle auto-invite for local users (not a priority) + continue + try: + yield self.update_membership( + requester=requester, + target=child, + room_id=room_id, + action="invite", + ) + except Exception: + logger.exception("Failed to invite %s to %s" % (child_id, room_id)) + except Exception: + logger.exception("Failed to send invites to children of %s in %s" % (requester.user.to_string(), room_id)) @defer.inlineCallbacks def send_membership_event( -- cgit 1.5.1