25 lines
		
	
	
		
			844 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			844 B
		
	
	
	
		
			Python
		
	
	
	
	
	
"""passbook oauth_client Authorization backend"""
 | 
						|
 | 
						|
from django.contrib.auth.backends import ModelBackend
 | 
						|
from django.db.models import Q
 | 
						|
 | 
						|
from passbook.oauth_client.models import OAuthSource, UserOAuthSourceConnection
 | 
						|
 | 
						|
 | 
						|
class AuthorizedServiceBackend(ModelBackend):
 | 
						|
    "Authentication backend for users registered with remote OAuth provider."
 | 
						|
 | 
						|
    def authenticate(self, request, source=None, identifier=None):
 | 
						|
        "Fetch user for a given source by id."
 | 
						|
        source_q = Q(source__name=source)
 | 
						|
        if isinstance(source, OAuthSource):
 | 
						|
            source_q = Q(source=source)
 | 
						|
        try:
 | 
						|
            access = UserOAuthSourceConnection.objects.filter(
 | 
						|
                source_q, identifier=identifier
 | 
						|
            ).select_related('user')[0]
 | 
						|
        except IndexError:
 | 
						|
            return None
 | 
						|
        else:
 | 
						|
            return access.user
 |