From ee0ee97447dc9ef1faf5f9ce26c5accbd3f0031b Mon Sep 17 00:00:00 2001 From: Brendan Abolivier Date: Fri, 28 Jun 2019 10:29:02 +0100 Subject: [PATCH] Add test case for #5574 There's no test that makes sure #5574 didn't break things or works correctly (my bad), so this PR adds a test case that makes sure of it. --- tests/handlers/test_identity.py | 108 ++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 tests/handlers/test_identity.py diff --git a/tests/handlers/test_identity.py b/tests/handlers/test_identity.py new file mode 100644 index 000000000..99ce94db5 --- /dev/null +++ b/tests/handlers/test_identity.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# Copyright 2019 New Vector Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from mock import Mock + +from twisted.internet import defer + +import synapse.rest.admin +from synapse.rest.client.v1 import login +from synapse.rest.client.v2_alpha import account + +from tests import unittest + + +class ThreepidISRewrittenURLTestCase(unittest.HomeserverTestCase): + + servlets = [ + synapse.rest.admin.register_servlets_for_client_rest_resource, + login.register_servlets, + account.register_servlets, + ] + + def make_homeserver(self, reactor, clock): + self.address = "test@test" + self.is_server_name = "testis" + self.rewritten_is_url = "int.testis" + + config = self.default_config() + config["trusted_third_party_id_servers"] = [ + self.is_server_name, + ] + config["rewrite_identity_server_urls"] = { + 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({ + "address": self.address, + "medium": "email", + }) + + self.hs = self.setup_test_homeserver( + config=config, + simple_http_client=mock_http_client, + ) + + return self.hs + + def prepare(self, reactor, clock, hs): + self.user_id = self.register_user("kermit", "monkey") + + def test_rewritten_id_server(self): + """ + Tests that, when validating a 3PID association while rewriting the IS's server + name: + * the bind request is done against the rewritten hostname + * 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 + store = self.hs.get_datastore() + + creds = { + "sid": "123", + "client_secret": "some_secret", + } + + # Make sure processing the mocked response goes through. + data = self.get_success(handler.bind_threepid( + { + "id_server": self.is_server_name, + "client_secret": creds["client_secret"], + "sid": creds["sid"], + }, + self.user_id, + )) + 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( + "https://%s/_matrix/identity/api/v1/3pid/bind" % self.rewritten_is_url, + { + 'sid': creds['sid'], + 'client_secret': creds["client_secret"], + 'mxid': self.user_id, + } + ) + + # Check that the original server name is saved in the database instead of the + # rewritten one. + id_servers = self.get_success(store.get_id_servers_user_bound( + self.user_id, "email", self.address + )) + self.assertEqual(id_servers, [self.is_server_name])