Skip to content

Commit 70e00b6

Browse files
authored
Merge pull request #169 from anx-abruckner/ab_issue154
issue154: add reset_password_token to pre/post reset signals
2 parents 14f76ac + 05423b3 commit 70e00b6

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
PyPi: [https://pypi.org/project/django-rest-passwordreset/](https://pypi.org/project/django-rest-passwordreset/).
88

9+
## [Unreleased]
10+
11+
- `pre_password_reset` and `post_password_reset` signals now provide `reset_password_token
12+
- Updated README test instructions
13+
914
## [1.3.0]
1015

1116
### Added

README.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ where `${API_URL}/` is the url specified in your *urls.py* (e.g., `api/password_
6666
### Signals
6767

6868
* ``reset_password_token_created(sender, instance, reset_password_token)`` Fired when a reset password token is generated
69-
* ``pre_password_reset(sender, user)`` - fired just before a password is being reset
70-
* ``post_password_reset(sender, user)`` - fired after a password has been reset
69+
* ``pre_password_reset(sender, user, reset_password_token)`` - fired just before a password is being reset
70+
* ``post_password_reset(sender, user, reset_password_token)`` - fired after a password has been reset
7171

7272
### Example for sending an e-mail
7373

@@ -382,11 +382,19 @@ This library tries to follow the unix philosophy of "do one thing and do it well
382382
See folder [tests/](tests/). Basically, all endpoints are covered with multiple
383383
unit tests.
384384

385-
Use this code snippet to run tests:
385+
Follow below instructions to run the tests.
386+
You may exchange the installed Django and DRF versions according to your requirements.
387+
:warning: Depending on your local environment settings you might need to explicitly call `python3` instead of `python`.
386388
```bash
387-
python setup.py install
388-
cd tests
389-
python manage.py test
389+
# install dependencies
390+
python -m pip install --upgrade pip
391+
pip install -r tests/requirements.txt
392+
393+
# setup environment
394+
pip install -e .
395+
396+
# run tests
397+
cd tests && python manage.py test
390398
```
391399

392400
## Release on PyPi

django_rest_passwordreset/signals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
reset_password_token_created = Signal()
1313

1414
"""
15-
Signal arguments: user
15+
Signal arguments: user, reset_password_token
1616
"""
1717
pre_password_reset = Signal()
1818

1919
"""
20-
Signal arguments: user
20+
Signal arguments: user, reset_password_token
2121
"""
2222
post_password_reset = Signal()

django_rest_passwordreset/views.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,11 @@ def post(self, request, *args, **kwargs):
8282

8383
# change users password (if we got to this code it means that the user is_active)
8484
if reset_password_token.user.eligible_for_reset():
85-
pre_password_reset.send(sender=self.__class__, user=reset_password_token.user)
85+
pre_password_reset.send(
86+
sender=self.__class__,
87+
user=reset_password_token.user,
88+
reset_password_token=reset_password_token,
89+
)
8690
try:
8791
# validate the password against existing validators
8892
validate_password(
@@ -98,7 +102,11 @@ def post(self, request, *args, **kwargs):
98102

99103
reset_password_token.user.set_password(password)
100104
reset_password_token.user.save()
101-
post_password_reset.send(sender=self.__class__, user=reset_password_token.user)
105+
post_password_reset.send(
106+
sender=self.__class__,
107+
user=reset_password_token.user,
108+
reset_password_token=reset_password_token,
109+
)
102110

103111
# Delete all password reset tokens for this user
104112
ResetPasswordToken.objects.filter(user=reset_password_token.user).delete()

tests/test/test_auth_test_case.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,11 @@ def test_signals(self,
321321

322322
# now the other two signals should have been called
323323
self.assertTrue(mock_post_password_reset.called)
324+
self.assertIn('reset_password_token', mock_post_password_reset.call_args[1])
325+
self.assertEqual(mock_post_password_reset.call_args[1]['reset_password_token'], token1)
324326
self.assertTrue(mock_pre_password_reset.called)
327+
self.assertIn('reset_password_token', mock_pre_password_reset.call_args[1])
328+
self.assertEqual(mock_pre_password_reset.call_args[1]['reset_password_token'], token1)
325329

326330
@override_settings(DJANGO_REST_PASSWORDRESET_NO_INFORMATION_LEAKAGE=True)
327331
def test_try_reset_password_email_does_not_exist_no_leakage_enabled(self):

0 commit comments

Comments
 (0)