mirror of
https://github.com/element-hq/synapse.git
synced 2026-11-04 17:47:28 +00:00
TLDR: `PUT` on a server-default push rule now applies the same existence check that `GET` already does. A rule that is not served cannot be modified. Synapse ships some server-default push rules behind experimental feature flags, so the set of server-default rules a user has depends on the server's configuration. Most flags add rules that only exist while the flag is on. [MSC4210](https://github.com/matrix-org/matrix-spec-proposals/pull/4210) works the other way: it removes the three legacy mention rules while its flag is on. The flags that change the set are: - `msc1767_enabled`: [MSC1767](https://github.com/matrix-org/matrix-spec-proposals/pull/1767) extensible events rules - `msc3381_polls_enabled`: [MSC3381](https://github.com/matrix-org/matrix-spec-proposals/pull/3381) poll rules - `msc3664_enabled`: [MSC3664](https://github.com/matrix-org/matrix-spec-proposals/pull/3664) reply rule - `msc4028_push_encrypted_events`: [MSC4028](https://github.com/matrix-org/matrix-spec-proposals/pull/4028) encrypted event rule - `msc4306_enabled`: [MSC4306](https://github.com/matrix-org/matrix-spec-proposals/pull/4306) thread subscription rules - `msc4210_enabled`: removes `.m.rule.contains_display_name`, `.m.rule.contains_user_name` and `.m.rule.roomnotif` `GET /pushrules/` only lists the rules that exist for that configuration. `GET` on a single rule that is not in the set returns `404 M_NOT_FOUND`. The same set is used to evaluate notifications, and to build the `m.push_rules` account data in `/sync`. `PUT .../enabled` and `PUT .../actions` did not use that set. They accepted any rule ID that Synapse knows about, whether or not the server currently serves it. Clients could modify a rule the server had just said did not exist. The request returned `200`, the change was stored, and it was then ignored. Both endpoints now return `404 M_NOT_FOUND` for such a rule, as [the spec requires](https://spec.matrix.org/v1.19/client-server-api/#put_matrixclientv3pushrulesglobalkindruleidenabled) for a rule that does not exist. Before (`msc4210_enabled: true`): ``` GET /_matrix/client/v3/pushrules/global/override/.m.rule.roomnotif 404 {"errcode": "M_NOT_FOUND", "error": "..."} PUT /_matrix/client/v3/pushrules/global/override/.m.rule.roomnotif/enabled {"enabled": false} 200 {} ``` After: ``` GET /_matrix/client/v3/pushrules/global/override/.m.rule.roomnotif 404 {"errcode": "M_NOT_FOUND", "error": "..."} PUT /_matrix/client/v3/pushrules/global/override/.m.rule.roomnotif/enabled {"enabled": false} 404 {"errcode": "M_NOT_FOUND", "error": "Unknown rule"} ``` This is a no-op for default configurations. All of these flags are off by default, and rules that are served are still modifiable as before.
2 lines
198 B
Plaintext
2 lines
198 B
Plaintext
Fix a bug where server-default push rules that are disabled by the server's configuration, and thus not served to clients, could still be modified through the client API instead of returning a 404.
|