mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 14:56:42 -04:00
Add a module API to allow modules to edit push rule actions (#12406)
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
parent
d743b25c8f
commit
5ef673de4f
8 changed files with 319 additions and 104 deletions
|
@ -82,6 +82,7 @@ from synapse.handlers.auth import (
|
|||
ON_LOGGED_OUT_CALLBACK,
|
||||
AuthHandler,
|
||||
)
|
||||
from synapse.handlers.push_rules import RuleSpec, check_actions
|
||||
from synapse.http.client import SimpleHttpClient
|
||||
from synapse.http.server import (
|
||||
DirectServeHtmlResource,
|
||||
|
@ -195,6 +196,7 @@ class ModuleApi:
|
|||
self._clock: Clock = hs.get_clock()
|
||||
self._registration_handler = hs.get_registration_handler()
|
||||
self._send_email_handler = hs.get_send_email_handler()
|
||||
self._push_rules_handler = hs.get_push_rules_handler()
|
||||
self.custom_template_dir = hs.config.server.custom_template_directory
|
||||
|
||||
try:
|
||||
|
@ -1352,6 +1354,68 @@ class ModuleApi:
|
|||
"""
|
||||
await self._store.add_user_bound_threepid(user_id, medium, address, id_server)
|
||||
|
||||
def check_push_rule_actions(
|
||||
self, actions: List[Union[str, Dict[str, str]]]
|
||||
) -> None:
|
||||
"""Checks if the given push rule actions are valid according to the Matrix
|
||||
specification.
|
||||
|
||||
See https://spec.matrix.org/v1.2/client-server-api/#actions for the list of valid
|
||||
actions.
|
||||
|
||||
Added in Synapse v1.58.0.
|
||||
|
||||
Args:
|
||||
actions: the actions to check.
|
||||
|
||||
Raises:
|
||||
synapse.module_api.errors.InvalidRuleException if the actions are invalid.
|
||||
"""
|
||||
check_actions(actions)
|
||||
|
||||
async def set_push_rule_action(
|
||||
self,
|
||||
user_id: str,
|
||||
scope: str,
|
||||
kind: str,
|
||||
rule_id: str,
|
||||
actions: List[Union[str, Dict[str, str]]],
|
||||
) -> None:
|
||||
"""Changes the actions of an existing push rule for the given user.
|
||||
|
||||
See https://spec.matrix.org/v1.2/client-server-api/#push-rules for more
|
||||
information about push rules and their syntax.
|
||||
|
||||
Can only be called on the main process.
|
||||
|
||||
Added in Synapse v1.58.0.
|
||||
|
||||
Args:
|
||||
user_id: the user for which to change the push rule's actions.
|
||||
scope: the push rule's scope, currently only "global" is allowed.
|
||||
kind: the push rule's kind.
|
||||
rule_id: the push rule's identifier.
|
||||
actions: the actions to run when the rule's conditions match.
|
||||
|
||||
Raises:
|
||||
RuntimeError if this method is called on a worker or `scope` is invalid.
|
||||
synapse.module_api.errors.RuleNotFoundException if the rule being modified
|
||||
can't be found.
|
||||
synapse.module_api.errors.InvalidRuleException if the actions are invalid.
|
||||
"""
|
||||
if self.worker_app is not None:
|
||||
raise RuntimeError("module tried to change push rule actions on a worker")
|
||||
|
||||
if scope != "global":
|
||||
raise RuntimeError(
|
||||
"invalid scope %s, only 'global' is currently allowed" % scope
|
||||
)
|
||||
|
||||
spec = RuleSpec(scope, kind, rule_id, "actions")
|
||||
await self._push_rules_handler.set_rule_attr(
|
||||
user_id, spec, {"actions": actions}
|
||||
)
|
||||
|
||||
|
||||
class PublicRoomListManager:
|
||||
"""Contains methods for adding to, removing from and querying whether a room
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue