From 4828537a6c8f9816bde42a79b877062402b9c254 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 26 Mar 2020 15:31:16 +0000 Subject: [PATCH 1/5] Cast is_verified to a boolean --- synapse/storage/data_stores/main/e2e_room_keys.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/synapse/storage/data_stores/main/e2e_room_keys.py b/synapse/storage/data_stores/main/e2e_room_keys.py index 84594cf0a9bc..23f4570c4b3e 100644 --- a/synapse/storage/data_stores/main/e2e_room_keys.py +++ b/synapse/storage/data_stores/main/e2e_room_keys.py @@ -146,7 +146,8 @@ def get_e2e_room_keys(self, user_id, version, room_id=None, session_id=None): room_entry["sessions"][row["session_id"]] = { "first_message_index": row["first_message_index"], "forwarded_count": row["forwarded_count"], - "is_verified": row["is_verified"], + # is_verified must be returned to the client as a boolean + "is_verified": bool(row["is_verified"]), "session_data": json.loads(row["session_data"]), } From ce46f560f877411492b632f8ed71c26b7e4e4ca9 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 26 Mar 2020 15:31:26 +0000 Subject: [PATCH 2/5] Warn user about missing version param instead of 500'ing --- synapse/rest/client/v2_alpha/room_keys.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/synapse/rest/client/v2_alpha/room_keys.py b/synapse/rest/client/v2_alpha/room_keys.py index 38952a1d276a..00aa44b0f2e6 100644 --- a/synapse/rest/client/v2_alpha/room_keys.py +++ b/synapse/rest/client/v2_alpha/room_keys.py @@ -190,6 +190,9 @@ async def on_GET(self, request, room_id, session_id): user_id = requester.user.to_string() version = parse_string(request, "version") + if not version: + raise SynapseError(400, "Missing version query parameter", errcode=Codes.MISSING_PARAM) + room_keys = await self.e2e_room_keys_handler.get_room_keys( user_id, version, room_id, session_id ) From a5fa56c71ad351808cb6fd5ac97d9eac34743f2d Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 26 Mar 2020 15:38:54 +0000 Subject: [PATCH 3/5] Add changelog --- changelog.d/7150.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/7150.bugfix diff --git a/changelog.d/7150.bugfix b/changelog.d/7150.bugfix new file mode 100644 index 000000000000..1feb294799a9 --- /dev/null +++ b/changelog.d/7150.bugfix @@ -0,0 +1 @@ +Ensure `is_verified` is a boolean in responses to `GET /_matrix/client/r0/room_keys/keys`. Also warn the user if they forgot the `version` query param. \ No newline at end of file From a15a73789baa61bc7d15dcc303a3e8bc916aaa01 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 26 Mar 2020 15:40:06 +0000 Subject: [PATCH 4/5] lint --- synapse/rest/client/v2_alpha/room_keys.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/synapse/rest/client/v2_alpha/room_keys.py b/synapse/rest/client/v2_alpha/room_keys.py index 00aa44b0f2e6..2f73617c2940 100644 --- a/synapse/rest/client/v2_alpha/room_keys.py +++ b/synapse/rest/client/v2_alpha/room_keys.py @@ -191,7 +191,9 @@ async def on_GET(self, request, room_id, session_id): version = parse_string(request, "version") if not version: - raise SynapseError(400, "Missing version query parameter", errcode=Codes.MISSING_PARAM) + raise SynapseError( + 400, "Missing version query parameter", errcode=Codes.MISSING_PARAM + ) room_keys = await self.e2e_room_keys_handler.get_room_keys( user_id, version, room_id, session_id From 26b1c9842ffce8fd62d7ca9c8674db7f0a1ddf51 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 26 Mar 2020 16:47:02 +0000 Subject: [PATCH 5/5] Use required param of parse_string --- synapse/rest/client/v2_alpha/room_keys.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/synapse/rest/client/v2_alpha/room_keys.py b/synapse/rest/client/v2_alpha/room_keys.py index 2f73617c2940..59529707dfa2 100644 --- a/synapse/rest/client/v2_alpha/room_keys.py +++ b/synapse/rest/client/v2_alpha/room_keys.py @@ -188,12 +188,7 @@ async def on_GET(self, request, room_id, session_id): """ requester = await self.auth.get_user_by_req(request, allow_guest=False) user_id = requester.user.to_string() - version = parse_string(request, "version") - - if not version: - raise SynapseError( - 400, "Missing version query parameter", errcode=Codes.MISSING_PARAM - ) + version = parse_string(request, "version", required=True) room_keys = await self.e2e_room_keys_handler.get_room_keys( user_id, version, room_id, session_id