diff --git a/synapse/module_api/__init__.py b/synapse/module_api/__init__.py
index 0e9f366cba..a8d6224a45 100644
--- a/synapse/module_api/__init__.py
+++ b/synapse/module_api/__init__.py
@@ -38,6 +38,7 @@ from twisted.web.resource import Resource
from synapse.api import errors
from synapse.api.errors import SynapseError
+from synapse.config import ConfigError
from synapse.events import EventBase
from synapse.events.presence_router import (
GET_INTERESTED_USERS_CALLBACK,
@@ -121,6 +122,7 @@ from synapse.types import (
JsonMapping,
Requester,
RoomAlias,
+ RoomID,
StateMap,
UserID,
UserInfo,
@@ -252,6 +254,7 @@ class ModuleApi:
self._device_handler = hs.get_device_handler()
self.custom_template_dir = hs.config.server.custom_template_directory
self._callbacks = hs.get_module_api_callbacks()
+ self.msc3861_oauth_delegation_enabled = hs.config.experimental.msc3861.enabled
try:
app_name = self._hs.config.email.email_app_name
@@ -419,6 +422,11 @@ class ModuleApi:
Added in Synapse v1.46.0.
"""
+ if self.msc3861_oauth_delegation_enabled:
+ raise ConfigError(
+ "Cannot use password auth provider callbacks when OAuth delegation is enabled"
+ )
+
return self._password_auth_provider.register_password_auth_provider_callbacks(
check_3pid_auth=check_3pid_auth,
on_logged_out=on_logged_out,
@@ -1563,6 +1571,32 @@ class ModuleApi:
start_timestamp, end_timestamp
)
+ async def get_canonical_room_alias(self, room_id: RoomID) -> Optional[RoomAlias]:
+ """
+ Retrieve the given room's current canonical alias.
+
+ A room may declare an alias as "canonical", meaning that it is the
+ preferred alias to use when referring to the room. This function
+ retrieves that alias from the room's state.
+
+ Added in Synapse v1.86.0.
+
+ Args:
+ room_id: The Room ID to find the alias of.
+
+ Returns:
+ None if the room ID does not exist, or if the room exists but has no canonical alias.
+ Otherwise, the parsed room alias.
+ """
+ room_alias_str = (
+ await self._storage_controllers.state.get_canonical_alias_for_room(
+ room_id.to_string()
+ )
+ )
+ if room_alias_str:
+ return RoomAlias.from_string(room_alias_str)
+ return None
+
async def lookup_room_alias(self, room_alias: str) -> Tuple[str, List[str]]:
"""
Get the room ID associated with a room alias.
|