From d0aa8d00fc2132ed38adde298b6ab9b6e756fabf Mon Sep 17 00:00:00 2001 From: Jason Robinson Date: Tue, 7 Jul 2026 19:14:04 +0300 Subject: [PATCH] Revert "Make `delete_profile_upon_deactivation` first delete the profile fields, to update the profile updates stream" This reverts commit 1937e764ad6c0eabb272dd8a88aac6b11004fffe. --- synapse/handlers/profile.py | 47 +++++++++++++++---------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/synapse/handlers/profile.py b/synapse/handlers/profile.py index 025001467e..f937dc1a23 100644 --- a/synapse/handlers/profile.py +++ b/synapse/handlers/profile.py @@ -566,39 +566,30 @@ class ProfileHandler: # have it. raise AuthError(400, "Cannot remove another user's profile") - current_profile = await self.store.get_profileinfo(target_user) + profile_updates: list[tuple[str, JsonValue | None]] = [] + current_profile: ProfileInfo | None = None - # First delete the profile fields individually. - # This ensures we also populate the profile update stream correctly. - if current_profile.display_name is not None: - await self.dispatch_set_profile_field( - target_user=target_user, - requester=requester, - field_name=ProfileFields.DISPLAYNAME, - new_value="", - by_admin=by_admin, - ) - if current_profile.avatar_url is not None: - await self.dispatch_set_profile_field( - target_user=target_user, - requester=requester, - field_name=ProfileFields.AVATAR_URL, - new_value="", - by_admin=by_admin, - ) + if self._msc4429_enabled: + if current_profile is None: + current_profile = await self.store.get_profileinfo(target_user) - custom_fields = await self.store.get_profile_fields(target_user) - for field_name in custom_fields.keys(): - await self.dispatch_delete_profile_field( - target_user=target_user, - requester=requester, - field_name=field_name, - by_admin=by_admin, - ) + if current_profile.display_name is not None: + profile_updates.append((ProfileFields.DISPLAYNAME, None)) + if current_profile.avatar_url is not None: + profile_updates.append((ProfileFields.AVATAR_URL, None)) + + custom_fields = await self.store.get_profile_fields(target_user) + for field_name in custom_fields.keys(): + profile_updates.append((field_name, None)) - # Remove the whole profile from the database await self.store.delete_profile(target_user) + # Record profile updates for the profile update stream + if len(profile_updates): + await self._dispatch_record_profile_updates( + target_user, {field_name for field_name, _value in profile_updates} + ) + await self._third_party_rules.on_profile_update( target_user.to_string(), ProfileInfo(None, None),