mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
Consolidate the logic of delete_device/delete_devices. (#12970)
By always using delete_devices and sometimes passing a list with a single device ID. Previously these methods had gotten out of sync with each other and it seems there's little benefit to the single-device variant.
This commit is contained in:
parent
c51f5b9592
commit
9dc3293e0b
8 changed files with 12 additions and 48 deletions
1
changelog.d/12970.misc
Normal file
1
changelog.d/12970.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Remove the `delete_device` method and always call `delete_devices`.
|
|
@ -397,35 +397,6 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
for user_id, user_devices in devices.items():
|
for user_id, user_devices in devices.items():
|
||||||
await self.delete_devices(user_id, user_devices)
|
await self.delete_devices(user_id, user_devices)
|
||||||
|
|
||||||
@trace
|
|
||||||
async def delete_device(self, user_id: str, device_id: str) -> None:
|
|
||||||
"""Delete the given device
|
|
||||||
|
|
||||||
Args:
|
|
||||||
user_id: The user to delete the device from.
|
|
||||||
device_id: The device to delete.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
await self.store.delete_device(user_id, device_id)
|
|
||||||
except errors.StoreError as e:
|
|
||||||
if e.code == 404:
|
|
||||||
# no match
|
|
||||||
set_tag("error", True)
|
|
||||||
log_kv(
|
|
||||||
{"reason": "User doesn't have device id.", "device_id": device_id}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
await self._auth_handler.delete_access_tokens_for_user(
|
|
||||||
user_id, device_id=device_id
|
|
||||||
)
|
|
||||||
|
|
||||||
await self.store.delete_e2e_keys_by_device(user_id=user_id, device_id=device_id)
|
|
||||||
|
|
||||||
await self.notify_device_update(user_id, [device_id])
|
|
||||||
|
|
||||||
@trace
|
@trace
|
||||||
async def delete_all_devices_for_user(
|
async def delete_all_devices_for_user(
|
||||||
self, user_id: str, except_device_id: Optional[str] = None
|
self, user_id: str, except_device_id: Optional[str] = None
|
||||||
|
@ -591,7 +562,7 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
user_id, device_id, device_data
|
user_id, device_id, device_data
|
||||||
)
|
)
|
||||||
if old_device_id is not None:
|
if old_device_id is not None:
|
||||||
await self.delete_device(user_id, old_device_id)
|
await self.delete_devices(user_id, [old_device_id])
|
||||||
return device_id
|
return device_id
|
||||||
|
|
||||||
async def get_dehydrated_device(
|
async def get_dehydrated_device(
|
||||||
|
@ -638,7 +609,7 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
await self.store.update_device(user_id, device_id, old_device["display_name"])
|
await self.store.update_device(user_id, device_id, old_device["display_name"])
|
||||||
# can't call self.delete_device because that will clobber the
|
# can't call self.delete_device because that will clobber the
|
||||||
# access token so call the storage layer directly
|
# access token so call the storage layer directly
|
||||||
await self.store.delete_device(user_id, old_device_id)
|
await self.store.delete_devices(user_id, [old_device_id])
|
||||||
await self.store.delete_e2e_keys_by_device(
|
await self.store.delete_e2e_keys_by_device(
|
||||||
user_id=user_id, device_id=old_device_id
|
user_id=user_id, device_id=old_device_id
|
||||||
)
|
)
|
||||||
|
|
|
@ -799,7 +799,7 @@ class ModuleApi:
|
||||||
if device_id:
|
if device_id:
|
||||||
# delete the device, which will also delete its access tokens
|
# delete the device, which will also delete its access tokens
|
||||||
yield defer.ensureDeferred(
|
yield defer.ensureDeferred(
|
||||||
self._hs.get_device_handler().delete_device(user_id, device_id)
|
self._hs.get_device_handler().delete_devices(user_id, [device_id])
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# no associated device. Just delete the access token.
|
# no associated device. Just delete the access token.
|
||||||
|
|
|
@ -80,7 +80,7 @@ class DeviceRestServlet(RestServlet):
|
||||||
if u is None:
|
if u is None:
|
||||||
raise NotFoundError("Unknown user")
|
raise NotFoundError("Unknown user")
|
||||||
|
|
||||||
await self.device_handler.delete_device(target_user.to_string(), device_id)
|
await self.device_handler.delete_devices(target_user.to_string(), [device_id])
|
||||||
return HTTPStatus.OK, {}
|
return HTTPStatus.OK, {}
|
||||||
|
|
||||||
async def on_PUT(
|
async def on_PUT(
|
||||||
|
|
|
@ -147,7 +147,9 @@ class DeviceRestServlet(RestServlet):
|
||||||
can_skip_ui_auth=True,
|
can_skip_ui_auth=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
await self.device_handler.delete_device(requester.user.to_string(), device_id)
|
await self.device_handler.delete_devices(
|
||||||
|
requester.user.to_string(), [device_id]
|
||||||
|
)
|
||||||
return 200, {}
|
return 200, {}
|
||||||
|
|
||||||
async def on_PUT(
|
async def on_PUT(
|
||||||
|
|
|
@ -45,8 +45,8 @@ class LogoutRestServlet(RestServlet):
|
||||||
access_token = self.auth.get_access_token_from_request(request)
|
access_token = self.auth.get_access_token_from_request(request)
|
||||||
await self._auth_handler.delete_access_token(access_token)
|
await self._auth_handler.delete_access_token(access_token)
|
||||||
else:
|
else:
|
||||||
await self._device_handler.delete_device(
|
await self._device_handler.delete_devices(
|
||||||
requester.user.to_string(), requester.device_id
|
requester.user.to_string(), [requester.device_id]
|
||||||
)
|
)
|
||||||
|
|
||||||
return 200, {}
|
return 200, {}
|
||||||
|
|
|
@ -1433,16 +1433,6 @@ class DeviceStore(DeviceWorkerStore, DeviceBackgroundUpdateStore):
|
||||||
)
|
)
|
||||||
raise StoreError(500, "Problem storing device.")
|
raise StoreError(500, "Problem storing device.")
|
||||||
|
|
||||||
async def delete_device(self, user_id: str, device_id: str) -> None:
|
|
||||||
"""Delete a device and its device_inbox.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
user_id: The ID of the user which owns the device
|
|
||||||
device_id: The ID of the device to delete
|
|
||||||
"""
|
|
||||||
|
|
||||||
await self.delete_devices(user_id, [device_id])
|
|
||||||
|
|
||||||
async def delete_devices(self, user_id: str, device_ids: List[str]) -> None:
|
async def delete_devices(self, user_id: str, device_ids: List[str]) -> None:
|
||||||
"""Deletes several devices.
|
"""Deletes several devices.
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@ class DeviceTestCase(unittest.HomeserverTestCase):
|
||||||
self._record_users()
|
self._record_users()
|
||||||
|
|
||||||
# delete the device
|
# delete the device
|
||||||
self.get_success(self.handler.delete_device(user1, "abc"))
|
self.get_success(self.handler.delete_devices(user1, ["abc"]))
|
||||||
|
|
||||||
# check the device was deleted
|
# check the device was deleted
|
||||||
self.get_failure(self.handler.get_device(user1, "abc"), NotFoundError)
|
self.get_failure(self.handler.get_device(user1, "abc"), NotFoundError)
|
||||||
|
@ -179,7 +179,7 @@ class DeviceTestCase(unittest.HomeserverTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# delete the device
|
# delete the device
|
||||||
self.get_success(self.handler.delete_device(user1, "abc"))
|
self.get_success(self.handler.delete_devices(user1, ["abc"]))
|
||||||
|
|
||||||
# check that the device_inbox was deleted
|
# check that the device_inbox was deleted
|
||||||
res = self.get_success(
|
res = self.get_success(
|
||||||
|
|
Loading…
Reference in a new issue