def forgot_password(request): """ Actions when user forgot password. :param request: object :return: redirect to views.home() or 'loginsys/forgot.html' with form, message """ message = None if request.method == 'POST': form = ForgotPasswordForm(request.POST) if form.is_valid(): email = form.cleaned_data['email'] user = User.objects.filter(email=email) salt = random_salt(len(user[0].username)) code = signing.dumps([user[0].id, user[0].email, user[0].username], key=settings.SECRET_KEY, salt=salt) url = settings.SITE_URL + reverse('loginsys:reset', args=[code]) send_email.apply_async(('Welcome', '<p>Hello</p><p><a href="{0}">Go to this link</a></p>'. format(url), [email])) store = ForgotPasswordLink() store.random_salt = salt store.user_link_id = user[0].id store.code_value = code store.save() forgot_password_salt_life.apply_async((user[0].id, salt), countdown=180) request.session["message"] = 'Instruction have sent on your mail - {0}'.format(email) return redirect(reverse('home')) else: form = ForgotPasswordForm() return render(request, 'loginsys/forgot.html', {'form': form, 'message': message})
def test_reset_password(self): """ Test case for reset_password() :return: None """ response = self.client.get(str(settings.SITE_URL + reverse('loginsys:reset', args=[123]))) self.assertEqual(response.status_code, 302) self.assertEqual(self.client.session['message'], 'Time over. Link was blocked.') self.assertRedirects(response, reverse('home'), 302, 200) user = User.objects.get(username='******') salt = random_salt(len(user.username)) code = signing.dumps([user.id, user.email, user.username], key=settings.SECRET_KEY, salt=salt) store = ForgotPasswordLink() store.random_salt = salt store.user_link_id = user.id store.code_value = code store.save() new_code = str(code) + '1' response = self.client.get(str(settings.SITE_URL + reverse('loginsys:reset', args=[new_code]))) self.assertEqual(response.status_code, 302) self.assertEqual(self.client.session['message'], 'Time over. Link was blocked.') self.assertRedirects(response, reverse('home'), 302, 200) response = self.client.get(str(settings.SITE_URL + reverse('loginsys:reset', args=[code]))) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'loginsys/reset.html') self.assertTemplateUsed(response, 'base.html') self.assertEqual(response.context['code'], code) self.assertEqual(response.context['form'].is_valid(), False) response = self.client.post(str(settings.SITE_URL + reverse('loginsys:reset', args=[code])), {'password': '******', 'repeat_password': '******'}) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'loginsys/reset.html') self.assertTemplateUsed(response, 'base.html') self.assertEqual(response.context['code'], code) self.assertEqual(response.context['form'].is_valid(), False) response = self.client.post(str(settings.SITE_URL + reverse('loginsys:reset', args=[code])), {'password': '******', 'repeat_password': '******'}) self.assertEqual(response.status_code, 302) self.assertEqual(self.client.session['message'], 'Password has changed.') self.assertRedirects(response, reverse('home'), 302, 200) data = ForgotPasswordLink.objects.all() self.assertEqual(len(data), 0)