67 lines
2.1 KiB
Python
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
|