Skip to content

Commit

Permalink
Upon deactivation, forget all of the user's rooms (#17400)
Browse files Browse the repository at this point in the history
This can help ensure that the rooms are eventually purged if the other
local users also forget them. Synapse already clears some of the room
information as part of the `_background_remove_left_rooms` background
task, but this doesn't catch `events`, `event_json`, etc.
  • Loading branch information
turt2live authored Jul 5, 2024
1 parent daeaeb2 commit 2ec257d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/17400.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Forget all of a user's rooms upon deactivation, enabling future purges.
4 changes: 4 additions & 0 deletions synapse/handlers/deactivate_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,10 @@ async def _part_user(self, user_id: str) -> None:
ratelimit=False,
require_consent=False,
)

# Mark the room forgotten too, because they won't be able to do this
# for us. This may lead to the room being purged eventually.
await self._room_member_handler.forget(user, room_id)
except Exception:
logger.exception(
"Failed to part user %r from room %r: ignoring and continuing",
Expand Down
22 changes: 22 additions & 0 deletions tests/handlers/test_deactivate_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -461,3 +461,25 @@ def test_membership_is_redacted_upon_deactivation(self) -> None:
# Validate that there is no displayname in any of the events
for event in events:
self.assertTrue("displayname" not in event.content)

def test_rooms_forgotten_upon_deactivation(self) -> None:
"""
Tests that the user 'forgets' the rooms they left upon deactivation.
"""
# Create a room
room_id = self.helper.create_room_as(
self.user,
is_public=True,
tok=self.token,
)

# Deactivate the account
self._deactivate_my_account()

# Get all of the user's forgotten rooms
forgotten_rooms = self.get_success(
self._store.get_forgotten_rooms_for_user(self.user)
)

# Validate that the created room is forgotten
self.assertTrue(room_id in forgotten_rooms)

0 comments on commit 2ec257d

Please # to comment.