summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorHubert Chathi <hubert@uhoreg.ca>2019-02-08 01:32:45 -0500
committerHubert Chathi <hubert@uhoreg.ca>2019-02-08 01:32:45 -0500
commitafae8442b56d2e2466812916654396341038c38c (patch)
treea6fe2c1d79af3098912f030a51c28f3a7280753a /synapse
parentre-try to make isort happy (diff)
downloadsynapse-afae8442b56d2e2466812916654396341038c38c.tar.xz
make sure version is in body and wrap in linearizer queue
also add tests
Diffstat (limited to 'synapse')
-rw-r--r--synapse/handlers/e2e_room_keys.py37
-rw-r--r--synapse/rest/client/v2_alpha/room_keys.py3
2 files changed, 28 insertions, 12 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({})
diff --git a/synapse/rest/client/v2_alpha/room_keys.py b/synapse/rest/client/v2_alpha/room_keys.py
index 1c39d2af1c..220a0de30b 100644
--- a/synapse/rest/client/v2_alpha/room_keys.py
+++ b/synapse/rest/client/v2_alpha/room_keys.py
@@ -394,7 +394,8 @@ class RoomKeysVersionServlet(RestServlet):
                 "signatures": {
                     "ed25519:something": "hijklmnop"
                 }
-            }
+            },
+            "version": "42"
         }
 
         HTTP/1.1 200 OK