diff --git a/synapse/replication/http/push.py b/synapse/replication/http/push.py
index 8e5641707a..de07e75b46 100644
--- a/synapse/replication/http/push.py
+++ b/synapse/replication/http/push.py
@@ -77,5 +77,46 @@ class ReplicationRemovePusherRestServlet(ReplicationEndpoint):
return 200, {}
+class ReplicationCopyPusherRestServlet(ReplicationEndpoint):
+ """Copies push rules from an old room to new room.
+
+ Request format:
+
+ POST /_synapse/replication/copy_push_rules/:user_id/:old_room_id/:new_room_id
+
+ {}
+
+ """
+
+ NAME = "copy_push_rules"
+ PATH_ARGS = ("user_id", "old_room_id", "new_room_id")
+ CACHE = False
+
+ def __init__(self, hs: "HomeServer"):
+ super().__init__(hs)
+
+ self._store = hs.get_datastores().main
+
+ @staticmethod
+ async def _serialize_payload(user_id: str, old_room_id: str, new_room_id: str) -> JsonDict: # type: ignore[override]
+ return {}
+
+ async def _handle_request( # type: ignore[override]
+ self,
+ request: Request,
+ content: JsonDict,
+ user_id: str,
+ old_room_id: str,
+ new_room_id: str,
+ ) -> Tuple[int, JsonDict]:
+
+ await self._store.copy_push_rules_from_room_to_room_for_user(
+ old_room_id, new_room_id, user_id
+ )
+
+ return 200, {}
+
+
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
ReplicationRemovePusherRestServlet(hs).register(http_server)
+ ReplicationCopyPusherRestServlet(hs).register(http_server)
|