From ede59ef6f39ff8a6443c2b24df0208ef6ec41ee0 Mon Sep 17 00:00:00 2001 From: Romain Garrigues Date: Fri, 13 Jan 2017 14:17:54 +0000 Subject: Fixed #27518 -- Prevented possibie password reset token leak via HTTP Referer header. Thanks Florian Apolloner for contributing to this patch and Collin Anderson, Markus Holtermann, and Tim Graham for review. --- tests/auth_tests/test_templates.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'tests/auth_tests/test_templates.py') diff --git a/tests/auth_tests/test_templates.py b/tests/auth_tests/test_templates.py index 9414f8b299..a1d14c9774 100644 --- a/tests/auth_tests/test_templates.py +++ b/tests/auth_tests/test_templates.py @@ -3,12 +3,15 @@ from django.contrib.auth.models import User from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.contrib.auth.views import ( PasswordChangeDoneView, PasswordChangeView, PasswordResetCompleteView, - PasswordResetConfirmView, PasswordResetDoneView, PasswordResetView, + PasswordResetDoneView, PasswordResetView, ) from django.test import RequestFactory, TestCase, override_settings +from django.urls import reverse from django.utils.encoding import force_bytes, force_text from django.utils.http import urlsafe_base64_encode +from .client import PasswordResetConfirmClient + @override_settings(ROOT_URLCONF='auth_tests.urls') class AuthTemplateTests(TestCase): @@ -34,16 +37,20 @@ class AuthTemplateTests(TestCase): def test_PasswordResetConfirmView_invalid_token(self): # PasswordResetConfirmView invalid token - response = PasswordResetConfirmView.as_view(success_url='dummy/')(self.request, uidb64='Bad', token='Bad') + client = PasswordResetConfirmClient() + url = reverse('password_reset_confirm', kwargs={'uidb64': 'Bad', 'token': 'Bad-Token'}) + response = client.get(url) self.assertContains(response, 'Password reset unsuccessful') self.assertContains(response, '

Password reset unsuccessful

') def test_PasswordResetConfirmView_valid_token(self): # PasswordResetConfirmView valid token + client = PasswordResetConfirmClient() default_token_generator = PasswordResetTokenGenerator() token = default_token_generator.make_token(self.user) uidb64 = force_text(urlsafe_base64_encode(force_bytes(self.user.pk))) - response = PasswordResetConfirmView.as_view(success_url='dummy/')(self.request, uidb64=uidb64, token=token) + url = reverse('password_reset_confirm', kwargs={'uidb64': uidb64, 'token': token}) + response = client.get(url) self.assertContains(response, 'Enter new password') self.assertContains(response, '

Enter new password

') -- cgit v1.3