@@ -259,6 +259,32 @@ def __init__(self, hs: "HomeServer"):
259259 self .auth = hs .get_auth ()
260260 self .e2e_room_keys_handler = hs .get_e2e_room_keys_handler ()
261261
262+ async def on_GET (self , request : SynapseRequest ) -> Tuple [int , JsonDict ]:
263+ """
264+ Retrieve the version information about the most current backup version (if any)
265+
266+ It takes out an exclusive lock on this user's room_key backups, to ensure
267+ clients only upload to the current backup.
268+
269+ Returns 404 if the given version does not exist.
270+
271+ GET /room_keys/version HTTP/1.1
272+ {
273+ "version": "12345",
274+ "algorithm": "m.megolm_backup.v1",
275+ "auth_data": "dGhpcyBzaG91bGQgYWN0dWFsbHkgYmUgZW5jcnlwdGVkIGpzb24K"
276+ }
277+ """
278+ requester = await self .auth .get_user_by_req (request , allow_guest = False )
279+ user_id = requester .user .to_string ()
280+
281+ try :
282+ info = await self .e2e_room_keys_handler .get_version_info (user_id )
283+ except SynapseError as e :
284+ if e .code == 404 :
285+ raise SynapseError (404 , "No backup found" , Codes .NOT_FOUND )
286+ return 200 , info
287+
262288 async def on_POST (self , request : SynapseRequest ) -> Tuple [int , JsonDict ]:
263289 """
264290 Create a new backup version for this user's room_keys with the given
@@ -301,20 +327,19 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
301327
302328
303329class RoomKeysVersionServlet (RestServlet ):
304- PATTERNS = client_patterns ("/room_keys/version( /(?P<version>[^/]+))? $" )
330+ PATTERNS = client_patterns ("/room_keys/version/(?P<version>[^/]+)$" )
305331
306332 def __init__ (self , hs : "HomeServer" ):
307333 super ().__init__ ()
308334 self .auth = hs .get_auth ()
309335 self .e2e_room_keys_handler = hs .get_e2e_room_keys_handler ()
310336
311337 async def on_GET (
312- self , request : SynapseRequest , version : Optional [ str ]
338+ self , request : SynapseRequest , version : str
313339 ) -> Tuple [int , JsonDict ]:
314340 """
315341 Retrieve the version information about a given version of the user's
316- room_keys backup. If the version part is missing, returns info about the
317- most current backup version (if any)
342+ room_keys backup.
318343
319344 It takes out an exclusive lock on this user's room_key backups, to ensure
320345 clients only upload to the current backup.
@@ -339,28 +364,24 @@ async def on_GET(
339364 return 200 , info
340365
341366 async def on_DELETE (
342- self , request : SynapseRequest , version : Optional [ str ]
367+ self , request : SynapseRequest , version : str
343368 ) -> Tuple [int , JsonDict ]:
344369 """
345370 Delete the information about a given version of the user's
346- room_keys backup. If the version part is missing, deletes the most
347- current backup version (if any). Doesn't delete the actual room data.
371+ room_keys backup. Doesn't delete the actual room data.
348372
349373 DELETE /room_keys/version/12345 HTTP/1.1
350374 HTTP/1.1 200 OK
351375 {}
352376 """
353- if version is None :
354- raise SynapseError (400 , "No version specified to delete" , Codes .NOT_FOUND )
355-
356377 requester = await self .auth .get_user_by_req (request , allow_guest = False )
357378 user_id = requester .user .to_string ()
358379
359380 await self .e2e_room_keys_handler .delete_version (user_id , version )
360381 return 200 , {}
361382
362383 async def on_PUT (
363- self , request : SynapseRequest , version : Optional [ str ]
384+ self , request : SynapseRequest , version : str
364385 ) -> Tuple [int , JsonDict ]:
365386 """
366387 Update the information about a given version of the user's room_keys backup.
@@ -386,11 +407,6 @@ async def on_PUT(
386407 user_id = requester .user .to_string ()
387408 info = parse_json_object_from_request (request )
388409
389- if version is None :
390- raise SynapseError (
391- 400 , "No version specified to update" , Codes .MISSING_PARAM
392- )
393-
394410 await self .e2e_room_keys_handler .update_version (user_id , version , info )
395411 return 200 , {}
396412
0 commit comments