diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2019-09-24 17:04:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-24 17:04:54 +0100 |
commit | 4f6bbe9d0d3c2fbc89a3548e4fe2fa859d6cbc16 (patch) | |
tree | 0c64c6ace7581c2f4e83c6b79159a11d35fc20e1 /synapse/storage/registration.py | |
parent | remove unused parameter to get_user_id_by_threepid (#6099) (diff) | |
parent | Merge remote-tracking branch 'origin/develop' into rav/saml_mapping_work (diff) | |
download | synapse-4f6bbe9d0d3c2fbc89a3548e4fe2fa859d6cbc16.tar.xz |
Merge pull request #6037 from matrix-org/rav/saml_mapping_work
Update the process for mapping SAML2 users to matrix IDs
Diffstat (limited to 'synapse/storage/registration.py')
-rw-r--r-- | synapse/storage/registration.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/synapse/storage/registration.py b/synapse/storage/registration.py index 5cf2c893aa..ee5e85db84 100644 --- a/synapse/storage/registration.py +++ b/synapse/storage/registration.py @@ -22,6 +22,7 @@ from six import iterkeys from six.moves import range from twisted.internet import defer +from twisted.internet.defer import Deferred from synapse.api.constants import UserTypes from synapse.api.errors import Codes, StoreError, SynapseError, ThreepidValidationError @@ -384,6 +385,26 @@ class RegistrationWorkerStore(SQLBaseStore): return self.runInteraction("get_users_by_id_case_insensitive", f) + async def get_user_by_external_id( + self, auth_provider: str, external_id: str + ) -> str: + """Look up a user by their external auth id + + Args: + auth_provider: identifier for the remote auth provider + external_id: id on that system + + Returns: + str|None: the mxid of the user, or None if they are not known + """ + return await self._simple_select_one_onecol( + table="user_external_ids", + keyvalues={"auth_provider": auth_provider, "external_id": external_id}, + retcol="user_id", + allow_none=True, + desc="get_user_by_external_id", + ) + @defer.inlineCallbacks def count_all_users(self): """Counts all users registered on the homeserver.""" @@ -1032,6 +1053,26 @@ class RegistrationStore( self._invalidate_cache_and_stream(txn, self.get_user_by_id, (user_id,)) txn.call_after(self.is_guest.invalidate, (user_id,)) + def record_user_external_id( + self, auth_provider: str, external_id: str, user_id: str + ) -> Deferred: + """Record a mapping from an external user id to a mxid + + Args: + auth_provider: identifier for the remote auth provider + external_id: id on that system + user_id: complete mxid that it is mapped to + """ + return self._simple_insert( + table="user_external_ids", + values={ + "auth_provider": auth_provider, + "external_id": external_id, + "user_id": user_id, + }, + desc="record_user_external_id", + ) + def user_set_password_hash(self, user_id, password_hash): """ NB. This does *not* evict any cache because the one use for this |