summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndrew Morgan <1342360+anoadragon453@users.noreply.github.com>2020-10-14 11:18:29 +0100
committerGitHub <noreply@github.com>2020-10-14 11:18:29 +0100
commita2b8233a4e97b9eba9dda979851781f54757436b (patch)
tree0e395f311472277df9d41ece895737c960129358
parent"Freeze" a room when the last admin of that room leaves (#59) (diff)
downloadsynapse-a2b8233a4e97b9eba9dda979851781f54757436b.tar.xz
Remember mappings when we bind a 3pid using the internal sydent bind API (#66)
https://github.com/matrix-org/synapse-dinsic/pull/51 added an option that would automatically bind a user's threepid to a configured identity server after they had registered. Unfortunately, when you bind threepids, ideally you would store that mapping in the database so that later on you can remove those mappings when you deactivate an account.

We found that due the fact that we did not store these mappings, threepids were not unbound upon user account deactivation.

This PR fixes the issue by creating the mappings again, meaning they will again be removed upon account deactivation.
Diffstat (limited to '')
-rw-r--r--changelog.d/66.bugfix1
-rw-r--r--synapse/handlers/identity.py9
-rw-r--r--tests/handlers/test_register.py6
3 files changed, 16 insertions, 0 deletions
diff --git a/changelog.d/66.bugfix b/changelog.d/66.bugfix
new file mode 100644

index 0000000000..9547cfeddd --- /dev/null +++ b/changelog.d/66.bugfix
@@ -0,0 +1 @@ +Create a mapping between user ID and threepid when binding via the internal Sydent bind API. \ No newline at end of file diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py
index 558ab24a8f..3cf76e954e 100644 --- a/synapse/handlers/identity.py +++ b/synapse/handlers/identity.py
@@ -1066,6 +1066,9 @@ class IdentityHandler(BaseHandler): Raises: HTTPResponseException: On a non-2xx HTTP response. """ + # Extract the domain name from the IS URL as we store IS domains instead of URLs + id_server = urllib.parse.urlparse(id_server_url).hostname + # id_server_url is assumed to have no trailing slashes url = id_server_url + "/_matrix/identity/internal/bind" body = { @@ -1074,8 +1077,14 @@ class IdentityHandler(BaseHandler): "mxid": user_id, } + # Bind the threepid await self.http_client.post_json_get_json(url, body) + # Remember where we bound the threepid + await self.store.add_user_bound_threepid( + user_id=user_id, medium="email", address=email, id_server=id_server, + ) + def create_id_access_token_header(id_access_token: str) -> List[str]: """Create an Authorization header for passing to SimpleHttpClient as the header value diff --git a/tests/handlers/test_register.py b/tests/handlers/test_register.py
index f5033c94fe..e951a62a6d 100644 --- a/tests/handlers/test_register.py +++ b/tests/handlers/test_register.py
@@ -566,6 +566,12 @@ class RegistrationTestCase(unittest.HomeserverTestCase): {"address": "alice@example.com", "medium": "email", "mxid": "@alice:test"}, ) + # Check that we stored a mapping of this bind + bound_threepids = self.get_success( + self.store.user_get_bound_threepids("@alice:test") + ) + self.assertListEqual(bound_threepids, [{"medium": "email", "address": email}]) + def uia_register(self, expected_response: int, body: dict) -> FakeChannel: """Make a register request.""" request, channel = self.make_request(