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)