amank8

views.py of chatbot

Jul 7th, 2022
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.32 KB | None | 0 0
  1. from . import models
  2. from multiprocessing import context
  3. from django.shortcuts import redirect, render
  4. from django.views.generic import View
  5. from django.contrib import messages
  6. from validate_email import validate_email
  7. from django.contrib.auth.models import User # Since we had used User module we need to perform migrations
  8. from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
  9. from django.contrib.sites.shortcuts import get_current_site
  10. from django.template.loader import render_to_string
  11. from django.utils.encoding import force_bytes, force_str, DjangoUnicodeDecodeError
  12. from .utils import generate_token
  13. from django.core.mail import EmailMessage
  14. from django.conf import settings
  15. from django.contrib import messages
  16. from django.contrib.auth import authenticate, login, logout
  17. from django.contrib.auth.tokens import PasswordResetTokenGenerator
  18.  
  19. import threading
  20. from threading import Thread
  21.  
  22.  
  23. class ChatView(View):
  24.     def get(request, username):
  25.         uname = User.objects.get(username=username)
  26.         return render(request, 'chatbot/chatPage.html', {
  27.             'uname': uname
  28.         },
  29.         context_instance=RequestContext(request))
  30.  
  31. class EmailThread(threading.Thread):
  32.  
  33.     def __init__(self, email_message):
  34.         self.email_message = email_message
  35.         threading.Thread.__init__(self)
  36.  
  37.     def run(self):
  38.         self.email_message.send()
  39.  
  40. class Signup(View):
  41.     def get(self, request):
  42.         return render(request, 'chatbot/signup.html')
  43.  
  44.     def post(self, request):
  45.         context = {
  46.  
  47.             'data': request.POST,
  48.             'has_error': False
  49.         }
  50.  
  51.         email = request.POST.get('email')
  52.         username = request.POST.get('username')
  53.         password = request.POST.get('pass1')
  54.         password2 = request.POST.get('pass2')
  55.         if len(password) < 6:
  56.             messages.add_message(request, messages.ERROR,
  57.                                  'passwords should be atleast 6 characters long')
  58.             context['has_error'] = True
  59.         if password != password2:
  60.             messages.add_message(request, messages.ERROR,
  61.                                  'passwords dont match')
  62.             context['has_error'] = True
  63.  
  64.         if not validate_email(email):
  65.             messages.add_message(request, messages.ERROR,
  66.                                  'Please provide a valid email')
  67.             context['has_error'] = True
  68.  
  69.         try:
  70.             if User.objects.get(email=email):
  71.                 messages.add_message(request, messages.ERROR, 'Email is taken')
  72.                 context['has_error'] = True
  73.  
  74.         except Exception as identifier:
  75.             pass
  76.  
  77.         try:
  78.             if User.objects.get(username=username):
  79.                 messages.add_message(
  80.                     request, messages.ERROR, 'Username is taken')
  81.                 context['has_error'] = True
  82.  
  83.         except Exception as identifier:
  84.             pass
  85.  
  86.         if context['has_error']:
  87.             return render(request, 'chatbot/signup.html', context, status=400)
  88.  
  89.         user = User.objects.create_user(username=username, email=email)
  90.         user.set_password(password)
  91.         user.is_active = False
  92.         user.save()
  93.  
  94.         current_site = get_current_site(request)
  95.         email_subject = 'Active your Account'
  96.         message = render_to_string('chatbot/activate.html',
  97.                                    {
  98.                                        'user': user,
  99.                                        'domain': current_site.domain,
  100.                                        'uid': urlsafe_base64_encode(force_bytes(user.pk)),
  101.                                        'token': generate_token.make_token(user)
  102.                                    }
  103.                                    )
  104.  
  105.         email_message = EmailMessage(
  106.             email_subject,
  107.             message,
  108.             settings.EMAIL_HOST_USER,
  109.             [email]
  110.         )
  111.  
  112.         EmailThread(email_message).start()
  113.         messages.add_message(request, messages.SUCCESS,
  114.                              'account created succesfully. Please check your email to verify account.')
  115.         if not user and not context['has_error']:
  116.             messages.add_message(request, messages.ERROR, 'Please verify your Email')
  117.             return redirect("signin")
  118.             context['has_error'] = True
  119.         else:
  120.             return redirect("chatpage")
  121.  
  122. class Signin(View):
  123.     def get(self, request):
  124.         return render(request, 'chatbot/signin.html')
  125.  
  126.     def post(self, request):
  127.         context = {
  128.             'data': request.POST,
  129.             'has_error': False
  130.         }
  131.         username = request.POST.get('username')
  132.         password = request.POST.get('pass1')
  133.         if username == '':
  134.             messages.add_message(request, messages.ERROR,
  135.                                  'Username is required')
  136.             context['has_error'] = True
  137.         if password == '':
  138.             messages.add_message(request, messages.ERROR,
  139.                                  'Password is required')
  140.             context['has_error'] = True
  141.         user = authenticate(request, username=username, password=password)
  142.         if context['has_error']:
  143.             return render(request, 'chatbot/signin.html', status=401, context=context)
  144.         if not user and not context['has_error']:
  145.             messages.add_message(request, messages.ERROR, 'Please verify your Email')
  146.             return redirect("signin")
  147.             context['has_error'] = True
  148.         else:
  149.             login(request, user)
  150.             return redirect('chatpage')
  151.  
  152. class ActivateAccountView(View):
  153.     def get(self, request, uidb64, token):
  154.         try:
  155.             uid = force_str(urlsafe_base64_decode(uidb64))
  156.             user = User.objects.get(pk=uid)
  157.         except Exception as identifier:
  158.             user = None
  159.         if user is not None and generate_token.check_token(user, token):
  160.             user.is_active = True
  161.             user.save()
  162.             messages.add_message(request, messages.SUCCESS,
  163.                                 'account activated successfully')
  164.             return redirect('signin')
  165.         return render(request, 'chatbot/activate_failed.html', status=401)
  166.  
  167. class Signout(View):
  168.     def post(self, request):
  169.         logout(request)
  170.         messages.add_message(request, messages.SUCCESS, 'Logout successfully')
  171.         return redirect('signin')
  172.  
  173. class ForgotPassword(View):
  174.     def get(self, request):
  175.         return render(request, "chatbot/forgotPassword.html")
  176.  
  177.     def post(self, request):
  178.         context = {
  179.             'data': request.POST,
  180.             'has_error': False
  181.         }
  182.        
  183.  
  184. class SetNewPasswordView(View): # Set New Password
  185.     def get(self, request, uidb64, token):
  186.         context = {
  187.             'uidb64': uidb64,
  188.             'token': token
  189.         }
  190.  
  191.         try:
  192.             user_id = force_str(urlsafe_base64_decode(uidb64))
  193.  
  194.             user = User.objects.get(pk=user_id)
  195.  
  196.             if not PasswordResetTokenGenerator().check_token(user, token):
  197.                 messages.info(
  198.                     request, 'Password reset link, is invalid, please request a new one')
  199.                 return render(request, 'chatbot/request-reset-email.html')
  200.  
  201.         except DjangoUnicodeDecodeError as identifier:
  202.             messages.success(
  203.                 request, 'Invalid link')
  204.             return render(request, 'chatbot/request-reset-email.html')
  205.  
  206.         return render(request, 'chatbot/NewPassword.html', context)
  207.  
  208.     def post(self, request, uidb64, token):
  209.         context = {
  210.             'uidb64': uidb64,
  211.             'token': token,
  212.             'has_error': False
  213.         }
  214.  
  215.         password = request.POST.get('pass1')
  216.         password2 = request.POST.get('pass2')
  217.         if len(password) < 6:
  218.             messages.add_message(request, messages.ERROR,
  219.                                  'passwords should be at least 6 characters long')
  220.             context['has_error'] = True
  221.         if password != password2:
  222.             messages.add_message(request, messages.ERROR,
  223.                                  'passwords don`t match')
  224.             context['has_error'] = True
  225.  
  226.         if context['has_error'] == True:
  227.             return render(request, 'chatbot/NewPassword.html', context)
  228.  
  229.         try:
  230.             user_id = force_str(urlsafe_base64_decode(uidb64))
  231.  
  232.             user = User.objects.get(pk=user_id)
  233.             user.set_password(password)
  234.             user.save()
  235.  
  236.             messages.success(
  237.                 request, 'Password reset success, you can login with new password')
  238.  
  239.             return redirect('signin')
  240.  
  241.         except DjangoUnicodeDecodeError as identifier:
  242.             messages.error(request, 'Something went wrong')
  243.             return render(request, 'chatbot/NewPassword.html', context)
  244.  
  245.         return render(request, 'chatbot/NewPassword.html', context)
  246.  
  247.  
  248. class RequestResetEmailView(View):
  249.     def get(self, request):
  250.         return render(request, 'chatbot/request-reset-email.html')
  251.  
  252.     def post(self, request):
  253.         email = request.POST['email']
  254.  
  255.         if not validate_email(email):
  256.             messages.error(request, 'Please enter a valid email')
  257.             return render(request, 'chatbot/request-reset-email.html')
  258.  
  259.         user = User.objects.filter(email=email)
  260.  
  261.         if user.exists():
  262.             current_site = get_current_site(request)
  263.             email_subject = '[Reset your Password]'
  264.             message = render_to_string('chatbot/reset-user-password.html',
  265.                                        {
  266.                                            'domain': current_site.domain,
  267.                                            'uid': urlsafe_base64_encode(force_bytes(user[0].pk)),
  268.                                            'token': PasswordResetTokenGenerator().make_token(user[0])
  269.                                        }
  270.                                        )
  271.  
  272.             email_message = EmailMessage(
  273.                 email_subject,
  274.                 message,
  275.                 settings.EMAIL_HOST_USER,
  276.                 [email]
  277.             )
  278.  
  279.             EmailThread(email_message).start()
  280.  
  281.         messages.success(
  282.             request, 'We have sent you an email with instructions on how to reset your password')
  283.         return render(request, 'auth/request-reset-email.html')
  284.  
Add Comment
Please, Sign In to add comment