forked from MirrorHub/synapse
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)
|
results = yield self.store.get_e2e_device_keys(local_query)
|
||||||
|
|
||||||
# Build the result structure, un-jsonify the results, and add the
|
# Build the result structure
|
||||||
# "unsigned" section
|
|
||||||
for user_id, device_keys in results.items():
|
for user_id, device_keys in results.items():
|
||||||
for device_id, device_info in device_keys.items():
|
for device_id, device_info in device_keys.items():
|
||||||
r = dict(device_info["keys"])
|
result_dict[user_id][device_id] = device_info
|
||||||
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
|
|
||||||
|
|
||||||
log_kv(results)
|
log_kv(results)
|
||||||
return result_dict
|
return result_dict
|
||||||
|
|
|
@ -40,7 +40,8 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
||||||
This option only takes effect if include_all_devices is true.
|
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
|
||||||
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)
|
set_tag("query_list", query_list)
|
||||||
if not query_list:
|
if not query_list:
|
||||||
|
@ -54,11 +55,20 @@ class EndToEndKeyWorkerStore(SQLBaseStore):
|
||||||
include_deleted_devices,
|
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):
|
for user_id, device_keys in iteritems(results):
|
||||||
|
rv[user_id] = {}
|
||||||
for device_id, device_info in iteritems(device_keys):
|
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
|
@trace
|
||||||
def _get_e2e_device_keys_txn(
|
def _get_e2e_device_keys_txn(
|
||||||
|
|
|
@ -38,7 +38,7 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
||||||
self.assertIn("user", res)
|
self.assertIn("user", res)
|
||||||
self.assertIn("device", res["user"])
|
self.assertIn("device", res["user"])
|
||||||
dev = res["user"]["device"]
|
dev = res["user"]["device"]
|
||||||
self.assertDictContainsSubset({"keys": json, "device_display_name": None}, dev)
|
self.assertDictContainsSubset(json, dev)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def test_reupload_key(self):
|
def test_reupload_key(self):
|
||||||
|
@ -68,7 +68,7 @@ class EndToEndKeyStoreTestCase(tests.unittest.TestCase):
|
||||||
self.assertIn("device", res["user"])
|
self.assertIn("device", res["user"])
|
||||||
dev = res["user"]["device"]
|
dev = res["user"]["device"]
|
||||||
self.assertDictContainsSubset(
|
self.assertDictContainsSubset(
|
||||||
{"keys": json, "device_display_name": "display_name"}, dev
|
{"key": "value", "unsigned": {"device_display_name": "display_name"}}, dev
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@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", "device1", None)
|
||||||
yield self.store.store_device("user2", "device2", 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", "device1", now, {"key": "json11"})
|
||||||
yield self.store.set_e2e_device_keys("user1", "device2", now, "json12")
|
yield self.store.set_e2e_device_keys("user1", "device2", now, {"key": "json12"})
|
||||||
yield self.store.set_e2e_device_keys("user2", "device1", now, "json21")
|
yield self.store.set_e2e_device_keys("user2", "device1", now, {"key": "json21"})
|
||||||
yield self.store.set_e2e_device_keys("user2", "device2", now, "json22")
|
yield self.store.set_e2e_device_keys("user2", "device2", now, {"key": "json22"})
|
||||||
|
|
||||||
res = yield self.store.get_e2e_device_keys(
|
res = yield self.store.get_e2e_device_keys(
|
||||||
(("user1", "device1"), ("user2", "device2"))
|
(("user1", "device1"), ("user2", "device2"))
|
||||||
|
|
Loading…
Reference in a new issue