Spaces:
Sleeping
Sleeping
| from email import message | |
| from django.shortcuts import render | |
| from rest_framework import generics, status, permissions | |
| from rest_framework.response import Response | |
| from authentication.models import User, UserActivationCode | |
| from rest_framework.views import APIView | |
| from djoser.views import UserViewSet | |
| from authentication.serializers import LogoutSerializer,UserSerializer | |
| from .utils.account_send_email import send_email_to_user | |
| from .utils.generate_password import random_pass_generator | |
| from rest_framework_simplejwt.views import TokenObtainPairView | |
| # Create your views here. | |
| class AccountUserViewset(UserViewSet): | |
| queryset = User.objects.all() | |
| serializer_class = UserSerializer | |
| def perform_create(self, serializer): | |
| user = serializer.save() | |
| activation_code = random_pass_generator() | |
| user_activation_code = UserActivationCode.objects.create(user=user, activation_code=activation_code) | |
| user_activation_code.save() | |
| activation_message = f"Hello dear user.\n\nYou have just created your account on lambda elearning platform and you are asked to activate your account with the following password:\n\n{activation_code}" | |
| send_email_to_user("Account activation code", activation_message, user.email) | |
| # super(AccountUserViewset, self).perform_create(serializer) | |
| # user = serializer.save() | |
| # signals.user_registered.send( | |
| # sender=self.__class__, user=user, request=self.request | |
| # ) | |
| # context = {"user": user} | |
| # to = [get_user_email(user)] | |
| # if settings.SEND_ACTIVATION_EMAIL: | |
| # settings.EMAIL.activation(self.request, context).send(to) | |
| # elif settings.SEND_CONFIRMATION_EMAIL: | |
| # settings.EMAIL.confirmation(self.request, context).send(to) | |
| class CustomUserViewset(generics.UpdateAPIView): | |
| queryset = User.objects.all() | |
| serializer_class = UserSerializer | |
| permission_classes = (permissions.IsAuthenticated,) | |
| def get_serializer_context(self): | |
| context = super(CustomUserViewset, self).get_serializer_context() | |
| context.update({"request": self.request}) | |
| return context | |
| def patch(self, request): | |
| data = request.data | |
| user = request.user | |
| print(user) | |
| print(data) | |
| for key, value in data.items(): | |
| if key!='password': | |
| setattr(user,key,value) | |
| print(request) | |
| user.save() | |
| data = UserSerializer(user, context=self.get_serializer_context()).data | |
| return Response(data, status=status.HTTP_200_OK) | |
| class UserActivationView(APIView): | |
| def get_permissions(self): | |
| """method = self.request.method | |
| if method in ('POST', 'PUT', 'PATCH'): | |
| return [IsAdminUser()] | |
| else: | |
| """ | |
| return [] | |
| def get (self, request, email, activation_code): | |
| print(email) | |
| print(activation_code) | |
| user = User.objects.filter(email=email).first() | |
| if not user: | |
| return Response({'message': "User not found"}) | |
| user_activation = UserActivationCode.objects.filter(user=user, usable=True).first() | |
| if not user_activation: | |
| return Response({'message': "User activation code not found"}) | |
| if user_activation.activation_code == activation_code: | |
| user.is_active = True | |
| user.save() | |
| user_activation.usable=False | |
| user_activation.save() | |
| activation_message = f"Hello dear user.\n\nYour account has been activated succcessfully on the Deaf Traductor application." | |
| send_email_to_user("Account Activated", activation_message, user.email) | |
| return Response({'message': 'Account activted successfully'}) | |
| else: | |
| return Response({'message':'Invalid activation code'}) | |
| class LogoutAPIView(generics.GenericAPIView): | |
| serializer_class = LogoutSerializer | |
| permission_classes = (permissions.IsAuthenticated,) | |
| def post(self, request): | |
| serializer = self.serializer_class(data=request.data) | |
| serializer.is_valid(raise_exception=True) | |
| serializer.save() | |
| return Response(status=status.HTTP_204_NO_CONTENT) | |