2020-03-01 08:56:21 +03:00
|
|
|
from importlib import import_module
|
2020-03-22 13:41:16 +03:00
|
|
|
|
2020-03-01 08:56:21 +03:00
|
|
|
|
|
|
|
def import_callable(path_or_callable):
|
|
|
|
if hasattr(path_or_callable, '__call__'):
|
|
|
|
return path_or_callable
|
|
|
|
else:
|
|
|
|
assert isinstance(path_or_callable, str)
|
|
|
|
package, attr = path_or_callable.rsplit('.', 1)
|
|
|
|
return getattr(import_module(package), attr)
|
|
|
|
|
2016-01-01 00:10:52 +03:00
|
|
|
|
2016-01-08 00:45:28 +03:00
|
|
|
def default_create_token(token_model, user, serializer):
|
2016-01-01 00:10:52 +03:00
|
|
|
token, _ = token_model.objects.get_or_create(user=user)
|
|
|
|
return token
|
2016-02-16 07:35:32 +03:00
|
|
|
|
2016-03-01 14:51:01 +03:00
|
|
|
|
2016-01-04 20:45:33 +03:00
|
|
|
def jwt_encode(user):
|
2016-03-01 14:51:01 +03:00
|
|
|
try:
|
2020-03-11 13:01:03 +03:00
|
|
|
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
2016-01-04 20:45:33 +03:00
|
|
|
except ImportError:
|
2020-03-11 13:01:03 +03:00
|
|
|
raise ImportError("rest-framework-simplejwt needs to be installed")
|
2016-01-04 20:45:33 +03:00
|
|
|
|
2020-03-11 13:01:03 +03:00
|
|
|
refresh = TokenObtainPairSerializer.get_token(user)
|
|
|
|
return refresh.access_token, refresh
|
2020-03-20 00:09:20 +03:00
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
from rest_framework_simplejwt.authentication import JWTAuthentication
|
|
|
|
|
|
|
|
class JWTCookieAuthentication(JWTAuthentication):
|
|
|
|
"""
|
|
|
|
An authentication plugin that hopefully authenticates requests through a JSON web
|
2020-03-22 13:41:16 +03:00
|
|
|
token provided in a request cookie (and through the header as normal, with a
|
|
|
|
preference to the header).
|
2020-03-20 00:09:20 +03:00
|
|
|
"""
|
|
|
|
def authenticate(self, request):
|
2020-03-22 13:41:16 +03:00
|
|
|
from django.conf import settings
|
|
|
|
cookie_name = getattr(settings, 'JWT_AUTH_COOKIE', None)
|
2020-03-20 00:09:20 +03:00
|
|
|
header = self.get_header(request)
|
|
|
|
if header is None:
|
2020-03-22 13:41:16 +03:00
|
|
|
if cookie_name:
|
|
|
|
raw_token = request.COOKIES.get(cookie_name)
|
2020-03-20 00:09:20 +03:00
|
|
|
else:
|
|
|
|
return None
|
|
|
|
else:
|
|
|
|
raw_token = self.get_raw_token(header)
|
|
|
|
|
|
|
|
if raw_token is None:
|
|
|
|
return None
|
|
|
|
|
|
|
|
validated_token = self.get_validated_token(raw_token)
|
|
|
|
return self.get_user(validated_token), validated_token
|
2020-03-22 13:41:16 +03:00
|
|
|
|
|
|
|
except ImportError:
|
2020-03-20 00:09:20 +03:00
|
|
|
pass
|