# Copyright 2021 The Matrix.org Foundation C.I.C. # # 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 http import HTTPStatus from synapse.api.errors import Codes from synapse.rest import admin from synapse.rest.client import keys, login from tests import unittest class KeyQueryTestCase(unittest.HomeserverTestCase): servlets = [ keys.register_servlets, admin.register_servlets_for_client_rest_resource, login.register_servlets, ] def test_rejects_device_id_ice_key_outside_of_list(self) -> None: self.register_user("alice", "wonderland") alice_token = self.login("alice", "wonderland") bob = self.register_user("bob", "uncle") channel = self.make_request( "POST", "/_matrix/client/r0/keys/query", { "device_keys": { bob: "device_id1", }, }, alice_token, ) self.assertEqual(channel.code, HTTPStatus.BAD_REQUEST, channel.result) self.assertEqual( channel.json_body["errcode"], Codes.BAD_JSON, channel.result, ) def test_rejects_device_key_given_as_map_to_bool(self) -> None: self.register_user("alice", "wonderland") alice_token = self.login("alice", "wonderland") bob = self.register_user("bob", "uncle") channel = self.make_request( "POST", "/_matrix/client/r0/keys/query", { "device_keys": { bob: { "device_id1": True, }, }, }, alice_token, ) self.assertEqual(channel.code, HTTPStatus.BAD_REQUEST, channel.result) self.assertEqual( channel.json_body["errcode"], Codes.BAD_JSON, channel.result, ) def test_requires_device_key(self) -> None: """`device_keys` is required. We should complain if it's missing.""" self.register_user("alice", "wonderland") alice_token = self.login("alice", "wonderland") channel = self.make_request( "POST", "/_matrix/client/r0/keys/query", {}, alice_token, ) self.assertEqual(channel.code, HTTPStatus.BAD_REQUEST, channel.result) self.assertEqual( channel.json_body["errcode"], Codes.BAD_JSON, channel.result, )