diff options
Diffstat (limited to 'users/views.py')
| -rw-r--r-- | users/views.py | 299 |
1 files changed, 184 insertions, 115 deletions
diff --git a/users/views.py b/users/views.py index 7c166911..5dba135b 100644 --- a/users/views.py +++ b/users/views.py @@ -1,6 +1,5 @@ from django.contrib import messages -from django.contrib.auth import (authenticate, login, logout, - update_session_auth_hash) +from django.contrib.auth import authenticate, login, logout, update_session_auth_hash from django.contrib.auth.models import User from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import redirect, reverse @@ -16,14 +15,14 @@ from .models import UserProfile # Create your views here. def login_user(request): # pass - next = request.POST.get('next', 'blog:home') - username = request.POST['username'] - password = request.POST['password'] - if username == '' or password == '' or username is None or password is None: + next = request.POST.get("next", "blog:home") + username = request.POST["username"] + password = request.POST["password"] + if username == "" or password == "" or username is None or password is None: # required fields are empty - messages.error(request, 'RFEERR', extra_tags='loginError') - return HttpResponseRedirect(next + '?username=' + username) - else: + messages.error(request, "RFEERR", extra_tags="loginError") + return HttpResponseRedirect(next + "?username=" + username) + else: # check if email is verified user = authenticate(request, username=username, password=password) if user is not None: @@ -37,195 +36,265 @@ def login_user(request): return HttpResponseRedirect(next) else: # email not verified - messages.error(request, 'ENVERR', extra_tags='loginError') - return HttpResponseRedirect(next + '?username=' + username) + messages.error(request, "ENVERR", extra_tags="loginError") + return HttpResponseRedirect(next + "?username=" + username) else: # invalid credentials - messages.error(request, 'IUOPERR', extra_tags='loginError') - return HttpResponseRedirect(next + '?username=' + username) + messages.error(request, "IUOPERR", extra_tags="loginError") + return HttpResponseRedirect(next + "?username=" + username) + def logout_user(request): logout(request) - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) + def update_user(request): user = request.user if user is not None: - if request.method == 'POST': + if request.method == "POST": form = UpdateUserDetailsForm(request.POST, user=user) if form.is_valid(): form.save() - messages.success(request, 'Profile was successfully updated!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.success(request, "Profile was successfully updated!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Unable to update profile! Please try again later.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error( + request, "Unable to update profile! Please try again later." + ) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'You must be logged in to update your profile!') - return redirect('blog:home') + messages.error(request, "You must be logged in to update your profile!") + return redirect("blog:home") + def delete_user(request): user = request.user if user is not None: - if request.method == 'POST': - password = request.POST['password'] + if request.method == "POST": + password = request.POST["password"] if user.check_password(password): # delete user, all comments, user profile details, and all posts user.delete() - messages.success(request, 'Your account was successfully deleted!') - return redirect('blog:home') + messages.success(request, "Your account was successfully deleted!") + return redirect("blog:home") else: - messages.error(request, 'Incorrect password!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "Incorrect password!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Unable to delete account! Please try again later.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "Unable to delete account! Please try again later.") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'You must be logged in to delete your account!') - return redirect('blog:home') + messages.error(request, "You must be logged in to delete your account!") + return redirect("blog:home") + def update_avatar(request): user = request.user if user is not None: - if request.method == 'POST': + if request.method == "POST": user_profile = UserProfile.objects.get(user=user) - user_profile.avatar_url = request.POST['avatar'] + user_profile.avatar_url = request.POST["avatar"] user_profile.save() - messages.success(request, 'Avatar was successfully updated!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.success(request, "Avatar was successfully updated!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Unable to update avatar! Please try again later.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "Unable to update avatar! Please try again later.") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'You must be logged in to update your avatar!') - return redirect('blog:home') + messages.error(request, "You must be logged in to update your avatar!") + return redirect("blog:home") + def update_blinkie(request): - user = request.user + user = request.user if user is not None: - if request.method == 'POST': + if request.method == "POST": user_profile = UserProfile.objects.get(user=user) - user_profile.blinkie_url = request.POST['blinkie'] + user_profile.blinkie_url = request.POST["blinkie"] user_profile.save() - messages.success(request, 'Blinkie was successfully updated!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.success(request, "Blinkie was successfully updated!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Unable to update blinkie! Please try again later.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "Unable to update blinkie! Please try again later.") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'You must be logged in to update your blinkie!') - return redirect('blog:home') - + messages.error(request, "You must be logged in to update your blinkie!") + return redirect("blog:home") + + def change_password(request): username = request.user - old_password = request.POST['oldPassword'] - new_password = request.POST['newPassword'] - confirm_password = request.POST['confirmPassword'] + old_password = request.POST["oldPassword"] + new_password = request.POST["newPassword"] + confirm_password = request.POST["confirmPassword"] if username is not None: user = User.objects.get(username=username) if user.check_password(old_password): if new_password == confirm_password: if len(new_password) < 8: - messages.error(request, 'The new password must be at least 8 characters long!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error( + request, "The new password must be at least 8 characters long!" + ) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) user.set_password(new_password) user.save() update_session_auth_hash(request, user) - messages.success(request, 'Password was successfully changed!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.success(request, "Password was successfully changed!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'The new password and confirmation password do not match!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error( + request, "The new password and confirmation password do not match!" + ) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Old password is incorrect!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "Old password is incorrect!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Unable to change password! Please try again later.') - return redirect('blog:home') + messages.error(request, "Unable to change password! Please try again later.") + return redirect("blog:home") + def send_change_user_email(request): user = request.user - new_email = request.POST['email'] + new_email = request.POST["email"] if user is not None: # Check if the new and the old email are the same if user.email == new_email: - messages.error(request, 'New email is the same as the old one!') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "New email is the same as the old one!") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) # check if email is already in use if User.objects.filter(email=new_email).exists(): - messages.error(request, 'Email is already in use!') + messages.error(request, "Email is already in use!") # Redirect to referrer - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) # Send verification email - subject = 'Verify your email address' - uid, token = store_token(token_type='changeemail', user=user, email=new_email) - - message = render_to_string('email_change_verification_email.html', { - 'user': user.username if user.first_name is None else user.first_name, - 'site_name': 'Shifoo', - 'uid': uid, - 'token': token, - 'protocol': request.scheme + '://', - 'domain': request.get_host(), - }) - message = strip_tags(message) + subject = "Change your email address" + uid, token = store_token(token_type="changeemail", user=user, email=new_email) + + message = render_to_string( + "email_change_verification_email.html", + { + "user": user.username if user.first_name is None else user.first_name, + "site_name": "Shifoo", + "uid": uid, + "token": token, + "protocol": request.scheme + "://", + "domain": request.get_host(), + }, + ) + # message = strip_tags(message) # send_mail(subject, message, 'That Computer Scientist <' + settings.EMAIL_HOST_USER + '>', [new_email]) - if (send_email(sender='[email protected]', sender_name='Shifoo', recipient=new_email, subject=subject, body_html=message, body_text=message)): - messages.success(request, 'Verification email was sent! Please check your email.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + if send_email( + sender="[email protected]", + sender_name="Shifoo", + recipient=new_email, + subject=subject, + body_html=message, + body_text=message, + ): + messages.success( + request, "Verification email was sent! Please check your email." + ) + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'Unable to change email! Please try again later.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) - + messages.error(request, "Unable to change email! Please try again later.") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) + else: - messages.error(request, 'Unable to change email! Please try again later.') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) - + messages.error(request, "Unable to change email! Please try again later.") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) + + def send_verification_email(request): # this is a post only view - if request.method == 'POST': - username = request.POST.get('username') - subject = 'Verify your email address' + if request.method == "POST": + username = request.POST.get("username") + subject = "Verify your email address" user = User.objects.get(username=username) - uid, token = store_token(token_type='verifyemail', user=user, email=user.email) - - message = render_to_string('verification_email.html', { - 'user': user.username if user.first_name is None else user.first_name, - 'site_name': 'Shifoo', - 'uid': uid, - 'token': token, - 'protocol': 'https://' if request.is_secure() else 'http://', - 'domain': request.get_host(), - }) - message = strip_tags(message) - if (send_email(sender='[email protected]', sender_name='Shifoo', recipient=user.email, subject=subject, body_html=message, body_text=message)): - messages.success(request, 'VESENT', extra_tags='loginError') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + uid, token = store_token(token_type="verifyemail", user=user, email=user.email) + + message = render_to_string( + "verification_email.html", + { + "user": user.username if user.first_name is None else user.first_name, + "site_name": "Shifoo", + "uid": uid, + "token": token, + "protocol": "https://" if request.is_secure() else "http://", + "domain": request.get_host(), + }, + ) + # message = strip_tags(message) + if send_email( + sender="[email protected]", + sender_name="Shifoo", + recipient=user.email, + subject=subject, + body_html=message, + body_text=message, + ): + messages.success(request, "VESENT", extra_tags="loginError") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'VESENDERR', extra_tags='loginError') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "VESENDERR", extra_tags="loginError") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) else: - messages.error(request, 'VESENDERR', extra_tags='loginError') - return HttpResponseRedirect(request.META.get('HTTP_REFERER')) + messages.error(request, "VESENDERR", extra_tags="loginError") + return HttpResponseRedirect(request.META.get("HTTP_REFERER")) + def verify_email(request, mode, uid, token): token_object = verify_token(mode, uid, token) - redirect_to = reverse('blog:account') + '?tab=email' if mode == 'changeemail' else 'blog:home' - success_message = 'Email was successfully changed!' if mode == 'changeemail' else 'VESUCCESS' - error_message = 'Unable to verify email! Please try again later.' + redirect_to = ( + reverse("blog:account") + "?tab=email" if mode == "changeemail" else "blog:home" + ) + success_message = ( + "Email was successfully changed!" if mode == "changeemail" else "VESUCCESS" + ) + error_message = "Unable to verify email! Please try again later." if token_object is not None and token_object.verified: user = User.objects.get(pk=token_object.user_id) user.email = token_object.email user.save() token_object.delete() - messages.success(request, success_message, extra_tags='loginError' if mode == 'verifyemail' else '') + messages.success( + request, + success_message, + extra_tags="loginError" if mode == "verifyemail" else "", + ) return redirect(redirect_to) else: messages.error(request, error_message) return redirect(redirect_to) -
\ No newline at end of file + + +def reset_password(request, uid, token): + mode = "resetpassword" + token_object = verify_token(mode, uid, token) + + # Token is not verified yet, but confirmed that it belongs to the user + # Now we send a form for the user to reset their password + if token_object is not None and token_object.verified: + print(token_object.user_id) + # redirect to forgotpassword/reset?uid=uid&token=token + return HttpResponseRedirect( + reverse("blog:resetpassword") + + "?uid=" + + token_object.user_id + + "&token=" + + token + ) + else: + # Token is invalid + messages.error( + request, + "Unable to reset password! Please try again later.", + extra_tags="passwordReset", + ) + return redirect("blog:forgotpassword") |
