Support for channel notifications

Add condition type to check the sender's power level and add a base
rule using it for @channel notifications.
This commit is contained in:
David Baker 2017-10-05 12:39:18 +01:00
parent 44f8e383f3
commit fa969cfdde
3 changed files with 59 additions and 8 deletions

View file

@ -19,6 +19,7 @@ from twisted.internet import defer
from .push_rule_evaluator import PushRuleEvaluatorForEvent
from synapse.event_auth import get_user_power_level
from synapse.api.constants import EventTypes, Membership
from synapse.metrics import get_metrics_for
from synapse.util.caches import metrics as cache_metrics
@ -59,6 +60,7 @@ class BulkPushRuleEvaluator(object):
def __init__(self, hs):
self.hs = hs
self.store = hs.get_datastore()
self.auth = hs.get_auth()
self.room_push_rule_cache_metrics = cache_metrics.register_cache(
"cache",
@ -108,6 +110,17 @@ class BulkPushRuleEvaluator(object):
self.room_push_rule_cache_metrics,
)
@defer.inlineCallbacks
def _get_sender_power_level(self, event, context):
auth_events_ids = yield self.auth.compute_auth_events(
event, context.prev_state_ids, for_verification=False,
)
auth_events = yield self.store.get_events(auth_events_ids)
auth_events = {
(e.type, e.state_key): e for e in auth_events.values()
}
defer.returnValue(get_user_power_level(event.sender, auth_events))
@defer.inlineCallbacks
def action_for_event_by_user(self, event, context):
"""Given an event and context, evaluate the push rules and return
@ -123,7 +136,11 @@ class BulkPushRuleEvaluator(object):
event, context
)
evaluator = PushRuleEvaluatorForEvent(event, len(room_members))
sender_power_level = yield self._get_sender_power_level(event, context)
evaluator = PushRuleEvaluatorForEvent(
event, len(room_members), sender_power_level
)
condition_cache = {}