forked from MirrorHub/synapse
Rename get_e2e_device_keys
to better reflect its purpose (#8205)
... and to show that it does something slightly different to `_get_e2e_device_keys_txn`. `include_all_devices` and `include_deleted_devices` were never used (and `include_deleted_devices` was broken, since that would cause `None`s in the result which were not handled in the loop below. Add some typing too.
This commit is contained in:
parent
8027166dd5
commit
45e8f7726f
4 changed files with 14 additions and 19 deletions
1
changelog.d/8205.misc
Normal file
1
changelog.d/8205.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Refactor queries for device keys and cross-signatures.
|
|
@ -353,7 +353,7 @@ class E2eKeysHandler(object):
|
||||||
# make sure that each queried user appears in the result dict
|
# make sure that each queried user appears in the result dict
|
||||||
result_dict[user_id] = {}
|
result_dict[user_id] = {}
|
||||||
|
|
||||||
results = await self.store.get_e2e_device_keys(local_query)
|
results = await self.store.get_e2e_device_keys_for_cs_api(local_query)
|
||||||
|
|
||||||
# Build the result structure
|
# Build the result structure
|
||||||
for user_id, device_keys in results.items():
|
for user_id, device_keys in results.items():
|
||||||
|
@ -734,7 +734,7 @@ class E2eKeysHandler(object):
|
||||||
# fetch our stored devices. This is used to 1. verify
|
# fetch our stored devices. This is used to 1. verify
|
||||||
# signatures on the master key, and 2. to compare with what
|
# signatures on the master key, and 2. to compare with what
|
||||||
# was sent if the device was signed
|
# was sent if the device was signed
|
||||||
devices = await self.store.get_e2e_device_keys([(user_id, None)])
|
devices = await self.store.get_e2e_device_keys_for_cs_api([(user_id, None)])
|
||||||
|
|
||||||
if user_id not in devices:
|
if user_id not in devices:
|
||||||
raise NotFoundError("No device keys found")
|
raise NotFoundError("No device keys found")
|
||||||
|
|
|
@ -23,6 +23,7 @@ from twisted.enterprise.adbapi import Connection
|
||||||
from synapse.logging.opentracing import log_kv, set_tag, trace
|
from synapse.logging.opentracing import log_kv, set_tag, trace
|
||||||
from synapse.storage._base import SQLBaseStore, db_to_json
|
from synapse.storage._base import SQLBaseStore, db_to_json
|
||||||
from synapse.storage.database import make_in_list_sql_clause
|
from synapse.storage.database import make_in_list_sql_clause
|
||||||
|
from synapse.types import JsonDict
|
||||||
from synapse.util import json_encoder
|
from synapse.util import json_encoder
|
||||||
from synapse.util.caches.descriptors import cached, cachedList
|
from synapse.util.caches.descriptors import cached, cachedList
|
||||||
from synapse.util.iterutils import batch_iter
|
from synapse.util.iterutils import batch_iter
|
||||||
|
@ -33,17 +34,12 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
class EndToEndKeyWorkerStore(SQLBaseStore):
|
class EndToEndKeyWorkerStore(SQLBaseStore):
|
||||||
@trace
|
@trace
|
||||||
async def get_e2e_device_keys(
|
async def get_e2e_device_keys_for_cs_api(
|
||||||
self, query_list, include_all_devices=False, include_deleted_devices=False
|
self, query_list: List[Tuple[str, Optional[str]]]
|
||||||
):
|
) -> Dict[str, Dict[str, JsonDict]]:
|
||||||
"""Fetch a list of device keys.
|
"""Fetch a list of device keys, formatted suitably for the C/S API.
|
||||||
Args:
|
Args:
|
||||||
query_list(list): List of pairs of user_ids and device_ids.
|
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 were in the query_list).
|
|
||||||
This option only takes effect if include_all_devices is true.
|
|
||||||
Returns:
|
Returns:
|
||||||
Dict mapping from user-id to dict mapping from device_id to
|
Dict mapping from user-id to dict mapping from device_id to
|
||||||
key data. The key data will be a dict in the same format as the
|
key data. The key data will be a dict in the same format as the
|
||||||
|
@ -54,11 +50,7 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
results = await self.db_pool.runInteraction(
|
results = await self.db_pool.runInteraction(
|
||||||
"get_e2e_device_keys",
|
"get_e2e_device_keys", self._get_e2e_device_keys_txn, query_list,
|
||||||
self._get_e2e_device_keys_txn,
|
|
||||||
query_list,
|
|
||||||
include_all_devices,
|
|
||||||
include_deleted_devices,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Build the result structure, un-jsonify the results, and add the
|
# Build the result structure, un-jsonify the results, and add the
|
||||||
|
|
|
@ -37,7 +37,7 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
res = yield defer.ensureDeferred(
|
res = yield defer.ensureDeferred(
|
||||||
self.store.get_e2e_device_keys((("user", "device"),))
|
self.store.get_e2e_device_keys_for_cs_api((("user", "device"),))
|
||||||
)
|
)
|
||||||
self.assertIn("user", res)
|
self.assertIn("user", res)
|
||||||
self.assertIn("device", res["user"])
|
self.assertIn("device", res["user"])
|
||||||
|
@ -76,7 +76,7 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
res = yield defer.ensureDeferred(
|
res = yield defer.ensureDeferred(
|
||||||
self.store.get_e2e_device_keys((("user", "device"),))
|
self.store.get_e2e_device_keys_for_cs_api((("user", "device"),))
|
||||||
)
|
)
|
||||||
self.assertIn("user", res)
|
self.assertIn("user", res)
|
||||||
self.assertIn("device", res["user"])
|
self.assertIn("device", res["user"])
|
||||||
|
@ -108,7 +108,9 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
res = yield defer.ensureDeferred(
|
res = yield defer.ensureDeferred(
|
||||||
self.store.get_e2e_device_keys((("user1", "device1"), ("user2", "device2")))
|
self.store.get_e2e_device_keys_for_cs_api(
|
||||||
|
(("user1", "device1"), ("user2", "device2"))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
self.assertIn("user1", res)
|
self.assertIn("user1", res)
|
||||||
self.assertIn("device1", res["user1"])
|
self.assertIn("device1", res["user1"])
|
||||||
|
|
Loading…
Reference in a new issue