File size: 4,248 Bytes
113d0af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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)