25 lines
		
	
	
		
			845 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			845 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| """passbook oauth_client Authorization backend"""
 | |
| 
 | |
| from django.contrib.auth.backends import ModelBackend
 | |
| from django.db.models import Q
 | |
| 
 | |
| from passbook.sources.oauth.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
 | 
