mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 22:14:55 -04:00
Don't remember enabled
of deleted push rules and properly return 404 for missing push rules in .../actions
and .../enabled
(#7796)
Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net> Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
parent
e45b834119
commit
a5370072b5
5 changed files with 610 additions and 13 deletions
|
@ -163,6 +163,18 @@ class PushRuleRestServlet(RestServlet):
|
|||
self.notifier.on_new_event("push_rules_key", stream_id, users=[user_id])
|
||||
|
||||
async def set_rule_attr(self, user_id, spec, val):
|
||||
if spec["attr"] not in ("enabled", "actions"):
|
||||
# for the sake of potential future expansion, shouldn't report
|
||||
# 404 in the case of an unknown request so check it corresponds to
|
||||
# a known attribute first.
|
||||
raise UnrecognizedRequestError()
|
||||
|
||||
namespaced_rule_id = _namespaced_rule_id_from_spec(spec)
|
||||
rule_id = spec["rule_id"]
|
||||
is_default_rule = rule_id.startswith(".")
|
||||
if is_default_rule:
|
||||
if namespaced_rule_id not in BASE_RULE_IDS:
|
||||
raise NotFoundError("Unknown rule %s" % (namespaced_rule_id,))
|
||||
if spec["attr"] == "enabled":
|
||||
if isinstance(val, dict) and "enabled" in val:
|
||||
val = val["enabled"]
|
||||
|
@ -171,9 +183,8 @@ class PushRuleRestServlet(RestServlet):
|
|||
# This should *actually* take a dict, but many clients pass
|
||||
# bools directly, so let's not break them.
|
||||
raise SynapseError(400, "Value for 'enabled' must be boolean")
|
||||
namespaced_rule_id = _namespaced_rule_id_from_spec(spec)
|
||||
return await self.store.set_push_rule_enabled(
|
||||
user_id, namespaced_rule_id, val
|
||||
user_id, namespaced_rule_id, val, is_default_rule
|
||||
)
|
||||
elif spec["attr"] == "actions":
|
||||
actions = val.get("actions")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue