Files
MarietjeDjango/marietje/marietje/views.py
2017-11-03 18:18:33 +01:00

76 lines
3.1 KiB
Python

import random
import string
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.core.mail import send_mail
from django.shortcuts import render, redirect, get_object_or_404
from django.urls import reverse
from marietje.utils import get_first_queue
from .forms import RegistrationForm, ResetPasswordForm
def register(request):
return render(request, 'registration/register.html')
def activate(request, user_id, token):
User = get_user_model()
user = get_object_or_404(User, pk=user_id)
if token == user.activation_token:
user.activation_token = None
user.save()
messages.add_message(request, messages.SUCCESS, 'Successfully activated.', extra_tags='success')
else:
messages.add_message(request, messages.ERROR, 'Activation failed. If the problem persists, please contact '
+ settings.CONTACT_EMAIL + '.', extra_tags='danger')
return redirect('login')
def forgotpassword(request):
if not request.POST:
return render(request, 'registration/forgotpassword.html')
User = get_user_model()
user = User.objects.filter(username=request.POST.get('email')).first()
if user is None or user.activation_token:
messages.add_message(request, messages.ERROR, 'No (active) user found.', extra_tags='danger')
return render(request, 'registration/forgotpassword.html')
user.reset_token = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
user.save()
reset_link = request.build_absolute_uri(reverse('resetpassword', args=[user.id, user.reset_token]))
send_mail('Marietje - Reset password',
'You have requested to reset your password. You can reset your password by following this link: '
+ reset_link + '\nIf you did not request to reset your password, you can ignore this email.',
settings.MAIL_FROM,
[user.email],
fail_silently=True)
messages.add_message(request, messages.INFO, 'Please check your email, ' + user.email
+ ', for resetting your password.', extra_tags='info')
return redirect('login')
def resetpassword(request, user_id, token):
User = get_user_model()
user = get_object_or_404(User, pk=user_id)
if not user.reset_token or token != user.reset_token:
messages.add_message(request, messages.ERROR, 'Invalid password reset link.', extra_tags='danger')
return redirect('login')
if not request.POST:
return render(request, 'registration/resetpassword.html', {'user_id': user.id, 'reset_token': token})
form = ResetPasswordForm(request.POST)
if not form.is_valid():
return render(request, 'registration/resetpassword.html', {'user_id': user.id, 'reset_token': token,
'form': form})
user.reset_token = None
user.set_password(form.cleaned_data['password1'])
user.save()
messages.add_message(request, messages.SUCCESS, 'Your password has been reset.', extra_tags='success')
return redirect('login')