in api/authentication.py [0:0]
def authenticate(self, request):
authorization = get_authorization_header(request).decode()
if not authorization or not authorization.startswith("Bearer "):
# If the request has no Bearer token, return None to attempt the next
# auth scheme in the REST_FRAMEWORK AUTHENTICATION_CLASSES list
return None
token = authorization.split(" ")[1]
if token == "":
raise ParseError("Missing FXA Token after 'Bearer'.")
use_cache = True
method = request.method
if method in ["POST", "DELETE", "PUT"]:
use_cache = False
if method == "POST" and request.path == "/api/v1/relayaddresses/":
use_cache = True
fxa_uid = get_fxa_uid_from_oauth_token(token, use_cache)
try:
# MPP-3021: select_related user object to save DB query
sa = SocialAccount.objects.filter(
uid=fxa_uid, provider="fxa"
).select_related("user")[0]
except IndexError:
raise PermissionDenied(
"Authenticated user does not have a Relay account."
" Have they accepted the terms?"
)
user = sa.user
if not user.is_active:
raise PermissionDenied(
"Authenticated user does not have an active Relay account."
" Have they been deactivated?"
)
if user:
return (user, token)
else:
raise NotFound()