diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2023-05-09 10:34:10 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-09 10:34:10 -0400 |
commit | 4b4e0dc3cecbe9ad65c4728c1ec461321d15789f (patch) | |
tree | bba2f02650eac695bb7e1f27f552b2a9c7d60f83 /synapse/handlers | |
parent | Use account data constants in more places. (#15554) (diff) | |
download | synapse-4b4e0dc3cecbe9ad65c4728c1ec461321d15789f.tar.xz |
Error if attempting to set m.push_rules account data, per MSC4010. (#15555)
m.push_rules, like m.fully_read, is a special account data type that cannot be set using the normal /account_data endpoint. Return an error instead of allowing data that will not be used to be stored.
Diffstat (limited to 'synapse/handlers')
-rw-r--r-- | synapse/handlers/push_rules.py | 16 | ||||
-rw-r--r-- | synapse/handlers/sync.py | 12 |
2 files changed, 17 insertions, 11 deletions
diff --git a/synapse/handlers/push_rules.py b/synapse/handlers/push_rules.py index 813f3aa2d5..7ed88a3611 100644 --- a/synapse/handlers/push_rules.py +++ b/synapse/handlers/push_rules.py @@ -11,14 +11,15 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from typing import TYPE_CHECKING, List, Optional, Union +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union import attr from synapse.api.errors import SynapseError, UnrecognizedRequestError +from synapse.push.clientformat import format_push_rules_for_user from synapse.storage.push_rule import RuleNotFoundException from synapse.synapse_rust.push import get_base_rule_ids -from synapse.types import JsonDict +from synapse.types import JsonDict, UserID if TYPE_CHECKING: from synapse.server import HomeServer @@ -115,6 +116,17 @@ class PushRulesHandler: stream_id = self._main_store.get_max_push_rules_stream_id() self._notifier.on_new_event("push_rules_key", stream_id, users=[user_id]) + async def push_rules_for_user( + self, user: UserID + ) -> Dict[str, Dict[str, List[Dict[str, Any]]]]: + """ + Push rules aren't really account data, but get formatted as such for /sync. + """ + user_id = user.to_string() + rules_raw = await self._main_store.get_push_rules_for_user(user_id) + rules = format_push_rules_for_user(user, rules_raw) + return rules + def check_actions(actions: List[Union[str, JsonDict]]) -> None: """Check if the given actions are spec compliant. diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index cc05b0afa0..c010405be6 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -50,7 +50,6 @@ from synapse.logging.opentracing import ( start_active_span, trace, ) -from synapse.push.clientformat import format_push_rules_for_user from synapse.storage.databases.main.event_push_actions import RoomNotifCounts from synapse.storage.databases.main.roommember import extract_heroes_from_room_summary from synapse.storage.roommember import MemberSummary @@ -261,6 +260,7 @@ class SyncHandler: self.notifier = hs.get_notifier() self.presence_handler = hs.get_presence_handler() self._relations_handler = hs.get_relations_handler() + self._push_rules_handler = hs.get_push_rules_handler() self.event_sources = hs.get_event_sources() self.clock = hs.get_clock() self.state = hs.get_state_handler() @@ -428,12 +428,6 @@ class SyncHandler: set_tag(SynapseTags.SYNC_RESULT, bool(sync_result)) return sync_result - async def push_rules_for_user(self, user: UserID) -> Dict[str, Dict[str, list]]: - user_id = user.to_string() - rules_raw = await self.store.get_push_rules_for_user(user_id) - rules = format_push_rules_for_user(user, rules_raw) - return rules - async def ephemeral_by_room( self, sync_result_builder: "SyncResultBuilder", @@ -1779,7 +1773,7 @@ class SyncHandler: global_account_data = dict(global_account_data) global_account_data[ AccountDataTypes.PUSH_RULES - ] = await self.push_rules_for_user(sync_config.user) + ] = await self._push_rules_handler.push_rules_for_user(sync_config.user) else: all_global_account_data = await self.store.get_global_account_data_for_user( user_id @@ -1788,7 +1782,7 @@ class SyncHandler: global_account_data = dict(all_global_account_data) global_account_data[ AccountDataTypes.PUSH_RULES - ] = await self.push_rules_for_user(sync_config.user) + ] = await self._push_rules_handler.push_rules_for_user(sync_config.user) account_data_for_user = ( await sync_config.filter_collection.filter_global_account_data( |