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) | |