Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/rest_framework_simplejwt/views.py: 86%
48 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1from django.utils.module_loading import import_string
2from rest_framework import generics, status
3from rest_framework.response import Response
5from . import serializers
6from .authentication import AUTH_HEADER_TYPES
7from .exceptions import InvalidToken, TokenError
8from .settings import api_settings
11class TokenViewBase(generics.GenericAPIView):
12 permission_classes = ()
13 authentication_classes = ()
15 serializer_class = None
16 _serializer_class = ""
18 www_authenticate_realm = "api"
20 def get_serializer_class(self):
21 """
22 If serializer_class is set, use it directly. Otherwise get the class from settings.
23 """
25 if self.serializer_class: 25 ↛ 27line 25 didn't jump to line 27, because the condition on line 25 was never false
26 return self.serializer_class
27 try:
28 return import_string(self._serializer_class)
29 except ImportError:
30 msg = "Could not import serializer '%s'" % self._serializer_class
31 raise ImportError(msg)
33 def get_authenticate_header(self, request):
34 return '{} realm="{}"'.format(
35 AUTH_HEADER_TYPES[0],
36 self.www_authenticate_realm,
37 )
39 def post(self, request, *args, **kwargs):
40 serializer = self.get_serializer(data=request.data)
42 try:
43 serializer.is_valid(raise_exception=True)
44 except TokenError as e:
45 raise InvalidToken(e.args[0])
47 return Response(serializer.validated_data, status=status.HTTP_200_OK)
50class TokenObtainPairView(TokenViewBase):
51 """
52 Takes a set of user credentials and returns an access and refresh JSON web
53 token pair to prove the authentication of those credentials.
54 """
56 _serializer_class = api_settings.TOKEN_OBTAIN_SERIALIZER
59token_obtain_pair = TokenObtainPairView.as_view()
62class TokenRefreshView(TokenViewBase):
63 """
64 Takes a refresh type JSON web token and returns an access type JSON web
65 token if the refresh token is valid.
66 """
68 _serializer_class = api_settings.TOKEN_REFRESH_SERIALIZER
71token_refresh = TokenRefreshView.as_view()
74class TokenObtainSlidingView(TokenViewBase):
75 """
76 Takes a set of user credentials and returns a sliding JSON web token to
77 prove the authentication of those credentials.
78 """
80 _serializer_class = api_settings.SLIDING_TOKEN_OBTAIN_SERIALIZER
83token_obtain_sliding = TokenObtainSlidingView.as_view()
86class TokenRefreshSlidingView(TokenViewBase):
87 """
88 Takes a sliding JSON web token and returns a new, refreshed version if the
89 token's refresh period has not expired.
90 """
92 _serializer_class = api_settings.SLIDING_TOKEN_REFRESH_SERIALIZER
95token_refresh_sliding = TokenRefreshSlidingView.as_view()
98class TokenVerifyView(TokenViewBase):
99 """
100 Takes a token and indicates if it is valid. This view provides no
101 information about a token's fitness for a particular use.
102 """
104 _serializer_class = api_settings.TOKEN_VERIFY_SERIALIZER
107token_verify = TokenVerifyView.as_view()
110class TokenBlacklistView(TokenViewBase):
111 """
112 Takes a token and blacklists it. Must be used with the
113 `rest_framework_simplejwt.token_blacklist` app installed.
114 """
116 _serializer_class = api_settings.TOKEN_BLACKLIST_SERIALIZER
119token_blacklist = TokenBlacklistView.as_view()