Skip to content

Commit 9216211

Browse files
committed
Check activation key expiration
1 parent 9bedbc8 commit 9216211

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

tcms/core/contrib/auth/tests.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ def setUpTestData(cls):
183183
email='new-user@example.com',
184184
password='password')
185185

186+
def setUp(self):
187+
self.new_user.is_active = False
188+
self.new_user.save()
189+
186190
def test_fail_if_activation_key_not_exist(self):
187191
confirm_url = reverse('tcms-confirm',
188192
args=['nonexisting-activation-key'])
@@ -197,6 +201,33 @@ def test_fail_if_activation_key_not_exist(self):
197201
'<a href="{}">Continue</a>'.format(reverse('core-views-index')),
198202
html=True)
199203

204+
# user account not activated
205+
user = User.objects.get(username=self.new_user.username)
206+
self.assertFalse(user.is_active)
207+
208+
def test_fail_if_activation_key_expired(self):
209+
fake_activation_key = 'secret-activation-key'
210+
211+
with patch('tcms.core.contrib.auth.models.sha1') as sha1:
212+
sha1.return_value.hexdigest.return_value = fake_activation_key
213+
key = UserActivateKey.set_random_key_for_user(self.new_user)
214+
key.key_expires = datetime.datetime.now() - datetime.timedelta(days=10)
215+
key.save()
216+
217+
confirm_url = reverse('tcms-confirm', args=[fake_activation_key])
218+
response = self.client.get(confirm_url)
219+
220+
self.assertContains(response, 'This key has expired')
221+
222+
self.assertContains(
223+
response,
224+
'<a href="{}">Continue</a>'.format(reverse('core-views-index')),
225+
html=True)
226+
227+
# user account not activated
228+
user = User.objects.get(username=self.new_user.username)
229+
self.assertFalse(user.is_active)
230+
200231
def test_confirm(self):
201232
fake_activate_key = 'secret-activate-key'
202233

@@ -218,6 +249,7 @@ def test_confirm(self):
218249
reverse('tcms-redirect_to_profile')),
219250
html=True)
220251

252+
# user account activated
221253
user = User.objects.get(username=self.new_user.username)
222254
self.assertTrue(user.is_active)
223255
activate_key_deleted = not UserActivateKey.objects.filter(user=user).exists()

tcms/core/contrib/auth/views.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# -*- coding: utf-8 -*-
22

3+
from datetime import datetime
4+
35
from django.conf import settings
46
from django.contrib import auth
57
from django.core.urlresolvers import reverse
@@ -94,6 +96,15 @@ def confirm(request, activation_key):
9496
next=request.GET.get('next', reverse('core-views-index'))
9597
)
9698

99+
if ak.key_expires <= datetime.now():
100+
msg = 'This key has expired!'
101+
return Prompt.render(
102+
request=request,
103+
info_type=Prompt.Info,
104+
info=msg,
105+
next=request.GET.get('next', reverse('core-views-index'))
106+
)
107+
97108
# All thing done, start to active the user and use the user login
98109
user = ak.user
99110
user.is_active = True

0 commit comments

Comments
 (0)