mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 10:11:05 +01:00 
			
		
		
		
	pull out handle_key_deferred to top level
There's no need for this to be a nested definition; pulling it out not only makes it more efficient, but makes it easier to check that it's not accessing any local variables it shouldn't be.
This commit is contained in:
		
							parent
							
								
									dd1ea9763a
								
							
						
					
					
						commit
						2d511defd9
					
				@ -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,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user