Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 9dc3293

Browse files
authored
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.
1 parent c51f5b9 commit 9dc3293

File tree

8 files changed

+12
-48
lines changed

8 files changed

+12
-48
lines changed

changelog.d/12970.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove the `delete_device` method and always call `delete_devices`.

synapse/handlers/device.py

+2-31
Original file line numberDiff line numberDiff line change
@@ -397,35 +397,6 @@ async def _delete_stale_devices(self) -> None:
397397
for user_id, user_devices in devices.items():
398398
await self.delete_devices(user_id, user_devices)
399399

400-
@trace
401-
async def delete_device(self, user_id: str, device_id: str) -> None:
402-
"""Delete the given device
403-
404-
Args:
405-
user_id: The user to delete the device from.
406-
device_id: The device to delete.
407-
"""
408-
409-
try:
410-
await self.store.delete_device(user_id, device_id)
411-
except errors.StoreError as e:
412-
if e.code == 404:
413-
# no match
414-
set_tag("error", True)
415-
log_kv(
416-
{"reason": "User doesn't have device id.", "device_id": device_id}
417-
)
418-
else:
419-
raise
420-
421-
await self._auth_handler.delete_access_tokens_for_user(
422-
user_id, device_id=device_id
423-
)
424-
425-
await self.store.delete_e2e_keys_by_device(user_id=user_id, device_id=device_id)
426-
427-
await self.notify_device_update(user_id, [device_id])
428-
429400
@trace
430401
async def delete_all_devices_for_user(
431402
self, user_id: str, except_device_id: Optional[str] = None
@@ -591,7 +562,7 @@ async def store_dehydrated_device(
591562
user_id, device_id, device_data
592563
)
593564
if old_device_id is not None:
594-
await self.delete_device(user_id, old_device_id)
565+
await self.delete_devices(user_id, [old_device_id])
595566
return device_id
596567

597568
async def get_dehydrated_device(
@@ -638,7 +609,7 @@ async def rehydrate_device(
638609
await self.store.update_device(user_id, device_id, old_device["display_name"])
639610
# can't call self.delete_device because that will clobber the
640611
# access token so call the storage layer directly
641-
await self.store.delete_device(user_id, old_device_id)
612+
await self.store.delete_devices(user_id, [old_device_id])
642613
await self.store.delete_e2e_keys_by_device(
643614
user_id=user_id, device_id=old_device_id
644615
)

synapse/module_api/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ def invalidate_access_token(
799799
if device_id:
800800
# delete the device, which will also delete its access tokens
801801
yield defer.ensureDeferred(
802-
self._hs.get_device_handler().delete_device(user_id, device_id)
802+
self._hs.get_device_handler().delete_devices(user_id, [device_id])
803803
)
804804
else:
805805
# no associated device. Just delete the access token.

synapse/rest/admin/devices.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ async def on_DELETE(
8080
if u is None:
8181
raise NotFoundError("Unknown user")
8282

83-
await self.device_handler.delete_device(target_user.to_string(), device_id)
83+
await self.device_handler.delete_devices(target_user.to_string(), [device_id])
8484
return HTTPStatus.OK, {}
8585

8686
async def on_PUT(

synapse/rest/client/devices.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,9 @@ async def on_DELETE(
147147
can_skip_ui_auth=True,
148148
)
149149

150-
await self.device_handler.delete_device(requester.user.to_string(), device_id)
150+
await self.device_handler.delete_devices(
151+
requester.user.to_string(), [device_id]
152+
)
151153
return 200, {}
152154

153155
async def on_PUT(

synapse/rest/client/logout.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
4545
access_token = self.auth.get_access_token_from_request(request)
4646
await self._auth_handler.delete_access_token(access_token)
4747
else:
48-
await self._device_handler.delete_device(
49-
requester.user.to_string(), requester.device_id
48+
await self._device_handler.delete_devices(
49+
requester.user.to_string(), [requester.device_id]
5050
)
5151

5252
return 200, {}

synapse/storage/databases/main/devices.py

-10
Original file line numberDiff line numberDiff line change
@@ -1433,16 +1433,6 @@ async def store_device(
14331433
)
14341434
raise StoreError(500, "Problem storing device.")
14351435

1436-
async def delete_device(self, user_id: str, device_id: str) -> None:
1437-
"""Delete a device and its device_inbox.
1438-
1439-
Args:
1440-
user_id: The ID of the user which owns the device
1441-
device_id: The ID of the device to delete
1442-
"""
1443-
1444-
await self.delete_devices(user_id, [device_id])
1445-
14461436
async def delete_devices(self, user_id: str, device_ids: List[str]) -> None:
14471437
"""Deletes several devices.
14481438

tests/handlers/test_device.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def test_delete_device(self) -> None:
154154
self._record_users()
155155

156156
# delete the device
157-
self.get_success(self.handler.delete_device(user1, "abc"))
157+
self.get_success(self.handler.delete_devices(user1, ["abc"]))
158158

159159
# check the device was deleted
160160
self.get_failure(self.handler.get_device(user1, "abc"), NotFoundError)
@@ -179,7 +179,7 @@ def test_delete_device_and_device_inbox(self) -> None:
179179
)
180180

181181
# delete the device
182-
self.get_success(self.handler.delete_device(user1, "abc"))
182+
self.get_success(self.handler.delete_devices(user1, ["abc"]))
183183

184184
# check that the device_inbox was deleted
185185
res = self.get_success(

0 commit comments

Comments
 (0)