@ -122,48 +122,6 @@ class Keyring(object):
verify_requests . append ( verify_request )
verify_requests . append ( verify_request )
@defer . inlineCallbacks
def handle_key_deferred ( verify_request ) :
server_name = verify_request . server_name
try :
_ , key_id , verify_key = yield verify_request . deferred
except IOError as e :
logger . warn (
" Got IOError when downloading keys for %s : %s %s " ,
server_name , type ( e ) . __name__ , str ( e . message ) ,
)
raise SynapseError (
502 ,
" Error downloading keys for %s " % ( server_name , ) ,
Codes . UNAUTHORIZED ,
)
except Exception as e :
logger . exception (
" Got Exception when downloading keys for %s : %s %s " ,
server_name , type ( e ) . __name__ , str ( e . message ) ,
)
raise SynapseError (
401 ,
" No key for %s with id %s " % ( server_name , verify_request . key_ids ) ,
Codes . UNAUTHORIZED ,
)
json_object = verify_request . json_object
logger . debug ( " Got key %s %s : %s for server %s , verifying " % (
key_id , verify_key . alg , verify_key . version , server_name ,
) )
try :
verify_signed_json ( json_object , server_name , verify_key )
except :
raise SynapseError (
401 ,
" Invalid signature for server %s with key %s : %s " % (
server_name , verify_key . alg , verify_key . version
) ,
Codes . UNAUTHORIZED ,
)
server_to_deferred = {
server_to_deferred = {
server_name : defer . Deferred ( )
server_name : defer . Deferred ( )
for server_name , _ in server_and_json
for server_name , _ in server_and_json
@ -208,7 +166,7 @@ class Keyring(object):
# Pass those keys to handle_key_deferred so that the json object
# Pass those keys to handle_key_deferred so that the json object
# signatures can be verified
# signatures can be verified
return [
return [
preserve_context_over_fn ( handle_key_deferred , verify_request )
preserve_context_over_fn ( _ handle_key_deferred, verify_request )
for verify_request in verify_requests
for verify_request in verify_requests
]
]
@ -740,3 +698,46 @@ class Keyring(object):
] ,
] ,
consumeErrors = True ,
consumeErrors = True ,
) . addErrback ( unwrapFirstError ) )
) . addErrback ( unwrapFirstError ) )
@defer . inlineCallbacks
def _handle_key_deferred ( verify_request ) :
server_name = verify_request . server_name
try :
_ , key_id , verify_key = yield verify_request . deferred
except IOError as e :
logger . warn (
" Got IOError when downloading keys for %s : %s %s " ,
server_name , type ( e ) . __name__ , str ( e . message ) ,
)
raise SynapseError (
502 ,
" Error downloading keys for %s " % ( server_name , ) ,
Codes . UNAUTHORIZED ,
)
except Exception as e :
logger . exception (
" Got Exception when downloading keys for %s : %s %s " ,
server_name , type ( e ) . __name__ , str ( e . message ) ,
)
raise SynapseError (
401 ,
" No key for %s with id %s " % ( server_name , verify_request . key_ids ) ,
Codes . UNAUTHORIZED ,
)
json_object = verify_request . json_object
logger . debug ( " Got key %s %s : %s for server %s , verifying " % (
key_id , verify_key . alg , verify_key . version , server_name ,
) )
try :
verify_signed_json ( json_object , server_name , verify_key )
except :
raise SynapseError (
401 ,
" Invalid signature for server %s with key %s : %s " % (
server_name , verify_key . alg , verify_key . version
) ,
Codes . UNAUTHORIZED ,
)