67 lines
2.1 KiB
Python

from django.contrib.auth import get_user_model
from django.contrib.auth import login
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.permissions import AllowAny
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import CreateAPIView
from rest_framework.response import Response
from knox.auth import TokenAuthentication
from knox.views import LoginView as KnoxLoginView
from knox.views import LogoutView as KnoxLogoutView
from knox.views import LogoutAllView as KnoxLogoutAllView
from .serializer import Pucko_CreateUser_Serializer
from .serializer import Pucko_Renew_Serializer
from .serializer import Pucko_User_Serializer
from .serializer import Pucko_Login_Serializer
class LoginView(KnoxLoginView):
permission_classes = (AllowAny,)
serializer_class = Pucko_Login_Serializer
def post(self, request, format=None):
"""
Creates a new token for user in Authorization header
or from username/password sent in post request.
"""
serializer = AuthTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
login(request, user)
return super(LoginView, self).post(request, format=None)
class RenewView(KnoxLoginView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
serializer_class = Pucko_Renew_Serializer
def post(self, request, format=None):
try:
login_token = request.headers["Authorization"].split(" ")[1]
except Exception:
return Response({"message", "you need to be logged in."}, status="204")
return super(RenewView, self).post(request, format=None)
class LogoutView(KnoxLogoutView):
"""
Logout from current session.
"""
pass
class LogoutAllView(KnoxLogoutAllView):
"""
Logout from all devices.
"""
pass
class RegisterView(CreateAPIView):
"""
Create a user.
"""
queryset = get_user_model().objects.all()
permission_classes = (AllowAny,)
serializer_class = Pucko_CreateUser_Serializer