summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorMathieu Velten <mathieuv@matrix.org>2023-05-12 15:47:15 +0200
committerMathieu Velten <mathieuv@matrix.org>2023-05-12 15:52:41 +0200
commit74a0e7ab8fb54974bf70162bd629e693a957f97d (patch)
treee78d1223fcd67e47718960f0f27986da5b889f60 /synapse
parentDon't return scheduled purges in the admin API (diff)
downloadsynapse-74a0e7ab8fb54974bf70162bd629e693a957f97d.tar.xz
Mark locally forgotten rooms for purging after `purge_retention_period`
Diffstat (limited to 'synapse')
-rw-r--r--synapse/handlers/room_member.py15
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],