sources/oauth: directly call AuthorizedServiceBackend instead of authenticate()
This commit is contained in:
23
passbook/sources/oauth/auth.py
Normal file
23
passbook/sources/oauth/auth.py
Normal file
@ -0,0 +1,23 @@
|
||||
"""passbook oauth_client Authorization backend"""
|
||||
from django.contrib.auth.backends import ModelBackend
|
||||
from django.db.models import Q
|
||||
from django.http import HttpRequest
|
||||
|
||||
from passbook.core.models import User
|
||||
from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection
|
||||
|
||||
|
||||
class AuthorizedServiceBackend(ModelBackend):
|
||||
"Authentication backend for users registered with remote OAuth provider."
|
||||
|
||||
def authenticate(
|
||||
self, request: HttpRequest, source: OAuthSource, identifier: str
|
||||
) -> User:
|
||||
"Fetch user for a given source by id."
|
||||
source_q = Q(source__name=source)
|
||||
if isinstance(source, OAuthSource):
|
||||
source_q = Q(source=source)
|
||||
access = UserOAuthSourceConnection.objects.filter(
|
||||
source_q, identifier=identifier
|
||||
).select_related("user")[0]
|
||||
return access.user
|
||||
Reference in New Issue
Block a user