Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from . import models
- from multiprocessing import context
- from django.shortcuts import redirect, render
- from django.views.generic import View
- from django.contrib import messages
- from validate_email import validate_email
- from django.contrib.auth.models import User # Since we had used User module we need to perform migrations
- from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
- from django.contrib.sites.shortcuts import get_current_site
- from django.template.loader import render_to_string
- from django.utils.encoding import force_bytes, force_str, DjangoUnicodeDecodeError
- from .utils import generate_token
- from django.core.mail import EmailMessage
- from django.conf import settings
- from django.contrib import messages
- from django.contrib.auth import authenticate, login, logout
- from django.contrib.auth.tokens import PasswordResetTokenGenerator
- import threading
- from threading import Thread
- class ChatView(View):
- def get(request, username):
- uname = User.objects.get(username=username)
- return render(request, 'chatbot/chatPage.html', {
- 'uname': uname
- },
- context_instance=RequestContext(request))
- class EmailThread(threading.Thread):
- def __init__(self, email_message):
- self.email_message = email_message
- threading.Thread.__init__(self)
- def run(self):
- self.email_message.send()
- class Signup(View):
- def get(self, request):
- return render(request, 'chatbot/signup.html')
- def post(self, request):
- context = {
- 'data': request.POST,
- 'has_error': False
- }
- email = request.POST.get('email')
- username = request.POST.get('username')
- password = request.POST.get('pass1')
- password2 = request.POST.get('pass2')
- if len(password) < 6:
- messages.add_message(request, messages.ERROR,
- 'passwords should be atleast 6 characters long')
- context['has_error'] = True
- if password != password2:
- messages.add_message(request, messages.ERROR,
- 'passwords dont match')
- context['has_error'] = True
- if not validate_email(email):
- messages.add_message(request, messages.ERROR,
- 'Please provide a valid email')
- context['has_error'] = True
- try:
- if User.objects.get(email=email):
- messages.add_message(request, messages.ERROR, 'Email is taken')
- context['has_error'] = True
- except Exception as identifier:
- pass
- try:
- if User.objects.get(username=username):
- messages.add_message(
- request, messages.ERROR, 'Username is taken')
- context['has_error'] = True
- except Exception as identifier:
- pass
- if context['has_error']:
- return render(request, 'chatbot/signup.html', context, status=400)
- user = User.objects.create_user(username=username, email=email)
- user.set_password(password)
- user.is_active = False
- user.save()
- current_site = get_current_site(request)
- email_subject = 'Active your Account'
- message = render_to_string('chatbot/activate.html',
- {
- 'user': user,
- 'domain': current_site.domain,
- 'uid': urlsafe_base64_encode(force_bytes(user.pk)),
- 'token': generate_token.make_token(user)
- }
- )
- email_message = EmailMessage(
- email_subject,
- message,
- settings.EMAIL_HOST_USER,
- [email]
- )
- EmailThread(email_message).start()
- messages.add_message(request, messages.SUCCESS,
- 'account created succesfully. Please check your email to verify account.')
- if not user and not context['has_error']:
- messages.add_message(request, messages.ERROR, 'Please verify your Email')
- return redirect("signin")
- context['has_error'] = True
- else:
- return redirect("chatpage")
- class Signin(View):
- def get(self, request):
- return render(request, 'chatbot/signin.html')
- def post(self, request):
- context = {
- 'data': request.POST,
- 'has_error': False
- }
- username = request.POST.get('username')
- password = request.POST.get('pass1')
- if username == '':
- messages.add_message(request, messages.ERROR,
- 'Username is required')
- context['has_error'] = True
- if password == '':
- messages.add_message(request, messages.ERROR,
- 'Password is required')
- context['has_error'] = True
- user = authenticate(request, username=username, password=password)
- if context['has_error']:
- return render(request, 'chatbot/signin.html', status=401, context=context)
- if not user and not context['has_error']:
- messages.add_message(request, messages.ERROR, 'Please verify your Email')
- return redirect("signin")
- context['has_error'] = True
- else:
- login(request, user)
- return redirect('chatpage')
- class ActivateAccountView(View):
- def get(self, request, uidb64, token):
- try:
- uid = force_str(urlsafe_base64_decode(uidb64))
- user = User.objects.get(pk=uid)
- except Exception as identifier:
- user = None
- if user is not None and generate_token.check_token(user, token):
- user.is_active = True
- user.save()
- messages.add_message(request, messages.SUCCESS,
- 'account activated successfully')
- return redirect('signin')
- return render(request, 'chatbot/activate_failed.html', status=401)
- class Signout(View):
- def post(self, request):
- logout(request)
- messages.add_message(request, messages.SUCCESS, 'Logout successfully')
- return redirect('signin')
- class ForgotPassword(View):
- def get(self, request):
- return render(request, "chatbot/forgotPassword.html")
- def post(self, request):
- context = {
- 'data': request.POST,
- 'has_error': False
- }
- class SetNewPasswordView(View): # Set New Password
- def get(self, request, uidb64, token):
- context = {
- 'uidb64': uidb64,
- 'token': token
- }
- try:
- user_id = force_str(urlsafe_base64_decode(uidb64))
- user = User.objects.get(pk=user_id)
- if not PasswordResetTokenGenerator().check_token(user, token):
- messages.info(
- request, 'Password reset link, is invalid, please request a new one')
- return render(request, 'chatbot/request-reset-email.html')
- except DjangoUnicodeDecodeError as identifier:
- messages.success(
- request, 'Invalid link')
- return render(request, 'chatbot/request-reset-email.html')
- return render(request, 'chatbot/NewPassword.html', context)
- def post(self, request, uidb64, token):
- context = {
- 'uidb64': uidb64,
- 'token': token,
- 'has_error': False
- }
- password = request.POST.get('pass1')
- password2 = request.POST.get('pass2')
- if len(password) < 6:
- messages.add_message(request, messages.ERROR,
- 'passwords should be at least 6 characters long')
- context['has_error'] = True
- if password != password2:
- messages.add_message(request, messages.ERROR,
- 'passwords don`t match')
- context['has_error'] = True
- if context['has_error'] == True:
- return render(request, 'chatbot/NewPassword.html', context)
- try:
- user_id = force_str(urlsafe_base64_decode(uidb64))
- user = User.objects.get(pk=user_id)
- user.set_password(password)
- user.save()
- messages.success(
- request, 'Password reset success, you can login with new password')
- return redirect('signin')
- except DjangoUnicodeDecodeError as identifier:
- messages.error(request, 'Something went wrong')
- return render(request, 'chatbot/NewPassword.html', context)
- return render(request, 'chatbot/NewPassword.html', context)
- class RequestResetEmailView(View):
- def get(self, request):
- return render(request, 'chatbot/request-reset-email.html')
- def post(self, request):
- email = request.POST['email']
- if not validate_email(email):
- messages.error(request, 'Please enter a valid email')
- return render(request, 'chatbot/request-reset-email.html')
- user = User.objects.filter(email=email)
- if user.exists():
- current_site = get_current_site(request)
- email_subject = '[Reset your Password]'
- message = render_to_string('chatbot/reset-user-password.html',
- {
- 'domain': current_site.domain,
- 'uid': urlsafe_base64_encode(force_bytes(user[0].pk)),
- 'token': PasswordResetTokenGenerator().make_token(user[0])
- }
- )
- email_message = EmailMessage(
- email_subject,
- message,
- settings.EMAIL_HOST_USER,
- [email]
- )
- EmailThread(email_message).start()
- messages.success(
- request, 'We have sent you an email with instructions on how to reset your password')
- return render(request, 'auth/request-reset-email.html')
Add Comment
Please, Sign In to add comment