diff --git a/changelog.d/5658.bugfix b/changelog.d/5658.bugfix new file mode 100644 index 0000000000..f6ae906a9a --- /dev/null +++ b/changelog.d/5658.bugfix @@ -0,0 +1 @@ +Fix 3PID bind requests being sent to identity servers as `application/x-form-www-urlencoded` data, which is deprecated. diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py index 0b40541570..8696682c76 100644 --- a/synapse/handlers/identity.py +++ b/synapse/handlers/identity.py @@ -136,7 +136,7 @@ class IdentityHandler(BaseHandler): id_server_host = id_server try: - data = yield self.http_client.post_urlencoded_get_json( + data = yield self.http_client.post_json_get_json( "https://%s%s" % (id_server_host, "/_matrix/identity/api/v1/3pid/bind"), {"sid": creds["sid"], "client_secret": client_secret, "mxid": mxid}, ) diff --git a/tests/handlers/test_identity.py b/tests/handlers/test_identity.py index b8ecdc5c9b..32c31b2f66 100644 --- a/tests/handlers/test_identity.py +++ b/tests/handlers/test_identity.py @@ -43,8 +43,8 @@ class ThreepidISRewrittenURLTestCase(unittest.HomeserverTestCase): self.is_server_name: self.rewritten_is_url } - mock_http_client = Mock(spec=["post_urlencoded_get_json"]) - mock_http_client.post_urlencoded_get_json.return_value = defer.succeed( + mock_http_client = Mock(spec=["post_json_get_json"]) + mock_http_client.post_json_get_json.return_value = defer.succeed( {"address": self.address, "medium": "email"} ) @@ -65,7 +65,7 @@ class ThreepidISRewrittenURLTestCase(unittest.HomeserverTestCase): * the original, non-rewritten, server name is stored in the database """ handler = self.hs.get_handlers().identity_handler - post_urlenc_get_json = self.hs.get_simple_http_client().post_urlencoded_get_json + post_json_get_json = self.hs.get_simple_http_client().post_json_get_json store = self.hs.get_datastore() creds = {"sid": "123", "client_secret": "some_secret"} @@ -84,7 +84,7 @@ class ThreepidISRewrittenURLTestCase(unittest.HomeserverTestCase): self.assertEqual(data.get("address"), self.address) # Check that the request was done against the rewritten server name. - post_urlenc_get_json.assert_called_once_with( + post_json_get_json.assert_called_once_with( "https://%s/_matrix/identity/api/v1/3pid/bind" % self.rewritten_is_url, { "sid": creds["sid"],