summary refs log tree commit diff
path: root/synapse/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/handlers')
-rw-r--r--synapse/handlers/e2e_room_keys.py37
1 files changed, 26 insertions, 11 deletions
diff --git a/synapse/handlers/e2e_room_keys.py b/synapse/handlers/e2e_room_keys.py
index 546050f8e7..7bc174070e 100644
--- a/synapse/handlers/e2e_room_keys.py
+++ b/synapse/handlers/e2e_room_keys.py
@@ -327,20 +327,35 @@ class E2eRoomKeysHandler(object):
         Returns:
             A deferred of an empty dict.
         """
-        try:
-            old_info = yield self.store.get_e2e_room_keys_version_info(user_id, version)
-        except StoreError as e:
-            if e.code == 404:
-                raise NotFoundError("Unknown backup version")
-            else:
-                raise
-        if old_info["algorithm"] != version_info["algorithm"]:
+        if "version" not in version_info:
+            raise SynapseError(
+                400,
+                "Missing version in body",
+                Codes.MISSING_PARAM
+            )
+        if version_info["version"] != version:
             raise SynapseError(
                 400,
-                "Algorithm does not match",
+                "Version in body does not match",
                 Codes.INVALID_PARAM
             )
+        with (yield self._upload_linearizer.queue(user_id)):
+            try:
+                old_info = yield self.store.get_e2e_room_keys_version_info(
+                    user_id, version
+                )
+            except StoreError as e:
+                if e.code == 404:
+                    raise NotFoundError("Unknown backup version")
+                else:
+                    raise
+            if old_info["algorithm"] != version_info["algorithm"]:
+                raise SynapseError(
+                    400,
+                    "Algorithm does not match",
+                    Codes.INVALID_PARAM
+                )
 
-        yield self.store.update_e2e_room_keys_version(user_id, version, version_info)
+            yield self.store.update_e2e_room_keys_version(user_id, version, version_info)
 
-        defer.returnValue({})
+            defer.returnValue({})