fix: Send create user email for password resets where we have an email and person, but no user. (#7729)
* fix: Send create user email for password resets where we have an email and person, but no user account This fixes https://github.com/ietf-tools/datatracker/issues/6458 * fix: create User straight away and use nomral password reset --------- Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
This commit is contained in:
parent
0c8db80b18
commit
30970749e3
|
@ -527,6 +527,24 @@ class IetfAuthTests(TestCase):
|
||||||
self.assertIn(secondary_address, to)
|
self.assertIn(secondary_address, to)
|
||||||
self.assertNotIn(inactive_secondary_address, to)
|
self.assertNotIn(inactive_secondary_address, to)
|
||||||
|
|
||||||
|
def test_reset_password_without_user(self):
|
||||||
|
"""Reset password using email address for person without a user account"""
|
||||||
|
url = urlreverse('ietf.ietfauth.views.password_reset')
|
||||||
|
email = EmailFactory()
|
||||||
|
person = email.person
|
||||||
|
# Remove the user object from the person to get a Email/Person without User:
|
||||||
|
person.user = None
|
||||||
|
person.save()
|
||||||
|
# Remove the remaining User record, since reset_password looks for that by username:
|
||||||
|
User.objects.filter(username__iexact=email.address).delete()
|
||||||
|
empty_outbox()
|
||||||
|
r = self.client.post(url, { 'username': email.address })
|
||||||
|
self.assertEqual(len(outbox), 1)
|
||||||
|
lastReceivedEmail = outbox[-1]
|
||||||
|
self.assertIn(email.address, lastReceivedEmail.get('To'))
|
||||||
|
self.assertTrue(lastReceivedEmail.get('Subject').startswith("Confirm password reset"))
|
||||||
|
self.assertContains(r, "Your password reset request has been successfully received", status_code=200)
|
||||||
|
|
||||||
def test_review_overview(self):
|
def test_review_overview(self):
|
||||||
review_req = ReviewRequestFactory()
|
review_req = ReviewRequestFactory()
|
||||||
assignment = ReviewAssignmentFactory(review_request=review_req,reviewer=EmailFactory(person__user__username='reviewer'))
|
assignment = ReviewAssignmentFactory(review_request=review_req,reviewer=EmailFactory(person__user__username='reviewer'))
|
||||||
|
|
|
@ -491,9 +491,19 @@ def password_reset(request):
|
||||||
if not user:
|
if not user:
|
||||||
# try to find user ID from the email address
|
# try to find user ID from the email address
|
||||||
email = Email.objects.filter(address=submitted_username).first()
|
email = Email.objects.filter(address=submitted_username).first()
|
||||||
if email and email.person and email.person.user:
|
if email and email.person:
|
||||||
user = email.person.user
|
if email.person.user:
|
||||||
|
user = email.person.user
|
||||||
|
else:
|
||||||
|
# Create a User record with this (conditioned by way of Email) username
|
||||||
|
# Don't bother setting the name or email fields on User - rely on the
|
||||||
|
# Person pointer.
|
||||||
|
user = User.objects.create(
|
||||||
|
username=email.address.lower(),
|
||||||
|
is_active=True,
|
||||||
|
)
|
||||||
|
email.person.user = user
|
||||||
|
email.person.save()
|
||||||
if user and user.person.email_set.filter(active=True).exists():
|
if user and user.person.email_set.filter(active=True).exists():
|
||||||
data = {
|
data = {
|
||||||
'username': user.username,
|
'username': user.username,
|
||||||
|
|
Loading…
Reference in a new issue