|
|
|
@ -238,8 +238,14 @@ class Keyring(object): |
|
|
|
|
d.addBoth(rm, server_name) |
|
|
|
|
|
|
|
|
|
def get_server_verify_keys(self, verify_requests): |
|
|
|
|
"""Takes a dict of KeyGroups and tries to find at least one key for |
|
|
|
|
each group. |
|
|
|
|
"""Tries to find at least one key for each verify request |
|
|
|
|
|
|
|
|
|
For each verify_request, verify_request.deferred is called back with |
|
|
|
|
params (server_name, key_id, VerifyKey) if a key is found, or errbacked |
|
|
|
|
with a SynapseError if none of the keys are found. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
verify_requests (list[VerifyKeyRequest]): list of verify requests |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
# These are functions that produce keys given a list of key ids |
|
|
|
@ -252,8 +258,11 @@ class Keyring(object): |
|
|
|
|
@defer.inlineCallbacks |
|
|
|
|
def do_iterations(): |
|
|
|
|
with Measure(self.clock, "get_server_verify_keys"): |
|
|
|
|
# dict[str, dict[str, VerifyKey]]: results so far. |
|
|
|
|
# map server_name -> key_id -> VerifyKey |
|
|
|
|
merged_results = {} |
|
|
|
|
|
|
|
|
|
# dict[str, set(str)]: keys to fetch for each server |
|
|
|
|
missing_keys = {} |
|
|
|
|
for verify_request in verify_requests: |
|
|
|
|
missing_keys.setdefault(verify_request.server_name, set()).update( |
|
|
|
@ -315,6 +324,16 @@ class Keyring(object): |
|
|
|
|
|
|
|
|
|
@defer.inlineCallbacks |
|
|
|
|
def get_keys_from_store(self, server_name_and_key_ids): |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
server_name_and_key_ids (list[(str, iterable[str])]): |
|
|
|
|
list of (server_name, iterable[key_id]) tuples to fetch keys for |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
Deferred: resolves to dict[str, dict[str, VerifyKey]]: map from |
|
|
|
|
server_name -> key_id -> VerifyKey |
|
|
|
|
""" |
|
|
|
|
res = yield preserve_context_over_deferred(defer.gatherResults( |
|
|
|
|
[ |
|
|
|
|
preserve_fn(self.store.get_server_verify_keys)( |
|
|
|
|