diff options
author | Travis Ralston <travpc@gmail.com> | 2018-11-28 08:57:56 -0700 |
---|---|---|
committer | Travis Ralston <travpc@gmail.com> | 2018-11-28 08:57:56 -0700 |
commit | 11a168442da40d44b003ec96b58a49ffa47cf037 (patch) | |
tree | 8de17402b82f96f0f46a002b51d327e2e053e477 /synapse/handlers/room_member.py | |
parent | Merge pull request #4218 from matrix-org/travis/account-merging (diff) | |
download | synapse-11a168442da40d44b003ec96b58a49ffa47cf037.tar.xz |
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.
Diffstat (limited to '')
-rw-r--r-- | synapse/handlers/room_member.py | 53 |
1 files changed, 28 insertions, 25 deletions
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( |