From ec6ceadeeb861e26c905248fa96091bce4c392a4 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 24 Jun 2015 13:04:37 +0100 Subject: [PATCH] Only fail individular deferred for invalid signature --- synapse/crypto/keyring.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/synapse/crypto/keyring.py b/synapse/crypto/keyring.py index a35e93f279..2cfec39851 100644 --- a/synapse/crypto/keyring.py +++ b/synapse/crypto/keyring.py @@ -64,21 +64,22 @@ class Keyring(object): group_ids = [] next_group_id = 0 + deferreds = {} for server_name, json_object in server_and_json: logger.debug("Verifying for %s", server_name) - key_ids = signature_ids(json_object, server_name) - if not key_ids: - raise SynapseError( - 400, - "Not signed with a supported algorithm", - Codes.UNAUTHORIZED, - ) - group_id = next_group_id next_group_id += 1 group_ids.append(group_id) + key_ids = signature_ids(json_object, server_name) + if not key_ids: + deferreds[group_id] = defer.fail(SynapseError( + 400, + "Not signed with a supported algorithm", + Codes.UNAUTHORIZED, + )) + group = KeyGroup(server_name, group_id, key_ids) group_id_to_group[group_id] = group @@ -124,9 +125,9 @@ class Keyring(object): Codes.UNAUTHORIZED, ) - deferreds = self.get_server_verify_keys( + deferreds.update(self.get_server_verify_keys( group_id_to_group - ) + )) logger.info( "Deferred count: %d vs. %d",