96 lines
3.3 KiB
Python
96 lines
3.3 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 settings.puckoviews import PuckoView
|
|
from settings.puckolizers import Message_Serializer
|
|
|
|
from .serializer import Pucko_CreateUser_Serializer
|
|
from .serializer import Pucko_Renew_Serializer
|
|
from .serializer import Pucko_User_Serializer
|
|
from .serializer import Pucko_Login_Serializer
|
|
from .serializer import Change_Password_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 AccountInfoView(PuckoView):
|
|
permission_classes = (IsAuthenticated,)
|
|
serializer_class = Pucko_User_Serializer
|
|
|
|
def user_info(self, request, format=None):
|
|
serializer = self.serializer_class(request.user)
|
|
return Response(serializer.data, status=200)
|
|
|
|
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
|
|
|
|
class ChangePasswordView(PuckoView):
|
|
permission_classes = (IsAuthenticated,)
|
|
serializer_class = Change_Password_Serializer
|
|
|
|
def change_password(self, request):
|
|
old_password = request.data["old_password"]
|
|
new_password = request.data["new_password"]
|
|
|
|
user = request.user
|
|
|
|
if not user.check_password(raw_password=old_password):
|
|
serializer = Message_Serializer({"message": "Error: Could not change password. old password does not match."})
|
|
return Response(serializer.data, status=403)
|
|
user.set_password(new_password)
|
|
user.save()
|
|
serializer = Message_Serializer({"message": "password is updated"})
|
|
return Response(serializer.data, status=200) |