mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-14 10:43:50 +01:00
Merge pull request #6193 from matrix-org/uhoreg/interpret_device_key_in_storage
make storage layer in charge of interpreting the device key data
This commit is contained in:
commit
06fc66c81e
4 changed files with 22 additions and 17 deletions
1
changelog.d/6193.misc
Normal file
1
changelog.d/6193.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Make storage layer responsible for adding device names to key, rather than the handler.
|
|
@ -248,16 +248,10 @@ class E2eKeysHandler(object):
|
|||
|
||||
results = yield self.store.get_e2e_device_keys(local_query)
|
||||
|
||||
# Build the result structure, un-jsonify the results, and add the
|
||||
# "unsigned" section
|
||||
# Build the result structure
|
||||
for user_id, device_keys in results.items():
|
||||
for device_id, device_info in device_keys.items():
|
||||
r = dict(device_info["keys"])
|
||||
r["unsigned"] = {}
|
||||
display_name = device_info["device_display_name"]
|
||||
if display_name is not None:
|
||||
r["unsigned"]["device_display_name"] = display_name
|
||||
result_dict[user_id][device_id] = r
|
||||
result_dict[user_id][device_id] = device_info
|
||||
|
||||
log_kv(results)
|
||||
return result_dict
|
||||
|
|
|
@ -40,7 +40,8 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||
This option only takes effect if include_all_devices is true.
|
||||
Returns:
|
||||
Dict mapping from user-id to dict mapping from device_id to
|
||||
dict containing "key_json", "device_display_name".
|
||||
key data. The key data will be a dict in the same format as the
|
||||
DeviceKeys type returned by POST /_matrix/client/r0/keys/query.
|
||||
"""
|
||||
set_tag("query_list", query_list)
|
||||
if not query_list:
|
||||
|
@ -54,11 +55,20 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
|||
include_deleted_devices,
|
||||
)
|
||||
|
||||
# Build the result structure, un-jsonify the results, and add the
|
||||
# "unsigned" section
|
||||
rv = {}
|
||||
for user_id, device_keys in iteritems(results):
|
||||
rv[user_id] = {}
|
||||
for device_id, device_info in iteritems(device_keys):
|
||||
device_info["keys"] = db_to_json(device_info.pop("key_json"))
|
||||
r = db_to_json(device_info.pop("key_json"))
|
||||
r["unsigned"] = {}
|
||||
display_name = device_info["device_display_name"]
|
||||
if display_name is not None:
|
||||
r["unsigned"]["device_display_name"] = display_name
|
||||
rv[user_id][device_id] = r
|
||||
|
||||
return results
|
||||
return rv
|
||||
|
||||
@trace
|
||||
def _get_e2e_device_keys_txn(
|
||||
|
|
|
@ -38,7 +38,7 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
|||
self.assertIn("user", res)
|
||||
self.assertIn("device", res["user"])
|
||||
dev = res["user"]["device"]
|
||||
self.assertDictContainsSubset({"keys": json, "device_display_name": None}, dev)
|
||||
self.assertDictContainsSubset(json, dev)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def test_reupload_key(self):
|
||||
|
@ -68,7 +68,7 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
|||
self.assertIn("device", res["user"])
|
||||
dev = res["user"]["device"]
|
||||
self.assertDictContainsSubset(
|
||||
{"keys": json, "device_display_name": "display_name"}, dev
|
||||
{"key": "value", "unsigned": {"device_display_name": "display_name"}}, dev
|
||||
)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
|
@ -80,10 +80,10 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
|||
yield self.store.store_device("user2", "device1", None)
|
||||
yield self.store.store_device("user2", "device2", None)
|
||||
|
||||
yield self.store.set_e2e_device_keys("user1", "device1", now, "json11")
|
||||
yield self.store.set_e2e_device_keys("user1", "device2", now, "json12")
|
||||
yield self.store.set_e2e_device_keys("user2", "device1", now, "json21")
|
||||
yield self.store.set_e2e_device_keys("user2", "device2", now, "json22")
|
||||
yield self.store.set_e2e_device_keys("user1", "device1", now, {"key": "json11"})
|
||||
yield self.store.set_e2e_device_keys("user1", "device2", now, {"key": "json12"})
|
||||
yield self.store.set_e2e_device_keys("user2", "device1", now, {"key": "json21"})
|
||||
yield self.store.set_e2e_device_keys("user2", "device2", now, {"key": "json22"})
|
||||
|
||||
res = yield self.store.get_e2e_device_keys(
|
||||
(("user1", "device1"), ("user2", "device2"))
|
||||
|
|
Loading…
Reference in a new issue