Skip to content
Snippets Groups Projects
Unverified Commit 73dbce55 authored by Hubert Chathi's avatar Hubert Chathi Committed by GitHub
Browse files

only save remote cross-signing keys if they're different from the current ones (#9634)

parent ad721fc5
No related branches found
No related tags found
No related merge requests found
Only save remote cross-signing and device keys if they're different from the current ones.
......@@ -907,6 +907,7 @@ class DeviceListUpdater:
master_key = result.get("master_key")
self_signing_key = result.get("self_signing_key")
ignore_devices = False
# If the remote server has more than ~1000 devices for this user
# we assume that something is going horribly wrong (e.g. a bot
# that logs in and creates a new device every time it tries to
......@@ -925,6 +926,12 @@ class DeviceListUpdater:
len(devices),
)
devices = []
ignore_devices = True
else:
cached_devices = await self.store.get_cached_devices_for_user(user_id)
if cached_devices == {d["device_id"]: d for d in devices}:
devices = []
ignore_devices = True
for device in devices:
logger.debug(
......@@ -934,7 +941,10 @@ class DeviceListUpdater:
stream_id,
)
await self.store.update_remote_device_list_cache(user_id, devices, stream_id)
if not ignore_devices:
await self.store.update_remote_device_list_cache(
user_id, devices, stream_id
)
device_ids = [device["device_id"] for device in devices]
# Handle cross-signing keys.
......@@ -945,7 +955,8 @@ class DeviceListUpdater:
)
device_ids = device_ids + cross_signing_device_ids
await self.device_handler.notify_device_update(user_id, device_ids)
if device_ids:
await self.device_handler.notify_device_update(user_id, device_ids)
# We clobber the seen updates since we've re-synced from a given
# point.
......@@ -973,14 +984,17 @@ class DeviceListUpdater:
"""
device_ids = []
if master_key:
current_keys_map = await self.store.get_e2e_cross_signing_keys_bulk([user_id])
current_keys = current_keys_map.get(user_id) or {}
if master_key and master_key != current_keys.get("master"):
await self.store.set_e2e_cross_signing_key(user_id, "master", master_key)
_, verify_key = get_verify_key_from_cross_signing_key(master_key)
# verify_key is a VerifyKey from signedjson, which uses
# .version to denote the portion of the key ID after the
# algorithm and colon, which is the device ID
device_ids.append(verify_key.version)
if self_signing_key:
if self_signing_key and self_signing_key != current_keys.get("self_signing"):
await self.store.set_e2e_cross_signing_key(
user_id, "self_signing", self_signing_key
)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment