Source code for ska.contrib.django.ska.integration.drf.views.jwt_token

from typing import Optional

from django.contrib.auth import authenticate
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_jwt.settings import api_settings

__author__ = "Artur Barseghyan"
__copyright__ = "2013-2023 Artur Barseghyan"
__license__ = "GPL-2.0-only OR LGPL-2.1-or-later"
__all__ = ("ObtainJSONWebTokenView",)

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
jwt_decode_handler = api_settings.JWT_DECODE_HANDLER
jwt_get_username_from_payload = api_settings.JWT_PAYLOAD_GET_USERNAME_HANDLER


[docs] class ObtainJSONWebTokenView(APIView): """Obtain a JSON web token."""
[docs] def get(self, request: Request, format: Optional[str] = None) -> Response: user = authenticate(request=request) if user is not None: if user.is_active: payload = jwt_payload_handler(user) data = {"token": jwt_encode_handler(payload)} return Response(data) else: raise AuthenticationFailed("User is not active") raise AuthenticationFailed("Authentication failed")