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.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/synapse/handlers/e2e_room_keys.py b/synapse/handlers/e2e_room_keys.py
index c5d7bf0c29..e0e5ece747 100644
--- a/synapse/handlers/e2e_room_keys.py
+++ b/synapse/handlers/e2e_room_keys.py
@@ -19,7 +19,8 @@ from six import iteritems
 
 from twisted.internet import defer
 
-from synapse.api.errors import NotFoundError, RoomKeysVersionError, StoreError
+from synapse.api.errors import Codes, NotFoundError, RoomKeysVersionError, \
+    StoreError, SynapseError
 from synapse.util.async_helpers import Linearizer
 
 logger = logging.getLogger(__name__)
@@ -307,3 +308,34 @@ class E2eRoomKeysHandler(object):
                     raise NotFoundError("Unknown backup version")
                 else:
                     raise
+
+    @defer.inlineCallbacks
+    def update_version(self, user_id, version, version_info):
+        """Update the info about a given version of the user's backup
+
+        Args:
+            user_id(str): the user whose current backup version we're updating
+            version(str): the backup version we're updating
+            version_info(dict): the new information about the backup
+        Raises:
+            NotFoundError: if the requested backup version doesn't exist
+        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"]:
+            raise SynapseError(
+                400,
+                "Algorithm does not match",
+                Codes.INVALID_PARAM
+            )
+
+        yield self.store.update_e2e_room_keys_version(user_id, version, version_info)
+
+        defer.returnValue({})