29 lines
		
	
	
		
			938 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			938 B
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Registers and loads Processor classes from settings."""
 | 
						|
from logging import getLogger
 | 
						|
 | 
						|
from passbook.lib.utils.reflection import path_to_class
 | 
						|
from passbook.saml_idp.exceptions import CannotHandleAssertion
 | 
						|
from passbook.saml_idp.models import SAMLProvider
 | 
						|
 | 
						|
LOGGER = getLogger(__name__)
 | 
						|
 | 
						|
 | 
						|
def get_processor(remote):
 | 
						|
    """Get an instance of the processor with config."""
 | 
						|
    proc = path_to_class(remote.processor_path)
 | 
						|
    return proc(remote)
 | 
						|
 | 
						|
 | 
						|
def find_processor(request):
 | 
						|
    """Returns the Processor instance that is willing to handle this request."""
 | 
						|
    for remote in SAMLProvider.objects.all():
 | 
						|
        proc = get_processor(remote)
 | 
						|
        try:
 | 
						|
            if proc.can_handle(request):
 | 
						|
                return proc, remote
 | 
						|
        except CannotHandleAssertion as exc:
 | 
						|
            # Log these, but keep looking.
 | 
						|
            LOGGER.debug('%s %s', proc, exc)
 | 
						|
 | 
						|
    raise CannotHandleAssertion('No Processors to handle this request.')
 |