WIP to announce deleted devices over federation

Previously we queued up the poke correctly when the device was deleted,
but then the actual EDU wouldn't get sent, as the device was no longer known.
Instead, we now send EDUs for deleted devices too if there's a poke for them.
This commit is contained in:
Matthew Hodgson 2018-07-12 01:32:39 +01:00
parent 129ffd7b88
commit 5797f5542b
3 changed files with 44 additions and 14 deletions

View file

@ -64,12 +64,17 @@ class EndToEndKeyStore(SQLBaseStore):
)
@defer.inlineCallbacks
def get_e2e_device_keys(self, query_list, include_all_devices=False):
def get_e2e_device_keys(
self, query_list, include_all_devices=False,
include_deleted_devices=False
):
"""Fetch a list of device keys.
Args:
query_list(list): List of pairs of user_ids and device_ids.
include_all_devices (bool): whether to include entries for devices
that don't have device keys
include_deleted_devices (bool): whether to include null entries for
devices which no longer exist (but where in the query_list)
Returns:
Dict mapping from user-id to dict mapping from device_id to
dict containing "key_json", "device_display_name".
@ -82,10 +87,19 @@ class EndToEndKeyStore(SQLBaseStore):
query_list, include_all_devices,
)
if include_deleted_devices:
deleted_devices = set(query_list)
for user_id, device_keys in iteritems(results):
for device_id, device_info in iteritems(device_keys):
if include_deleted_devices:
deleted_devices -= (user_id, device_id)
device_info["keys"] = json.loads(device_info.pop("key_json"))
if include_deleted_devices:
for user_id, device_id in deleted_devices:
results.setdefault(user_id, {})[device_id] = None
defer.returnValue(results)
def _get_e2e_device_keys_txn(self, txn, query_list, include_all_devices):