1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- from rest_framework import generics, status
- from rest_framework.response import Response
- from . import serializers
- from .authentication import AUTH_HEADER_TYPES
- from .exceptions import InvalidToken, TokenError
- class TokenViewBase(generics.GenericAPIView):
- permission_classes = ()
- authentication_classes = ()
- serializer_class = None
- www_authenticate_realm = 'api'
- def get_authenticate_header(self, request):
- return '{0} realm="{1}"'.format(
- AUTH_HEADER_TYPES[0],
- self.www_authenticate_realm,
- )
- def post(self, request, *args, **kwargs):
- serializer = self.get_serializer(data=request.data)
- try:
- serializer.is_valid(raise_exception=True)
- except TokenError as e:
- raise InvalidToken(e.args[0])
- return Response(serializer.validated_data, status=status.HTTP_200_OK)
- class TokenObtainPairView(TokenViewBase):
- """
- Takes a set of user credentials and returns an access and refresh JSON web
- token pair to prove the authentication of those credentials.
- """
- serializer_class = serializers.TokenObtainPairSerializer
- token_obtain_pair = TokenObtainPairView.as_view()
- class TokenRefreshView(TokenViewBase):
- """
- Takes a refresh type JSON web token and returns an access type JSON web
- token if the refresh token is valid.
- """
- serializer_class = serializers.TokenRefreshSerializer
- token_refresh = TokenRefreshView.as_view()
- class TokenObtainSlidingView(TokenViewBase):
- """
- Takes a set of user credentials and returns a sliding JSON web token to
- prove the authentication of those credentials.
- """
- serializer_class = serializers.TokenObtainSlidingSerializer
- token_obtain_sliding = TokenObtainSlidingView.as_view()
- class TokenRefreshSlidingView(TokenViewBase):
- """
- Takes a sliding JSON web token and returns a new, refreshed version if the
- token's refresh period has not expired.
- """
- serializer_class = serializers.TokenRefreshSlidingSerializer
- token_refresh_sliding = TokenRefreshSlidingView.as_view()
- class TokenVerifyView(TokenViewBase):
- """
- Takes a token and indicates if it is valid. This view provides no
- information about a token's fitness for a particular use.
- """
- serializer_class = serializers.TokenVerifySerializer
- token_verify = TokenVerifyView.as_view()
|