forked from MirrorHub/synapse
Manually reverts the merge from cdbb8e6d6e
.
This commit is contained in:
parent
af795173be
commit
acda9f07c8
5 changed files with 14 additions and 252 deletions
1
changelog.d/11884.misc
Normal file
1
changelog.d/11884.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Remove experimental changes to the default push rules which were introduced in Synapse 1.19.0 but never enabled.
|
|
@ -656,19 +656,6 @@ class ServerConfig(Config):
|
||||||
False,
|
False,
|
||||||
)
|
)
|
||||||
|
|
||||||
# List of users trialing the new experimental default push rules. This setting is
|
|
||||||
# not included in the sample configuration file on purpose as it's a temporary
|
|
||||||
# hack, so that some users can trial the new defaults without impacting every
|
|
||||||
# user on the homeserver.
|
|
||||||
users_new_default_push_rules: list = (
|
|
||||||
config.get("users_new_default_push_rules") or []
|
|
||||||
)
|
|
||||||
if not isinstance(users_new_default_push_rules, list):
|
|
||||||
raise ConfigError("'users_new_default_push_rules' must be a list")
|
|
||||||
|
|
||||||
# Turn the list into a set to improve lookup speed.
|
|
||||||
self.users_new_default_push_rules: set = set(users_new_default_push_rules)
|
|
||||||
|
|
||||||
# Whitelist of domain names that given next_link parameters must have
|
# Whitelist of domain names that given next_link parameters must have
|
||||||
next_link_domain_whitelist: Optional[List[str]] = config.get(
|
next_link_domain_whitelist: Optional[List[str]] = config.get(
|
||||||
"next_link_domain_whitelist"
|
"next_link_domain_whitelist"
|
||||||
|
|
|
@ -20,15 +20,11 @@ from typing import Any, Dict, List
|
||||||
from synapse.push.rulekinds import PRIORITY_CLASS_INVERSE_MAP, PRIORITY_CLASS_MAP
|
from synapse.push.rulekinds import PRIORITY_CLASS_INVERSE_MAP, PRIORITY_CLASS_MAP
|
||||||
|
|
||||||
|
|
||||||
def list_with_base_rules(
|
def list_with_base_rules(rawrules: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
||||||
rawrules: List[Dict[str, Any]], use_new_defaults: bool = False
|
|
||||||
) -> List[Dict[str, Any]]:
|
|
||||||
"""Combine the list of rules set by the user with the default push rules
|
"""Combine the list of rules set by the user with the default push rules
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
rawrules: The rules the user has modified or set.
|
rawrules: The rules the user has modified or set.
|
||||||
use_new_defaults: Whether to use the new experimental default rules when
|
|
||||||
appending or prepending default rules.
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
A new list with the rules set by the user combined with the defaults.
|
A new list with the rules set by the user combined with the defaults.
|
||||||
|
@ -48,9 +44,7 @@ def list_with_base_rules(
|
||||||
|
|
||||||
ruleslist.extend(
|
ruleslist.extend(
|
||||||
make_base_prepend_rules(
|
make_base_prepend_rules(
|
||||||
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
PRIORITY_CLASS_INVERSE_MAP[current_prio_class], modified_base_rules
|
||||||
modified_base_rules,
|
|
||||||
use_new_defaults,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -61,7 +55,6 @@ def list_with_base_rules(
|
||||||
make_base_append_rules(
|
make_base_append_rules(
|
||||||
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
||||||
modified_base_rules,
|
modified_base_rules,
|
||||||
use_new_defaults,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
current_prio_class -= 1
|
current_prio_class -= 1
|
||||||
|
@ -70,7 +63,6 @@ def list_with_base_rules(
|
||||||
make_base_prepend_rules(
|
make_base_prepend_rules(
|
||||||
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
||||||
modified_base_rules,
|
modified_base_rules,
|
||||||
use_new_defaults,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -79,18 +71,14 @@ def list_with_base_rules(
|
||||||
while current_prio_class > 0:
|
while current_prio_class > 0:
|
||||||
ruleslist.extend(
|
ruleslist.extend(
|
||||||
make_base_append_rules(
|
make_base_append_rules(
|
||||||
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
PRIORITY_CLASS_INVERSE_MAP[current_prio_class], modified_base_rules
|
||||||
modified_base_rules,
|
|
||||||
use_new_defaults,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
current_prio_class -= 1
|
current_prio_class -= 1
|
||||||
if current_prio_class > 0:
|
if current_prio_class > 0:
|
||||||
ruleslist.extend(
|
ruleslist.extend(
|
||||||
make_base_prepend_rules(
|
make_base_prepend_rules(
|
||||||
PRIORITY_CLASS_INVERSE_MAP[current_prio_class],
|
PRIORITY_CLASS_INVERSE_MAP[current_prio_class], modified_base_rules
|
||||||
modified_base_rules,
|
|
||||||
use_new_defaults,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -98,24 +86,14 @@ def list_with_base_rules(
|
||||||
|
|
||||||
|
|
||||||
def make_base_append_rules(
|
def make_base_append_rules(
|
||||||
kind: str,
|
kind: str, modified_base_rules: Dict[str, Dict[str, Any]]
|
||||||
modified_base_rules: Dict[str, Dict[str, Any]],
|
|
||||||
use_new_defaults: bool = False,
|
|
||||||
) -> List[Dict[str, Any]]:
|
) -> List[Dict[str, Any]]:
|
||||||
rules = []
|
rules = []
|
||||||
|
|
||||||
if kind == "override":
|
if kind == "override":
|
||||||
rules = (
|
rules = BASE_APPEND_OVERRIDE_RULES
|
||||||
NEW_APPEND_OVERRIDE_RULES
|
|
||||||
if use_new_defaults
|
|
||||||
else BASE_APPEND_OVERRIDE_RULES
|
|
||||||
)
|
|
||||||
elif kind == "underride":
|
elif kind == "underride":
|
||||||
rules = (
|
rules = BASE_APPEND_UNDERRIDE_RULES
|
||||||
NEW_APPEND_UNDERRIDE_RULES
|
|
||||||
if use_new_defaults
|
|
||||||
else BASE_APPEND_UNDERRIDE_RULES
|
|
||||||
)
|
|
||||||
elif kind == "content":
|
elif kind == "content":
|
||||||
rules = BASE_APPEND_CONTENT_RULES
|
rules = BASE_APPEND_CONTENT_RULES
|
||||||
|
|
||||||
|
@ -134,7 +112,6 @@ def make_base_append_rules(
|
||||||
def make_base_prepend_rules(
|
def make_base_prepend_rules(
|
||||||
kind: str,
|
kind: str,
|
||||||
modified_base_rules: Dict[str, Dict[str, Any]],
|
modified_base_rules: Dict[str, Dict[str, Any]],
|
||||||
use_new_defaults: bool = False,
|
|
||||||
) -> List[Dict[str, Any]]:
|
) -> List[Dict[str, Any]]:
|
||||||
rules = []
|
rules = []
|
||||||
|
|
||||||
|
@ -301,135 +278,6 @@ BASE_APPEND_OVERRIDE_RULES = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
NEW_APPEND_OVERRIDE_RULES = [
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.encrypted",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "type",
|
|
||||||
"pattern": "m.room.encrypted",
|
|
||||||
"_id": "_encrypted",
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actions": ["notify"],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.suppress_notices",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "type",
|
|
||||||
"pattern": "m.room.message",
|
|
||||||
"_id": "_suppress_notices_type",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "content.msgtype",
|
|
||||||
"pattern": "m.notice",
|
|
||||||
"_id": "_suppress_notices",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"actions": [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/underride/.m.rule.suppress_edits",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "m.relates_to.m.rel_type",
|
|
||||||
"pattern": "m.replace",
|
|
||||||
"_id": "_suppress_edits",
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actions": [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.invite_for_me",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "type",
|
|
||||||
"pattern": "m.room.member",
|
|
||||||
"_id": "_member",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "content.membership",
|
|
||||||
"pattern": "invite",
|
|
||||||
"_id": "_invite_member",
|
|
||||||
},
|
|
||||||
{"kind": "event_match", "key": "state_key", "pattern_type": "user_id"},
|
|
||||||
],
|
|
||||||
"actions": ["notify", {"set_tweak": "sound", "value": "default"}],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.contains_display_name",
|
|
||||||
"conditions": [{"kind": "contains_display_name"}],
|
|
||||||
"actions": [
|
|
||||||
"notify",
|
|
||||||
{"set_tweak": "sound", "value": "default"},
|
|
||||||
{"set_tweak": "highlight"},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.tombstone",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "type",
|
|
||||||
"pattern": "m.room.tombstone",
|
|
||||||
"_id": "_tombstone",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "state_key",
|
|
||||||
"pattern": "",
|
|
||||||
"_id": "_tombstone_statekey",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"actions": [
|
|
||||||
"notify",
|
|
||||||
{"set_tweak": "sound", "value": "default"},
|
|
||||||
{"set_tweak": "highlight"},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.roomnotif",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "content.body",
|
|
||||||
"pattern": "@room",
|
|
||||||
"_id": "_roomnotif_content",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"kind": "sender_notification_permission",
|
|
||||||
"key": "room",
|
|
||||||
"_id": "_roomnotif_pl",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"actions": [
|
|
||||||
"notify",
|
|
||||||
{"set_tweak": "highlight"},
|
|
||||||
{"set_tweak": "sound", "value": "default"},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/override/.m.rule.call",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "type",
|
|
||||||
"pattern": "m.call.invite",
|
|
||||||
"_id": "_call",
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"actions": ["notify", {"set_tweak": "sound", "value": "ring"}],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
BASE_APPEND_UNDERRIDE_RULES = [
|
BASE_APPEND_UNDERRIDE_RULES = [
|
||||||
{
|
{
|
||||||
"rule_id": "global/underride/.m.rule.call",
|
"rule_id": "global/underride/.m.rule.call",
|
||||||
|
@ -538,36 +386,6 @@ BASE_APPEND_UNDERRIDE_RULES = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
NEW_APPEND_UNDERRIDE_RULES = [
|
|
||||||
{
|
|
||||||
"rule_id": "global/underride/.m.rule.room_one_to_one",
|
|
||||||
"conditions": [
|
|
||||||
{"kind": "room_member_count", "is": "2", "_id": "member_count"},
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "content.body",
|
|
||||||
"pattern": "*",
|
|
||||||
"_id": "body",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"actions": ["notify", {"set_tweak": "sound", "value": "default"}],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rule_id": "global/underride/.m.rule.message",
|
|
||||||
"conditions": [
|
|
||||||
{
|
|
||||||
"kind": "event_match",
|
|
||||||
"key": "content.body",
|
|
||||||
"pattern": "*",
|
|
||||||
"_id": "body",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"actions": ["notify"],
|
|
||||||
"enabled": False,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
BASE_RULE_IDS = set()
|
BASE_RULE_IDS = set()
|
||||||
|
|
||||||
for r in BASE_APPEND_CONTENT_RULES:
|
for r in BASE_APPEND_CONTENT_RULES:
|
||||||
|
@ -589,26 +407,3 @@ for r in BASE_APPEND_UNDERRIDE_RULES:
|
||||||
r["priority_class"] = PRIORITY_CLASS_MAP["underride"]
|
r["priority_class"] = PRIORITY_CLASS_MAP["underride"]
|
||||||
r["default"] = True
|
r["default"] = True
|
||||||
BASE_RULE_IDS.add(r["rule_id"])
|
BASE_RULE_IDS.add(r["rule_id"])
|
||||||
|
|
||||||
|
|
||||||
NEW_RULE_IDS = set()
|
|
||||||
|
|
||||||
for r in BASE_APPEND_CONTENT_RULES:
|
|
||||||
r["priority_class"] = PRIORITY_CLASS_MAP["content"]
|
|
||||||
r["default"] = True
|
|
||||||
NEW_RULE_IDS.add(r["rule_id"])
|
|
||||||
|
|
||||||
for r in BASE_PREPEND_OVERRIDE_RULES:
|
|
||||||
r["priority_class"] = PRIORITY_CLASS_MAP["override"]
|
|
||||||
r["default"] = True
|
|
||||||
NEW_RULE_IDS.add(r["rule_id"])
|
|
||||||
|
|
||||||
for r in NEW_APPEND_OVERRIDE_RULES:
|
|
||||||
r["priority_class"] = PRIORITY_CLASS_MAP["override"]
|
|
||||||
r["default"] = True
|
|
||||||
NEW_RULE_IDS.add(r["rule_id"])
|
|
||||||
|
|
||||||
for r in NEW_APPEND_UNDERRIDE_RULES:
|
|
||||||
r["priority_class"] = PRIORITY_CLASS_MAP["underride"]
|
|
||||||
r["default"] = True
|
|
||||||
NEW_RULE_IDS.add(r["rule_id"])
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ from synapse.http.servlet import (
|
||||||
parse_string,
|
parse_string,
|
||||||
)
|
)
|
||||||
from synapse.http.site import SynapseRequest
|
from synapse.http.site import SynapseRequest
|
||||||
from synapse.push.baserules import BASE_RULE_IDS, NEW_RULE_IDS
|
from synapse.push.baserules import BASE_RULE_IDS
|
||||||
from synapse.push.clientformat import format_push_rules_for_user
|
from synapse.push.clientformat import format_push_rules_for_user
|
||||||
from synapse.push.rulekinds import PRIORITY_CLASS_MAP
|
from synapse.push.rulekinds import PRIORITY_CLASS_MAP
|
||||||
from synapse.rest.client._base import client_patterns
|
from synapse.rest.client._base import client_patterns
|
||||||
|
@ -61,10 +61,6 @@ class PushRuleRestServlet(RestServlet):
|
||||||
self.notifier = hs.get_notifier()
|
self.notifier = hs.get_notifier()
|
||||||
self._is_worker = hs.config.worker.worker_app is not None
|
self._is_worker = hs.config.worker.worker_app is not None
|
||||||
|
|
||||||
self._users_new_default_push_rules = (
|
|
||||||
hs.config.server.users_new_default_push_rules
|
|
||||||
)
|
|
||||||
|
|
||||||
async def on_PUT(self, request: SynapseRequest, path: str) -> Tuple[int, JsonDict]:
|
async def on_PUT(self, request: SynapseRequest, path: str) -> Tuple[int, JsonDict]:
|
||||||
if self._is_worker:
|
if self._is_worker:
|
||||||
raise Exception("Cannot handle PUT /push_rules on worker")
|
raise Exception("Cannot handle PUT /push_rules on worker")
|
||||||
|
@ -217,12 +213,7 @@ class PushRuleRestServlet(RestServlet):
|
||||||
rule_id = spec.rule_id
|
rule_id = spec.rule_id
|
||||||
is_default_rule = rule_id.startswith(".")
|
is_default_rule = rule_id.startswith(".")
|
||||||
if is_default_rule:
|
if is_default_rule:
|
||||||
if user_id in self._users_new_default_push_rules:
|
if namespaced_rule_id not in BASE_RULE_IDS:
|
||||||
rule_ids = NEW_RULE_IDS
|
|
||||||
else:
|
|
||||||
rule_ids = BASE_RULE_IDS
|
|
||||||
|
|
||||||
if namespaced_rule_id not in rule_ids:
|
|
||||||
raise SynapseError(404, "Unknown rule %r" % (namespaced_rule_id,))
|
raise SynapseError(404, "Unknown rule %r" % (namespaced_rule_id,))
|
||||||
await self.store.set_push_rule_actions(
|
await self.store.set_push_rule_actions(
|
||||||
user_id, namespaced_rule_id, actions, is_default_rule
|
user_id, namespaced_rule_id, actions, is_default_rule
|
||||||
|
|
|
@ -42,7 +42,7 @@ if TYPE_CHECKING:
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def _load_rules(rawrules, enabled_map, use_new_defaults=False):
|
def _load_rules(rawrules, enabled_map):
|
||||||
ruleslist = []
|
ruleslist = []
|
||||||
for rawrule in rawrules:
|
for rawrule in rawrules:
|
||||||
rule = dict(rawrule)
|
rule = dict(rawrule)
|
||||||
|
@ -52,7 +52,7 @@ def _load_rules(rawrules, enabled_map, use_new_defaults=False):
|
||||||
ruleslist.append(rule)
|
ruleslist.append(rule)
|
||||||
|
|
||||||
# We're going to be mutating this a lot, so do a deep copy
|
# We're going to be mutating this a lot, so do a deep copy
|
||||||
rules = list(list_with_base_rules(ruleslist, use_new_defaults))
|
rules = list(list_with_base_rules(ruleslist))
|
||||||
|
|
||||||
for i, rule in enumerate(rules):
|
for i, rule in enumerate(rules):
|
||||||
rule_id = rule["rule_id"]
|
rule_id = rule["rule_id"]
|
||||||
|
@ -112,10 +112,6 @@ class PushRulesWorkerStore(
|
||||||
prefilled_cache=push_rules_prefill,
|
prefilled_cache=push_rules_prefill,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._users_new_default_push_rules = (
|
|
||||||
hs.config.server.users_new_default_push_rules
|
|
||||||
)
|
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def get_max_push_rules_stream_id(self):
|
def get_max_push_rules_stream_id(self):
|
||||||
"""Get the position of the push rules stream.
|
"""Get the position of the push rules stream.
|
||||||
|
@ -145,9 +141,7 @@ class PushRulesWorkerStore(
|
||||||
|
|
||||||
enabled_map = await self.get_push_rules_enabled_for_user(user_id)
|
enabled_map = await self.get_push_rules_enabled_for_user(user_id)
|
||||||
|
|
||||||
use_new_defaults = user_id in self._users_new_default_push_rules
|
return _load_rules(rows, enabled_map)
|
||||||
|
|
||||||
return _load_rules(rows, enabled_map, use_new_defaults)
|
|
||||||
|
|
||||||
@cached(max_entries=5000)
|
@cached(max_entries=5000)
|
||||||
async def get_push_rules_enabled_for_user(self, user_id) -> Dict[str, bool]:
|
async def get_push_rules_enabled_for_user(self, user_id) -> Dict[str, bool]:
|
||||||
|
@ -206,13 +200,7 @@ class PushRulesWorkerStore(
|
||||||
enabled_map_by_user = await self.bulk_get_push_rules_enabled(user_ids)
|
enabled_map_by_user = await self.bulk_get_push_rules_enabled(user_ids)
|
||||||
|
|
||||||
for user_id, rules in results.items():
|
for user_id, rules in results.items():
|
||||||
use_new_defaults = user_id in self._users_new_default_push_rules
|
results[user_id] = _load_rules(rules, enabled_map_by_user.get(user_id, {}))
|
||||||
|
|
||||||
results[user_id] = _load_rules(
|
|
||||||
rules,
|
|
||||||
enabled_map_by_user.get(user_id, {}),
|
|
||||||
use_new_defaults,
|
|
||||||
)
|
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue