Spit out server default rules too.

This commit is contained in:
David Baker 2015-01-30 15:54:29 +00:00
parent 6dc92d3427
commit b4b892f4a3
2 changed files with 17 additions and 10 deletions

View File

@ -1,9 +1,5 @@
def make_base_rules(user_name): def make_base_rules(user_name):
""" rules = [
Nominally we reserve priority class 0 for these rules, although
in practice we just append them to the end so we don't actually need it.
"""
return [
{ {
'conditions': [ 'conditions': [
{ {
@ -47,3 +43,6 @@ def make_base_rules(user_name):
] ]
} }
] ]
for r in rules:
r['priority_class'] = 0
return rules

View File

@ -19,6 +19,7 @@ from synapse.api.errors import SynapseError, Codes, UnrecognizedRequestError, No
StoreError StoreError
from .base import ClientV1RestServlet, client_path_pattern from .base import ClientV1RestServlet, client_path_pattern
from synapse.storage.push_rule import InconsistentRuleException, RuleNotFoundException from synapse.storage.push_rule import InconsistentRuleException, RuleNotFoundException
import synapse.push.baserules as baserules
import json import json
@ -26,6 +27,7 @@ import json
class PushRuleRestServlet(ClientV1RestServlet): class PushRuleRestServlet(ClientV1RestServlet):
PATTERN = client_path_pattern("/pushrules/.*$") PATTERN = client_path_pattern("/pushrules/.*$")
PRIORITY_CLASS_MAP = { PRIORITY_CLASS_MAP = {
'default': 0,
'underride': 1, 'underride': 1,
'sender': 2, 'sender': 2,
'room': 3, 'room': 3,
@ -137,6 +139,9 @@ class PushRuleRestServlet(ClientV1RestServlet):
user, _ = yield self.auth.get_user_by_req(request) user, _ = yield self.auth.get_user_by_req(request)
if spec['template'] == 'default':
raise SynapseError(403, "The default rules are immutable.")
content = _parse_json(request) content = _parse_json(request)
try: try:
@ -218,6 +223,10 @@ class PushRuleRestServlet(ClientV1RestServlet):
# to send which means doing unnecessary work sometimes but is # to send which means doing unnecessary work sometimes but is
# is probably not going to make a whole lot of difference # is probably not going to make a whole lot of difference
rawrules = yield self.hs.get_datastore().get_push_rules_for_user_name(user.to_string()) rawrules = yield self.hs.get_datastore().get_push_rules_for_user_name(user.to_string())
for r in rawrules:
r["conditions"] = json.loads(r["conditions"])
r["actions"] = json.loads(r["actions"])
rawrules.extend(baserules.make_base_rules(user.to_string()))
rules = {'global': {}, 'device': {}} rules = {'global': {}, 'device': {}}
@ -226,9 +235,6 @@ class PushRuleRestServlet(ClientV1RestServlet):
for r in rawrules: for r in rawrules:
rulearray = None rulearray = None
r["conditions"] = json.loads(r["conditions"])
r["actions"] = json.loads(r["actions"])
template_name = _priority_class_to_template_name(r['priority_class']) template_name = _priority_class_to_template_name(r['priority_class'])
if r['priority_class'] > PushRuleRestServlet.PRIORITY_CLASS_MAP['override']: if r['priority_class'] > PushRuleRestServlet.PRIORITY_CLASS_MAP['override']:
@ -356,7 +362,9 @@ def _priority_class_to_template_name(pc):
def _rule_to_template(rule): def _rule_to_template(rule):
template_name = _priority_class_to_template_name(rule['priority_class']) template_name = _priority_class_to_template_name(rule['priority_class'])
if template_name in ['override', 'underride']: if template_name in ['default']:
return {k: rule[k] for k in ["conditions", "actions"]}
elif template_name in ['override', 'underride']:
return {k: rule[k] for k in ["rule_id", "conditions", "actions"]} return {k: rule[k] for k in ["rule_id", "conditions", "actions"]}
elif template_name in ["sender", "room"]: elif template_name in ["sender", "room"]:
return {k: rule[k] for k in ["rule_id", "actions"]} return {k: rule[k] for k in ["rule_id", "actions"]}