Skip to content

Commit a94c33f

Browse files
committed
Added an alert on the login form, to be shown if a user's password has been cleared. Adjusted url reverse strings to match the changed view function.
- Legacy-Id: 12918
1 parent 9f74aca commit a94c33f

6 files changed

Lines changed: 48 additions & 14 deletions

File tree

ietf/ietfauth/tests.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ def test_login_and_logout(self):
6262
make_test_data()
6363

6464
# try logging in without a next
65-
r = self.client.get(urlreverse(django.contrib.auth.views.login))
65+
r = self.client.get(urlreverse(ietf.ietfauth.views.login))
6666
self.assertEqual(r.status_code, 200)
6767

68-
r = self.client.post(urlreverse(django.contrib.auth.views.login), {"username":"plain", "password":"plain+password"})
68+
r = self.client.post(urlreverse(ietf.ietfauth.views.login), {"username":"plain", "password":"plain+password"})
6969
self.assertEqual(r.status_code, 302)
7070
self.assertEqual(urlsplit(r["Location"])[2], urlreverse(ietf.ietfauth.views.profile))
7171

@@ -75,10 +75,10 @@ def test_login_and_logout(self):
7575

7676
r = self.client.get(urlreverse(ietf.ietfauth.views.profile))
7777
self.assertEqual(r.status_code, 302)
78-
self.assertEqual(urlsplit(r["Location"])[2], urlreverse(django.contrib.auth.views.login))
78+
self.assertEqual(urlsplit(r["Location"])[2], urlreverse(ietf.ietfauth.views.login))
7979

8080
# try logging in with a next
81-
r = self.client.post(urlreverse(django.contrib.auth.views.login) + "?next=/foobar", {"username":"plain", "password":"plain+password"})
81+
r = self.client.post(urlreverse(ietf.ietfauth.views.login) + "?next=/foobar", {"username":"plain", "password":"plain+password"})
8282
self.assertEqual(r.status_code, 302)
8383
self.assertEqual(urlsplit(r["Location"])[2], "/foobar")
8484

@@ -153,7 +153,7 @@ def test_create_whitelisted_account(self):
153153
email = "new-account@example.com"
154154

155155
# add whitelist entry
156-
r = self.client.post(urlreverse(django.contrib.auth.views.login), {"username":"secretary", "password":"secretary+password"})
156+
r = self.client.post(urlreverse(ietf.ietfauth.views.login), {"username":"secretary", "password":"secretary+password"})
157157
self.assertEqual(r.status_code, 302)
158158
self.assertEqual(urlsplit(r["Location"])[2], urlreverse(ietf.ietfauth.views.profile))
159159

@@ -406,7 +406,7 @@ def test_change_password(self):
406406

407407
chpw_url = urlreverse(ietf.ietfauth.views.change_password)
408408
prof_url = urlreverse(ietf.ietfauth.views.profile)
409-
login_url = urlreverse(django.contrib.auth.views.login)
409+
login_url = urlreverse(ietf.ietfauth.views.login)
410410
redir_url = '%s?next=%s' % (login_url, chpw_url)
411411

412412
# get without logging in
@@ -453,7 +453,7 @@ def test_change_username(self):
453453

454454
chun_url = urlreverse(ietf.ietfauth.views.change_username)
455455
prof_url = urlreverse(ietf.ietfauth.views.profile)
456-
login_url = urlreverse(django.contrib.auth.views.login)
456+
login_url = urlreverse(ietf.ietfauth.views.login)
457457
redir_url = '%s?next=%s' % (login_url, chun_url)
458458

459459
# get without logging in

ietf/ietfauth/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright The IETF Trust 2007, 2009, All Rights Reserved
22

3-
from django.contrib.auth.views import login, logout
3+
from django.contrib.auth.views import logout
44

55
from ietf.ietfauth import views
66
from ietf.utils.urls import url
@@ -10,7 +10,7 @@
1010
url(r'^confirmnewemail/(?P<auth>[^/]+)/$', views.confirm_new_email),
1111
url(r'^create/$', views.create_account),
1212
url(r'^create/confirm/(?P<auth>[^/]+)/$', views.confirm_account),
13-
url(r'^login/$', login),
13+
url(r'^login/$', views.login),
1414
url(r'^logout/$', logout),
1515
url(r'^password/$', views.change_password),
1616
url(r'^profile/$', views.profile),

ietf/ietfauth/views.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@
4343
from django.conf import settings
4444
from django.contrib.auth import update_session_auth_hash
4545
from django.contrib.auth.decorators import login_required
46+
from django.contrib.auth.forms import AuthenticationForm
47+
from django.contrib.auth.hashers import identify_hasher
4648
from django.contrib.auth.models import User
49+
from django.contrib.auth.views import login as django_login
4750
from django.contrib.sites.models import Site
4851
from django.core.urlresolvers import reverse as urlreverse
4952
from django.http import Http404, HttpResponseRedirect #, HttpResponse,
@@ -565,4 +568,29 @@ def change_username(request):
565568
'user': user,
566569
})
567570

568-
571+
572+
573+
def login(request, extra_context=None):
574+
"""
575+
This login function is a wrapper around django's login() for the purpose
576+
of providing a notification if the user's password has been cleared. The
577+
warning will be triggered if the password field has been set to something
578+
which is not recognized as a valid password hash.
579+
"""
580+
581+
if request.method == "POST":
582+
form = AuthenticationForm(request, data=request.POST)
583+
username = form.data.get('username')
584+
user = User.objects.filter(username=username).first()
585+
if user:
586+
try:
587+
identify_hasher(user.password)
588+
except ValueError:
589+
extra_context = {"alert":
590+
"Note: Your password has been cleared because "
591+
"of possible password leakage. "
592+
"Please use the password reset link below "
593+
"to set a new password for your account.",
594+
}
595+
596+
return django_login(request, extra_context=extra_context)

ietf/meeting/tests_js.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from pyquery import PyQuery
66
from unittest import skipIf
77

8-
import django.contrib.auth.views
98
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
109
from django.core.urlresolvers import reverse as urlreverse
1110
#from django.test.utils import override_settings
@@ -73,7 +72,7 @@ def absreverse(self,*args,**kwargs):
7372
return '%s%s'%(self.live_server_url,urlreverse(*args,**kwargs))
7473

7574
def login(self):
76-
url = '%s%s'%(self.live_server_url, urlreverse('django.contrib.auth.views.login'))
75+
url = '%s%s'%(self.live_server_url, urlreverse('ietf.ietfauth.views.login'))
7776
self.driver.get(url)
7877
self.driver.find_element_by_name('username').send_keys('plain')
7978
self.driver.find_element_by_name('password').send_keys('plain+password')
@@ -127,7 +126,7 @@ def absreverse(self,*args,**kwargs):
127126
return '%s%s'%(self.live_server_url,urlreverse(*args,**kwargs))
128127

129128
def secr_login(self):
130-
url = '%s%s'%(self.live_server_url, urlreverse(django.contrib.auth.views.login))
129+
url = '%s%s'%(self.live_server_url, urlreverse('ietf.ietfauth.views.login'))
131130
self.driver.get(url)
132131
self.driver.find_element_by_name('username').send_keys('secretary')
133132
self.driver.find_element_by_name('password').send_keys('secretary+password')

ietf/templates/registration/confirm_account.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<h1>Account creation successful</h1>
2121

2222
<p>Your account with login {{ email }} has been created, using the password you have selected.</p>
23-
<a type="a" class="btn btn-primary" href="{% url "django.contrib.auth.views.login" %}" rel="nofollow">Sign in</a>
23+
<a type="a" class="btn btn-primary" href="{% url "ietf.ietfauth.views.login" %}" rel="nofollow">Sign in</a>
2424

2525
{% else %}
2626
<h1>Complete account creation</h1>

ietf/templates/registration/login.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,17 @@
1212
<div class="col-md-8 col-sm-12">
1313
<h1>Sign in</h1>
1414

15+
1516
<form method="post">
1617
{% csrf_token %}
1718
{% bootstrap_form form %}
1819

20+
{% if alert %}
21+
<p class="alert alert-danger">
22+
{{ alert }}
23+
</p>
24+
{% endif %}
25+
1926
{% buttons %}
2027
<table class="col-md-12">
2128
<tr>

0 commit comments

Comments
 (0)