forked from MirrorHub/synapse
Move ThirdPartyEventRules into module_api/callbacks (#15535)
This commit is contained in:
parent
ded8f3d349
commit
2e59e97ebd
19 changed files with 92 additions and 68 deletions
1
changelog.d/15535.misc
Normal file
1
changelog.d/15535.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Move various module API callback registration methods to a dedicated class.
|
|
@ -64,7 +64,6 @@ from synapse.config.homeserver import HomeServerConfig
|
||||||
from synapse.config.server import ListenerConfig, ManholeConfig, TCPListenerConfig
|
from synapse.config.server import ListenerConfig, ManholeConfig, TCPListenerConfig
|
||||||
from synapse.crypto import context_factory
|
from synapse.crypto import context_factory
|
||||||
from synapse.events.presence_router import load_legacy_presence_router
|
from synapse.events.presence_router import load_legacy_presence_router
|
||||||
from synapse.events.third_party_rules import load_legacy_third_party_event_rules
|
|
||||||
from synapse.handlers.auth import load_legacy_password_auth_providers
|
from synapse.handlers.auth import load_legacy_password_auth_providers
|
||||||
from synapse.http.site import SynapseSite
|
from synapse.http.site import SynapseSite
|
||||||
from synapse.logging.context import PreserveLoggingContext
|
from synapse.logging.context import PreserveLoggingContext
|
||||||
|
@ -73,6 +72,9 @@ from synapse.metrics import install_gc_manager, register_threadpool
|
||||||
from synapse.metrics.background_process_metrics import wrap_as_background_process
|
from synapse.metrics.background_process_metrics import wrap_as_background_process
|
||||||
from synapse.metrics.jemalloc import setup_jemalloc_stats
|
from synapse.metrics.jemalloc import setup_jemalloc_stats
|
||||||
from synapse.module_api.callbacks.spamchecker_callbacks import load_legacy_spam_checkers
|
from synapse.module_api.callbacks.spamchecker_callbacks import load_legacy_spam_checkers
|
||||||
|
from synapse.module_api.callbacks.third_party_event_rules_callbacks import (
|
||||||
|
load_legacy_third_party_event_rules,
|
||||||
|
)
|
||||||
from synapse.types import ISynapseReactor
|
from synapse.types import ISynapseReactor
|
||||||
from synapse.util import SYNAPSE_VERSION
|
from synapse.util import SYNAPSE_VERSION
|
||||||
from synapse.util.caches.lrucache import setup_expire_lru_cache_entries
|
from synapse.util.caches.lrucache import setup_expire_lru_cache_entries
|
||||||
|
|
|
@ -212,7 +212,7 @@ class AuthHandler:
|
||||||
self._password_enabled_for_login = hs.config.auth.password_enabled_for_login
|
self._password_enabled_for_login = hs.config.auth.password_enabled_for_login
|
||||||
self._password_enabled_for_reauth = hs.config.auth.password_enabled_for_reauth
|
self._password_enabled_for_reauth = hs.config.auth.password_enabled_for_reauth
|
||||||
self._password_localdb_enabled = hs.config.auth.password_localdb_enabled
|
self._password_localdb_enabled = hs.config.auth.password_localdb_enabled
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
|
||||||
# Ratelimiter for failed auth during UIA. Uses same ratelimit config
|
# Ratelimiter for failed auth during UIA. Uses same ratelimit config
|
||||||
# as per `rc_login.failed_attempts`.
|
# as per `rc_login.failed_attempts`.
|
||||||
|
|
|
@ -39,11 +39,11 @@ class DeactivateAccountHandler:
|
||||||
self._profile_handler = hs.get_profile_handler()
|
self._profile_handler = hs.get_profile_handler()
|
||||||
self.user_directory_handler = hs.get_user_directory_handler()
|
self.user_directory_handler = hs.get_user_directory_handler()
|
||||||
self._server_name = hs.hostname
|
self._server_name = hs.hostname
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
|
||||||
# Flag that indicates whether the process to part users from rooms is running
|
# Flag that indicates whether the process to part users from rooms is running
|
||||||
self._user_parter_running = False
|
self._user_parter_running = False
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
|
||||||
# Start the user parter loop so it can resume parting users from rooms where
|
# Start the user parter loop so it can resume parting users from rooms where
|
||||||
# it left off (if it has work left to do).
|
# it left off (if it has work left to do).
|
||||||
|
|
|
@ -52,7 +52,9 @@ class DirectoryHandler:
|
||||||
self.config = hs.config
|
self.config = hs.config
|
||||||
self.enable_room_list_search = hs.config.roomdirectory.enable_room_list_search
|
self.enable_room_list_search = hs.config.roomdirectory.enable_room_list_search
|
||||||
self.require_membership = hs.config.server.require_membership_for_aliases
|
self.require_membership = hs.config.server.require_membership_for_aliases
|
||||||
self.third_party_event_rules = hs.get_third_party_event_rules()
|
self._third_party_event_rules = (
|
||||||
|
hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
)
|
||||||
self.server_name = hs.hostname
|
self.server_name = hs.hostname
|
||||||
|
|
||||||
self.federation = hs.get_federation_client()
|
self.federation = hs.get_federation_client()
|
||||||
|
@ -503,7 +505,7 @@ class DirectoryHandler:
|
||||||
# Check if publishing is blocked by a third party module
|
# Check if publishing is blocked by a third party module
|
||||||
allowed_by_third_party_rules = (
|
allowed_by_third_party_rules = (
|
||||||
await (
|
await (
|
||||||
self.third_party_event_rules.check_visibility_can_be_modified(
|
self._third_party_event_rules.check_visibility_can_be_modified(
|
||||||
room_id, visibility
|
room_id, visibility
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -169,7 +169,9 @@ class FederationHandler:
|
||||||
|
|
||||||
self._room_backfill = Linearizer("room_backfill")
|
self._room_backfill = Linearizer("room_backfill")
|
||||||
|
|
||||||
self.third_party_event_rules = hs.get_third_party_event_rules()
|
self._third_party_event_rules = (
|
||||||
|
hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
)
|
||||||
|
|
||||||
# Tracks running partial state syncs by room ID.
|
# Tracks running partial state syncs by room ID.
|
||||||
# Partial state syncs currently only run on the main process, so it's okay to
|
# Partial state syncs currently only run on the main process, so it's okay to
|
||||||
|
@ -1253,7 +1255,7 @@ class FederationHandler:
|
||||||
unpersisted_context,
|
unpersisted_context,
|
||||||
) = await self.event_creation_handler.create_new_client_event(builder=builder)
|
) = await self.event_creation_handler.create_new_client_event(builder=builder)
|
||||||
|
|
||||||
event_allowed, _ = await self.third_party_event_rules.check_event_allowed(
|
event_allowed, _ = await self._third_party_event_rules.check_event_allowed(
|
||||||
event, unpersisted_context
|
event, unpersisted_context
|
||||||
)
|
)
|
||||||
if not event_allowed:
|
if not event_allowed:
|
||||||
|
|
|
@ -157,7 +157,9 @@ class FederationEventHandler:
|
||||||
self._get_room_member_handler = hs.get_room_member_handler
|
self._get_room_member_handler = hs.get_room_member_handler
|
||||||
|
|
||||||
self._federation_client = hs.get_federation_client()
|
self._federation_client = hs.get_federation_client()
|
||||||
self._third_party_event_rules = hs.get_third_party_event_rules()
|
self._third_party_event_rules = (
|
||||||
|
hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
)
|
||||||
self._notifier = hs.get_notifier()
|
self._notifier = hs.get_notifier()
|
||||||
|
|
||||||
self._is_mine_id = hs.is_mine_id
|
self._is_mine_id = hs.is_mine_id
|
||||||
|
|
|
@ -77,7 +77,6 @@ from synapse.util.metrics import measure_func
|
||||||
from synapse.visibility import get_effective_room_visibility_from_state
|
from synapse.visibility import get_effective_room_visibility_from_state
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from synapse.events.third_party_rules import ThirdPartyEventRules
|
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -509,8 +508,8 @@ class EventCreationHandler:
|
||||||
self._bulk_push_rule_evaluator = hs.get_bulk_push_rule_evaluator()
|
self._bulk_push_rule_evaluator = hs.get_bulk_push_rule_evaluator()
|
||||||
|
|
||||||
self._spam_checker_module_callbacks = hs.get_module_api_callbacks().spam_checker
|
self._spam_checker_module_callbacks = hs.get_module_api_callbacks().spam_checker
|
||||||
self.third_party_event_rules: "ThirdPartyEventRules" = (
|
self._third_party_event_rules = (
|
||||||
self.hs.get_third_party_event_rules()
|
self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
)
|
)
|
||||||
|
|
||||||
self._block_events_without_consent_error = (
|
self._block_events_without_consent_error = (
|
||||||
|
@ -1314,7 +1313,7 @@ class EventCreationHandler:
|
||||||
if requester:
|
if requester:
|
||||||
context.app_service = requester.app_service
|
context.app_service = requester.app_service
|
||||||
|
|
||||||
res, new_content = await self.third_party_event_rules.check_event_allowed(
|
res, new_content = await self._third_party_event_rules.check_event_allowed(
|
||||||
event, context
|
event, context
|
||||||
)
|
)
|
||||||
if res is False:
|
if res is False:
|
||||||
|
|
|
@ -61,7 +61,7 @@ class ProfileHandler:
|
||||||
|
|
||||||
self.server_name = hs.config.server.server_name
|
self.server_name = hs.config.server.server_name
|
||||||
|
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
|
||||||
async def get_profile(self, user_id: str, ignore_backoff: bool = True) -> JsonDict:
|
async def get_profile(self, user_id: str, ignore_backoff: bool = True) -> JsonDict:
|
||||||
target_user = UserID.from_string(user_id)
|
target_user = UserID.from_string(user_id)
|
||||||
|
|
|
@ -160,7 +160,9 @@ class RoomCreationHandler:
|
||||||
)
|
)
|
||||||
self._server_notices_mxid = hs.config.servernotices.server_notices_mxid
|
self._server_notices_mxid = hs.config.servernotices.server_notices_mxid
|
||||||
|
|
||||||
self.third_party_event_rules = hs.get_third_party_event_rules()
|
self._third_party_event_rules = (
|
||||||
|
hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
)
|
||||||
|
|
||||||
async def upgrade_room(
|
async def upgrade_room(
|
||||||
self, requester: Requester, old_room_id: str, new_version: RoomVersion
|
self, requester: Requester, old_room_id: str, new_version: RoomVersion
|
||||||
|
@ -742,7 +744,7 @@ class RoomCreationHandler:
|
||||||
|
|
||||||
# Let the third party rules modify the room creation config if needed, or abort
|
# Let the third party rules modify the room creation config if needed, or abort
|
||||||
# the room creation entirely with an exception.
|
# the room creation entirely with an exception.
|
||||||
await self.third_party_event_rules.on_create_room(
|
await self._third_party_event_rules.on_create_room(
|
||||||
requester, config, is_requester_admin=is_requester_admin
|
requester, config, is_requester_admin=is_requester_admin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -879,7 +881,7 @@ class RoomCreationHandler:
|
||||||
# Check whether this visibility value is blocked by a third party module
|
# Check whether this visibility value is blocked by a third party module
|
||||||
allowed_by_third_party_rules = (
|
allowed_by_third_party_rules = (
|
||||||
await (
|
await (
|
||||||
self.third_party_event_rules.check_visibility_can_be_modified(
|
self._third_party_event_rules.check_visibility_can_be_modified(
|
||||||
room_id, visibility
|
room_id, visibility
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -1731,7 +1733,7 @@ class RoomShutdownHandler:
|
||||||
self.room_member_handler = hs.get_room_member_handler()
|
self.room_member_handler = hs.get_room_member_handler()
|
||||||
self._room_creation_handler = hs.get_room_creation_handler()
|
self._room_creation_handler = hs.get_room_creation_handler()
|
||||||
self._replication = hs.get_replication_data_handler()
|
self._replication = hs.get_replication_data_handler()
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
self.event_creation_handler = hs.get_event_creation_handler()
|
self.event_creation_handler = hs.get_event_creation_handler()
|
||||||
self.store = hs.get_datastores().main
|
self.store = hs.get_datastores().main
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,9 @@ class RoomMemberHandler(metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self._spam_checker_module_callbacks = hs.get_module_api_callbacks().spam_checker
|
self._spam_checker_module_callbacks = hs.get_module_api_callbacks().spam_checker
|
||||||
self.third_party_event_rules = hs.get_third_party_event_rules()
|
self._third_party_event_rules = (
|
||||||
|
hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
)
|
||||||
self._server_notices_mxid = self.config.servernotices.server_notices_mxid
|
self._server_notices_mxid = self.config.servernotices.server_notices_mxid
|
||||||
self._enable_lookup = hs.config.registration.enable_3pid_lookup
|
self._enable_lookup = hs.config.registration.enable_3pid_lookup
|
||||||
self.allow_per_room_profiles = self.config.server.allow_per_room_profiles
|
self.allow_per_room_profiles = self.config.server.allow_per_room_profiles
|
||||||
|
@ -1560,7 +1562,7 @@ class RoomMemberHandler(metaclass=abc.ABCMeta):
|
||||||
# can't just rely on the standard ratelimiting of events.
|
# can't just rely on the standard ratelimiting of events.
|
||||||
await self._third_party_invite_limiter.ratelimit(requester)
|
await self._third_party_invite_limiter.ratelimit(requester)
|
||||||
|
|
||||||
can_invite = await self.third_party_event_rules.check_threepid_can_be_invited(
|
can_invite = await self._third_party_event_rules.check_threepid_can_be_invited(
|
||||||
medium, address, room_id
|
medium, address, room_id
|
||||||
)
|
)
|
||||||
if not can_invite:
|
if not can_invite:
|
||||||
|
|
|
@ -44,20 +44,6 @@ from synapse.events.presence_router import (
|
||||||
GET_USERS_FOR_STATES_CALLBACK,
|
GET_USERS_FOR_STATES_CALLBACK,
|
||||||
PresenceRouter,
|
PresenceRouter,
|
||||||
)
|
)
|
||||||
from synapse.events.third_party_rules import (
|
|
||||||
CHECK_CAN_DEACTIVATE_USER_CALLBACK,
|
|
||||||
CHECK_CAN_SHUTDOWN_ROOM_CALLBACK,
|
|
||||||
CHECK_EVENT_ALLOWED_CALLBACK,
|
|
||||||
CHECK_THREEPID_CAN_BE_INVITED_CALLBACK,
|
|
||||||
CHECK_VISIBILITY_CAN_BE_MODIFIED_CALLBACK,
|
|
||||||
ON_ADD_USER_THIRD_PARTY_IDENTIFIER_CALLBACK,
|
|
||||||
ON_CREATE_ROOM_CALLBACK,
|
|
||||||
ON_NEW_EVENT_CALLBACK,
|
|
||||||
ON_PROFILE_UPDATE_CALLBACK,
|
|
||||||
ON_REMOVE_USER_THIRD_PARTY_IDENTIFIER_CALLBACK,
|
|
||||||
ON_THREEPID_BIND_CALLBACK,
|
|
||||||
ON_USER_DEACTIVATION_STATUS_CHANGED_CALLBACK,
|
|
||||||
)
|
|
||||||
from synapse.handlers.account_data import ON_ACCOUNT_DATA_UPDATED_CALLBACK
|
from synapse.handlers.account_data import ON_ACCOUNT_DATA_UPDATED_CALLBACK
|
||||||
from synapse.handlers.auth import (
|
from synapse.handlers.auth import (
|
||||||
CHECK_3PID_AUTH_CALLBACK,
|
CHECK_3PID_AUTH_CALLBACK,
|
||||||
|
@ -105,6 +91,20 @@ from synapse.module_api.callbacks.spamchecker_callbacks import (
|
||||||
USER_MAY_SEND_3PID_INVITE_CALLBACK,
|
USER_MAY_SEND_3PID_INVITE_CALLBACK,
|
||||||
SpamCheckerModuleApiCallbacks,
|
SpamCheckerModuleApiCallbacks,
|
||||||
)
|
)
|
||||||
|
from synapse.module_api.callbacks.third_party_event_rules_callbacks import (
|
||||||
|
CHECK_CAN_DEACTIVATE_USER_CALLBACK,
|
||||||
|
CHECK_CAN_SHUTDOWN_ROOM_CALLBACK,
|
||||||
|
CHECK_EVENT_ALLOWED_CALLBACK,
|
||||||
|
CHECK_THREEPID_CAN_BE_INVITED_CALLBACK,
|
||||||
|
CHECK_VISIBILITY_CAN_BE_MODIFIED_CALLBACK,
|
||||||
|
ON_ADD_USER_THIRD_PARTY_IDENTIFIER_CALLBACK,
|
||||||
|
ON_CREATE_ROOM_CALLBACK,
|
||||||
|
ON_NEW_EVENT_CALLBACK,
|
||||||
|
ON_PROFILE_UPDATE_CALLBACK,
|
||||||
|
ON_REMOVE_USER_THIRD_PARTY_IDENTIFIER_CALLBACK,
|
||||||
|
ON_THREEPID_BIND_CALLBACK,
|
||||||
|
ON_USER_DEACTIVATION_STATUS_CHANGED_CALLBACK,
|
||||||
|
)
|
||||||
from synapse.push.httppusher import HttpPusher
|
from synapse.push.httppusher import HttpPusher
|
||||||
from synapse.rest.client.login import LoginResponse
|
from synapse.rest.client.login import LoginResponse
|
||||||
from synapse.storage import DataStore
|
from synapse.storage import DataStore
|
||||||
|
@ -273,7 +273,6 @@ class ModuleApi:
|
||||||
self._public_room_list_manager = PublicRoomListManager(hs)
|
self._public_room_list_manager = PublicRoomListManager(hs)
|
||||||
self._account_data_manager = AccountDataManager(hs)
|
self._account_data_manager = AccountDataManager(hs)
|
||||||
|
|
||||||
self._third_party_event_rules = hs.get_third_party_event_rules()
|
|
||||||
self._password_auth_provider = hs.get_password_auth_provider()
|
self._password_auth_provider = hs.get_password_auth_provider()
|
||||||
self._presence_router = hs.get_presence_router()
|
self._presence_router = hs.get_presence_router()
|
||||||
self._account_data_handler = hs.get_account_data_handler()
|
self._account_data_handler = hs.get_account_data_handler()
|
||||||
|
@ -371,7 +370,7 @@ class ModuleApi:
|
||||||
|
|
||||||
Added in Synapse v1.39.0.
|
Added in Synapse v1.39.0.
|
||||||
"""
|
"""
|
||||||
return self._third_party_event_rules.register_third_party_rules_callbacks(
|
return self._callbacks.third_party_event_rules.register_third_party_rules_callbacks(
|
||||||
check_event_allowed=check_event_allowed,
|
check_event_allowed=check_event_allowed,
|
||||||
on_create_room=on_create_room,
|
on_create_room=on_create_room,
|
||||||
check_threepid_can_be_invited=check_threepid_can_be_invited,
|
check_threepid_can_be_invited=check_threepid_can_be_invited,
|
||||||
|
|
|
@ -23,9 +23,13 @@ from synapse.module_api.callbacks.account_validity_callbacks import (
|
||||||
from synapse.module_api.callbacks.spamchecker_callbacks import (
|
from synapse.module_api.callbacks.spamchecker_callbacks import (
|
||||||
SpamCheckerModuleApiCallbacks,
|
SpamCheckerModuleApiCallbacks,
|
||||||
)
|
)
|
||||||
|
from synapse.module_api.callbacks.third_party_event_rules_callbacks import (
|
||||||
|
ThirdPartyEventRulesModuleApiCallbacks,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ModuleApiCallbacks:
|
class ModuleApiCallbacks:
|
||||||
def __init__(self, hs: "HomeServer") -> None:
|
def __init__(self, hs: "HomeServer") -> None:
|
||||||
self.account_validity = AccountValidityModuleApiCallbacks()
|
self.account_validity = AccountValidityModuleApiCallbacks()
|
||||||
self.spam_checker = SpamCheckerModuleApiCallbacks(hs)
|
self.spam_checker = SpamCheckerModuleApiCallbacks(hs)
|
||||||
|
self.third_party_event_rules = ThirdPartyEventRulesModuleApiCallbacks(hs)
|
||||||
|
|
|
@ -140,7 +140,7 @@ def load_legacy_third_party_event_rules(hs: "HomeServer") -> None:
|
||||||
api.register_third_party_rules_callbacks(**hooks)
|
api.register_third_party_rules_callbacks(**hooks)
|
||||||
|
|
||||||
|
|
||||||
class ThirdPartyEventRules:
|
class ThirdPartyEventRulesModuleApiCallbacks:
|
||||||
"""Allows server admins to provide a Python module implementing an extra
|
"""Allows server admins to provide a Python module implementing an extra
|
||||||
set of rules to apply when processing events.
|
set of rules to apply when processing events.
|
||||||
|
|
||||||
|
@ -149,8 +149,6 @@ class ThirdPartyEventRules:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, hs: "HomeServer"):
|
def __init__(self, hs: "HomeServer"):
|
||||||
self.third_party_rules = None
|
|
||||||
|
|
||||||
self.store = hs.get_datastores().main
|
self.store = hs.get_datastores().main
|
||||||
self._storage_controllers = hs.get_storage_controllers()
|
self._storage_controllers = hs.get_storage_controllers()
|
||||||
|
|
|
@ -232,7 +232,7 @@ class Notifier:
|
||||||
|
|
||||||
self._federation_client = hs.get_federation_http_client()
|
self._federation_client = hs.get_federation_http_client()
|
||||||
|
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
self.appservice_handler = hs.get_application_service_handler()
|
self.appservice_handler = hs.get_application_service_handler()
|
||||||
|
|
|
@ -70,7 +70,7 @@ class RoomRestV2Servlet(RestServlet):
|
||||||
self._auth = hs.get_auth()
|
self._auth = hs.get_auth()
|
||||||
self._store = hs.get_datastores().main
|
self._store = hs.get_datastores().main
|
||||||
self._pagination_handler = hs.get_pagination_handler()
|
self._pagination_handler = hs.get_pagination_handler()
|
||||||
self._third_party_rules = hs.get_third_party_event_rules()
|
self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
|
||||||
|
|
||||||
async def on_DELETE(
|
async def on_DELETE(
|
||||||
self, request: SynapseRequest, room_id: str
|
self, request: SynapseRequest, room_id: str
|
||||||
|
|
|
@ -42,7 +42,6 @@ from synapse.crypto.context_factory import RegularPolicyForHTTPS
|
||||||
from synapse.crypto.keyring import Keyring
|
from synapse.crypto.keyring import Keyring
|
||||||
from synapse.events.builder import EventBuilderFactory
|
from synapse.events.builder import EventBuilderFactory
|
||||||
from synapse.events.presence_router import PresenceRouter
|
from synapse.events.presence_router import PresenceRouter
|
||||||
from synapse.events.third_party_rules import ThirdPartyEventRules
|
|
||||||
from synapse.events.utils import EventClientSerializer
|
from synapse.events.utils import EventClientSerializer
|
||||||
from synapse.federation.federation_client import FederationClient
|
from synapse.federation.federation_client import FederationClient
|
||||||
from synapse.federation.federation_server import (
|
from synapse.federation.federation_server import (
|
||||||
|
@ -691,10 +690,6 @@ class HomeServer(metaclass=abc.ABCMeta):
|
||||||
def get_stats_handler(self) -> StatsHandler:
|
def get_stats_handler(self) -> StatsHandler:
|
||||||
return StatsHandler(self)
|
return StatsHandler(self)
|
||||||
|
|
||||||
@cache_in_self
|
|
||||||
def get_third_party_event_rules(self) -> ThirdPartyEventRules:
|
|
||||||
return ThirdPartyEventRules(self)
|
|
||||||
|
|
||||||
@cache_in_self
|
@cache_in_self
|
||||||
def get_password_auth_provider(self) -> PasswordAuthProvider:
|
def get_password_auth_provider(self) -> PasswordAuthProvider:
|
||||||
return PasswordAuthProvider()
|
return PasswordAuthProvider()
|
||||||
|
|
|
@ -22,7 +22,9 @@ from synapse.api.errors import SynapseError
|
||||||
from synapse.api.room_versions import RoomVersion
|
from synapse.api.room_versions import RoomVersion
|
||||||
from synapse.config.homeserver import HomeServerConfig
|
from synapse.config.homeserver import HomeServerConfig
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
from synapse.events.third_party_rules import load_legacy_third_party_event_rules
|
from synapse.module_api.callbacks.third_party_event_rules_callbacks import (
|
||||||
|
load_legacy_third_party_event_rules,
|
||||||
|
)
|
||||||
from synapse.rest import admin
|
from synapse.rest import admin
|
||||||
from synapse.rest.client import account, login, profile, room
|
from synapse.rest.client import account, login, profile, room
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
|
@ -146,7 +148,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
return ev.type != "foo.bar.forbidden", None
|
return ev.type != "foo.bar.forbidden", None
|
||||||
|
|
||||||
callback = Mock(spec=[], side_effect=check)
|
callback = Mock(spec=[], side_effect=check)
|
||||||
self.hs.get_third_party_event_rules()._check_event_allowed_callbacks = [
|
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [
|
||||||
callback
|
callback
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -202,7 +204,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
) -> Tuple[bool, Optional[JsonDict]]:
|
) -> Tuple[bool, Optional[JsonDict]]:
|
||||||
raise NastyHackException(429, "message")
|
raise NastyHackException(429, "message")
|
||||||
|
|
||||||
self.hs.get_third_party_event_rules()._check_event_allowed_callbacks = [check]
|
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [
|
||||||
|
check
|
||||||
|
]
|
||||||
|
|
||||||
# Make a request
|
# Make a request
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
|
@ -229,7 +233,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
ev.content = {"x": "y"}
|
ev.content = {"x": "y"}
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
self.hs.get_third_party_event_rules()._check_event_allowed_callbacks = [check]
|
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [
|
||||||
|
check
|
||||||
|
]
|
||||||
|
|
||||||
# now send the event
|
# now send the event
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
|
@ -253,7 +259,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
d["content"] = {"x": "y"}
|
d["content"] = {"x": "y"}
|
||||||
return True, d
|
return True, d
|
||||||
|
|
||||||
self.hs.get_third_party_event_rules()._check_event_allowed_callbacks = [check]
|
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [
|
||||||
|
check
|
||||||
|
]
|
||||||
|
|
||||||
# now send the event
|
# now send the event
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
|
@ -289,7 +297,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
}
|
}
|
||||||
return True, d
|
return True, d
|
||||||
|
|
||||||
self.hs.get_third_party_event_rules()._check_event_allowed_callbacks = [check]
|
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [
|
||||||
|
check
|
||||||
|
]
|
||||||
|
|
||||||
# Send an event, then edit it.
|
# Send an event, then edit it.
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
|
@ -440,7 +450,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
)
|
)
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
self.hs.get_third_party_event_rules()._check_event_allowed_callbacks = [test_fn]
|
self.hs.get_module_api_callbacks().third_party_event_rules._check_event_allowed_callbacks = [
|
||||||
|
test_fn
|
||||||
|
]
|
||||||
|
|
||||||
# Sometimes the bug might not happen the first time the event type is added
|
# Sometimes the bug might not happen the first time the event type is added
|
||||||
# to the state but might happen when an event updates the state of the room for
|
# to the state but might happen when an event updates the state of the room for
|
||||||
|
@ -466,7 +478,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
def test_on_new_event(self) -> None:
|
def test_on_new_event(self) -> None:
|
||||||
"""Test that the on_new_event callback is called on new events"""
|
"""Test that the on_new_event callback is called on new events"""
|
||||||
on_new_event = Mock(make_awaitable(None))
|
on_new_event = Mock(make_awaitable(None))
|
||||||
self.hs.get_third_party_event_rules()._on_new_event_callbacks.append(
|
self.hs.get_module_api_callbacks().third_party_event_rules._on_new_event_callbacks.append(
|
||||||
on_new_event
|
on_new_event
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -569,7 +581,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
|
|
||||||
# Register a mock callback.
|
# Register a mock callback.
|
||||||
m = Mock(return_value=make_awaitable(None))
|
m = Mock(return_value=make_awaitable(None))
|
||||||
self.hs.get_third_party_event_rules()._on_profile_update_callbacks.append(m)
|
self.hs.get_module_api_callbacks().third_party_event_rules._on_profile_update_callbacks.append(
|
||||||
|
m
|
||||||
|
)
|
||||||
|
|
||||||
# Change the display name.
|
# Change the display name.
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
|
@ -628,7 +642,9 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
|
|
||||||
# Register a mock callback.
|
# Register a mock callback.
|
||||||
m = Mock(return_value=make_awaitable(None))
|
m = Mock(return_value=make_awaitable(None))
|
||||||
self.hs.get_third_party_event_rules()._on_profile_update_callbacks.append(m)
|
self.hs.get_module_api_callbacks().third_party_event_rules._on_profile_update_callbacks.append(
|
||||||
|
m
|
||||||
|
)
|
||||||
|
|
||||||
# Register an admin user.
|
# Register an admin user.
|
||||||
self.register_user("admin", "password", admin=True)
|
self.register_user("admin", "password", admin=True)
|
||||||
|
@ -667,7 +683,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
"""
|
"""
|
||||||
# Register a mocked callback.
|
# Register a mocked callback.
|
||||||
deactivation_mock = Mock(return_value=make_awaitable(None))
|
deactivation_mock = Mock(return_value=make_awaitable(None))
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
third_party_rules = self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
third_party_rules._on_user_deactivation_status_changed_callbacks.append(
|
third_party_rules._on_user_deactivation_status_changed_callbacks.append(
|
||||||
deactivation_mock,
|
deactivation_mock,
|
||||||
)
|
)
|
||||||
|
@ -675,7 +691,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
# deactivation code calls it in a way that let modules know the user is being
|
# deactivation code calls it in a way that let modules know the user is being
|
||||||
# deactivated.
|
# deactivated.
|
||||||
profile_mock = Mock(return_value=make_awaitable(None))
|
profile_mock = Mock(return_value=make_awaitable(None))
|
||||||
self.hs.get_third_party_event_rules()._on_profile_update_callbacks.append(
|
self.hs.get_module_api_callbacks().third_party_event_rules._on_profile_update_callbacks.append(
|
||||||
profile_mock,
|
profile_mock,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -725,7 +741,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
"""
|
"""
|
||||||
# Register a mock callback.
|
# Register a mock callback.
|
||||||
m = Mock(return_value=make_awaitable(None))
|
m = Mock(return_value=make_awaitable(None))
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
third_party_rules = self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
third_party_rules._on_user_deactivation_status_changed_callbacks.append(m)
|
third_party_rules._on_user_deactivation_status_changed_callbacks.append(m)
|
||||||
|
|
||||||
# Register an admin user.
|
# Register an admin user.
|
||||||
|
@ -779,7 +795,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
"""
|
"""
|
||||||
# Register a mocked callback.
|
# Register a mocked callback.
|
||||||
deactivation_mock = Mock(return_value=make_awaitable(False))
|
deactivation_mock = Mock(return_value=make_awaitable(False))
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
third_party_rules = self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
third_party_rules._check_can_deactivate_user_callbacks.append(
|
third_party_rules._check_can_deactivate_user_callbacks.append(
|
||||||
deactivation_mock,
|
deactivation_mock,
|
||||||
)
|
)
|
||||||
|
@ -825,7 +841,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
"""
|
"""
|
||||||
# Register a mocked callback.
|
# Register a mocked callback.
|
||||||
deactivation_mock = Mock(return_value=make_awaitable(False))
|
deactivation_mock = Mock(return_value=make_awaitable(False))
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
third_party_rules = self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
third_party_rules._check_can_deactivate_user_callbacks.append(
|
third_party_rules._check_can_deactivate_user_callbacks.append(
|
||||||
deactivation_mock,
|
deactivation_mock,
|
||||||
)
|
)
|
||||||
|
@ -864,7 +880,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
"""
|
"""
|
||||||
# Register a mocked callback.
|
# Register a mocked callback.
|
||||||
shutdown_mock = Mock(return_value=make_awaitable(False))
|
shutdown_mock = Mock(return_value=make_awaitable(False))
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
third_party_rules = self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
third_party_rules._check_can_shutdown_room_callbacks.append(
|
third_party_rules._check_can_shutdown_room_callbacks.append(
|
||||||
shutdown_mock,
|
shutdown_mock,
|
||||||
)
|
)
|
||||||
|
@ -900,7 +916,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
"""
|
"""
|
||||||
# Register a mocked callback.
|
# Register a mocked callback.
|
||||||
threepid_bind_mock = Mock(return_value=make_awaitable(None))
|
threepid_bind_mock = Mock(return_value=make_awaitable(None))
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
third_party_rules = self.hs.get_module_api_callbacks().third_party_event_rules
|
||||||
third_party_rules._on_threepid_bind_callbacks.append(threepid_bind_mock)
|
third_party_rules._on_threepid_bind_callbacks.append(threepid_bind_mock)
|
||||||
|
|
||||||
# Register an admin user.
|
# Register an admin user.
|
||||||
|
@ -947,8 +963,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
on_remove_user_third_party_identifier_callback_mock = Mock(
|
on_remove_user_third_party_identifier_callback_mock = Mock(
|
||||||
return_value=make_awaitable(None)
|
return_value=make_awaitable(None)
|
||||||
)
|
)
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
self.hs.get_module_api().register_third_party_rules_callbacks(
|
||||||
third_party_rules.register_third_party_rules_callbacks(
|
|
||||||
on_add_user_third_party_identifier=on_add_user_third_party_identifier_callback_mock,
|
on_add_user_third_party_identifier=on_add_user_third_party_identifier_callback_mock,
|
||||||
on_remove_user_third_party_identifier=on_remove_user_third_party_identifier_callback_mock,
|
on_remove_user_third_party_identifier=on_remove_user_third_party_identifier_callback_mock,
|
||||||
)
|
)
|
||||||
|
@ -1009,8 +1024,7 @@ class ThirdPartyRulesTestCase(unittest.FederatingHomeserverTestCase):
|
||||||
on_remove_user_third_party_identifier_callback_mock = Mock(
|
on_remove_user_third_party_identifier_callback_mock = Mock(
|
||||||
return_value=make_awaitable(None)
|
return_value=make_awaitable(None)
|
||||||
)
|
)
|
||||||
third_party_rules = self.hs.get_third_party_event_rules()
|
self.hs.get_module_api().register_third_party_rules_callbacks(
|
||||||
third_party_rules.register_third_party_rules_callbacks(
|
|
||||||
on_remove_user_third_party_identifier=on_remove_user_third_party_identifier_callback_mock,
|
on_remove_user_third_party_identifier=on_remove_user_third_party_identifier_callback_mock,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -73,11 +73,13 @@ from twisted.web.server import Request, Site
|
||||||
from synapse.config.database import DatabaseConnectionConfig
|
from synapse.config.database import DatabaseConnectionConfig
|
||||||
from synapse.config.homeserver import HomeServerConfig
|
from synapse.config.homeserver import HomeServerConfig
|
||||||
from synapse.events.presence_router import load_legacy_presence_router
|
from synapse.events.presence_router import load_legacy_presence_router
|
||||||
from synapse.events.third_party_rules import load_legacy_third_party_event_rules
|
|
||||||
from synapse.handlers.auth import load_legacy_password_auth_providers
|
from synapse.handlers.auth import load_legacy_password_auth_providers
|
||||||
from synapse.http.site import SynapseRequest
|
from synapse.http.site import SynapseRequest
|
||||||
from synapse.logging.context import ContextResourceUsage
|
from synapse.logging.context import ContextResourceUsage
|
||||||
from synapse.module_api.callbacks.spamchecker_callbacks import load_legacy_spam_checkers
|
from synapse.module_api.callbacks.spamchecker_callbacks import load_legacy_spam_checkers
|
||||||
|
from synapse.module_api.callbacks.third_party_event_rules_callbacks import (
|
||||||
|
load_legacy_third_party_event_rules,
|
||||||
|
)
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
from synapse.storage import DataStore
|
from synapse.storage import DataStore
|
||||||
from synapse.storage.database import LoggingDatabaseConnection
|
from synapse.storage.database import LoggingDatabaseConnection
|
||||||
|
|
Loading…
Reference in a new issue