diff options
author | Mathieu Velten <mathieuv@matrix.org> | 2023-05-12 15:47:15 +0200 |
---|---|---|
committer | Mathieu Velten <mathieuv@matrix.org> | 2023-05-12 15:52:41 +0200 |
commit | 74a0e7ab8fb54974bf70162bd629e693a957f97d (patch) | |
tree | e78d1223fcd67e47718960f0f27986da5b889f60 /synapse | |
parent | Don't return scheduled purges in the admin API (diff) | |
download | synapse-74a0e7ab8fb54974bf70162bd629e693a957f97d.tar.xz |
Mark locally forgotten rooms for purging after `purge_retention_period`
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/handlers/room_member.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index af0ca5c26d..09fd567e3b 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -38,6 +38,7 @@ from synapse.event_auth import get_named_level, get_power_level_event from synapse.events import EventBase from synapse.events.snapshot import EventContext from synapse.handlers.profile import MAX_AVATAR_URL_LEN, MAX_DISPLAYNAME_LEN +from synapse.handlers.room import DeleteStatus from synapse.handlers.state_deltas import MatchChange, StateDeltasHandler from synapse.logging import opentracing from synapse.metrics import event_processing_positions @@ -56,6 +57,7 @@ from synapse.types import ( from synapse.types.state import StateFilter from synapse.util.async_helpers import Linearizer from synapse.util.distributor import user_left_room +from synapse.util.stringutils import random_string if TYPE_CHECKING: from synapse.server import HomeServer @@ -176,6 +178,8 @@ class RoomMemberHandler(metaclass=abc.ABCMeta): self._msc3970_enabled = hs.config.experimental.msc3970_enabled + self._purge_retention_period = hs.config.server.purge_retention_period + def _on_user_joined_room(self, event_id: str, room_id: str) -> None: """Notify the rate limiter that a room join has occurred. @@ -305,6 +309,17 @@ class RoomMemberHandler(metaclass=abc.ABCMeta): # the table `current_state_events` and `get_current_state_events` is `None`. await self.store.forget(user_id, room_id) + if self._purge_retention_period and await self.store.is_locally_forgotten_room( + room_id + ): + delete_id = random_string(16) + await self.store.upsert_room_to_purge( + room_id, + delete_id, + DeleteStatus.STATUS_WAIT_PURGE, + timestamp=self.clock.time_msec() + self._purge_retention_period, + ) + async def ratelimit_multiple_invites( self, requester: Optional[Requester], |