From 8cd760fca8aaa391fc265f555f6572ed00709a68 Mon Sep 17 00:00:00 2001 From: Brendan Abolivier Date: Mon, 28 Mar 2022 18:57:19 +0200 Subject: [PATCH] Allow modules to store already existing 3PID associations (#12195) --- changelog.d/12195.feature | 1 + synapse/module_api/__init__.py | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 changelog.d/12195.feature diff --git a/changelog.d/12195.feature b/changelog.d/12195.feature new file mode 100644 index 000000000..e8bcb950a --- /dev/null +++ b/changelog.d/12195.feature @@ -0,0 +1 @@ +Allow modules to store already existing 3PID associations. diff --git a/synapse/module_api/__init__.py b/synapse/module_api/__init__.py index a628faaf6..ba9755f08 100644 --- a/synapse/module_api/__init__.py +++ b/synapse/module_api/__init__.py @@ -671,7 +671,8 @@ class ModuleApi: def record_user_external_id( self, auth_provider_id: str, remote_user_id: str, registered_user_id: str ) -> defer.Deferred: - """Record a mapping from an external user id to a mxid + """Record a mapping between an external user id from a single sign-on provider + and a mxid. Added in Synapse v1.9.0. @@ -1286,6 +1287,30 @@ class ModuleApi: """ await self._registration_handler.check_username(username) + async def store_remote_3pid_association( + self, user_id: str, medium: str, address: str, id_server: str + ) -> None: + """Stores an existing association between a user ID and a third-party identifier. + + The association must already exist on the remote identity server. + + Added in Synapse v1.56.0. + + Args: + user_id: The user ID that's been associated with the 3PID. + medium: The medium of the 3PID (current supported values are "msisdn" and + "email"). + address: The address of the 3PID. + id_server: The identity server the 3PID association has been registered on. + This should only be the domain (or IP address, optionally with the port + number) for the identity server. This will be used to reach out to the + identity server using HTTPS (unless specified otherwise by Synapse's + configuration) when attempting to unbind the third-party identifier. + + + """ + await self._store.add_user_bound_threepid(user_id, medium, address, id_server) + class PublicRoomListManager: """Contains methods for adding to, removing from and querying whether a room