diff --git a/changelog.d/17022.feature b/changelog.d/17022.feature
new file mode 100644
index 0000000000..be5bda425e
--- /dev/null
+++ b/changelog.d/17022.feature
@@ -0,0 +1 @@
+Stabilize support for [MSC4010](https://github.com/matrix-org/matrix-spec-proposals/pull/4010) which clarifies the interaction of push rules and account data. Contributed by @clokep.
\ No newline at end of file
diff --git a/synapse/config/experimental.py b/synapse/config/experimental.py
index cc0c91a175..fcc78d2d81 100644
--- a/synapse/config/experimental.py
+++ b/synapse/config/experimental.py
@@ -404,11 +404,6 @@ class ExperimentalConfig(Config):
# Check that none of the other config options conflict with MSC3861 when enabled
self.msc3861.check_config_conflicts(self.root)
- # MSC4010: Do not allow setting m.push_rules account data.
- self.msc4010_push_rules_account_data = experimental.get(
- "msc4010_push_rules_account_data", False
- )
-
self.msc4028_push_encrypted_events = experimental.get(
"msc4028_push_encrypted_events", False
)
diff --git a/synapse/rest/client/account_data.py b/synapse/rest/client/account_data.py
index 12ffca984f..0ee24081fa 100644
--- a/synapse/rest/client/account_data.py
+++ b/synapse/rest/client/account_data.py
@@ -81,8 +81,7 @@ class AccountDataServlet(RestServlet):
raise AuthError(403, "Cannot add account data for other users.")
# Raise an error if the account data type cannot be set directly.
- if self._hs.config.experimental.msc4010_push_rules_account_data:
- _check_can_set_account_data_type(account_data_type)
+ _check_can_set_account_data_type(account_data_type)
body = parse_json_object_from_request(request)
@@ -108,10 +107,7 @@ class AccountDataServlet(RestServlet):
raise AuthError(403, "Cannot get account data for other users.")
# Push rules are stored in a separate table and must be queried separately.
- if (
- self._hs.config.experimental.msc4010_push_rules_account_data
- and account_data_type == AccountDataTypes.PUSH_RULES
- ):
+ if account_data_type == AccountDataTypes.PUSH_RULES:
account_data: Optional[JsonMapping] = (
await self._push_rules_handler.push_rules_for_user(requester.user)
)
@@ -162,8 +158,7 @@ class UnstableAccountDataServlet(RestServlet):
raise AuthError(403, "Cannot delete account data for other users.")
# Raise an error if the account data type cannot be set directly.
- if self._hs.config.experimental.msc4010_push_rules_account_data:
- _check_can_set_account_data_type(account_data_type)
+ _check_can_set_account_data_type(account_data_type)
await self.handler.remove_account_data_for_user(user_id, account_data_type)
@@ -209,15 +204,7 @@ class RoomAccountDataServlet(RestServlet):
)
# Raise an error if the account data type cannot be set directly.
- if self._hs.config.experimental.msc4010_push_rules_account_data:
- _check_can_set_account_data_type(account_data_type)
- elif account_data_type == ReceiptTypes.FULLY_READ:
- raise SynapseError(
- 405,
- "Cannot set m.fully_read through this API."
- " Use /rooms/!roomId:server.name/read_markers",
- Codes.BAD_JSON,
- )
+ _check_can_set_account_data_type(account_data_type)
body = parse_json_object_from_request(request)
@@ -256,10 +243,7 @@ class RoomAccountDataServlet(RestServlet):
)
# Room-specific push rules are not currently supported.
- if (
- self._hs.config.experimental.msc4010_push_rules_account_data
- and account_data_type == AccountDataTypes.PUSH_RULES
- ):
+ if account_data_type == AccountDataTypes.PUSH_RULES:
account_data: Optional[JsonMapping] = {}
else:
account_data = await self.store.get_account_data_for_room_and_type(
@@ -317,8 +301,7 @@ class UnstableRoomAccountDataServlet(RestServlet):
)
# Raise an error if the account data type cannot be set directly.
- if self._hs.config.experimental.msc4010_push_rules_account_data:
- _check_can_set_account_data_type(account_data_type)
+ _check_can_set_account_data_type(account_data_type)
await self.handler.remove_account_data_for_room(
user_id, room_id, account_data_type
|