Forgot password sends redirect link

with reset password email.

This is so when users reset their password they are still
redirected to pages they were meant to visit.

This change was done specifically so everyone who is meant to see
broadcast tour sees it, but it will improve lives of all users
who wanted to visit a page on Notify but then had to reset
their password in the process.
This commit is contained in:
Pea Tyczynska
2020-10-05 15:51:44 +01:00
parent ab10009e4d
commit d089424501
3 changed files with 25 additions and 5 deletions

View File

@@ -1,4 +1,4 @@
from flask import render_template
from flask import render_template, request
from notifications_python_client.errors import HTTPError
from app import user_api_client
@@ -11,7 +11,7 @@ def forgot_password():
form = ForgotPasswordForm()
if form.validate_on_submit():
try:
user_api_client.send_reset_password_url(form.email_address.data)
user_api_client.send_reset_password_url(form.email_address.data, next_string=request.args.get('next'))
except HTTPError as e:
if e.status_code == 404:
return render_template('views/password-reset-sent.html')

View File

@@ -165,9 +165,11 @@ class UserApiClient(NotifyAdminAPIClient):
endpoint = '/user/{}/service/{}/permission'.format(user_id, service_id)
self.post(endpoint, data=data)
def send_reset_password_url(self, email_address):
def send_reset_password_url(self, email_address, next_string=None):
endpoint = '/user/reset-password'
data = {'email': email_address}
if next_string:
data['next'] = next_string
self.post(endpoint, data=data)
def find_users_by_full_or_partial_email(self, email_address):

View File

@@ -31,7 +31,23 @@ def test_should_redirect_to_password_reset_sent_for_valid_email(
assert response.status_code == 200
assert 'Click the link in the email to reset your password.' \
in response.get_data(as_text=True)
app.user_api_client.send_reset_password_url.assert_called_once_with(sample_user['email_address'])
app.user_api_client.send_reset_password_url.assert_called_once_with(sample_user['email_address'], next_string=None)
def test_forgot_password_sends_next_link_with_reset_password_email_request(
client,
fake_uuid,
mocker,
):
sample_user = user_json(email_address='test@user.gov.uk')
mocker.patch('app.user_api_client.send_reset_password_url', return_value=None)
response = client.post(
url_for('.forgot_password') + "?next=blob",
data={'email_address': sample_user['email_address']})
assert response.status_code == 200
app.user_api_client.send_reset_password_url.assert_called_once_with(
sample_user['email_address'], next_string="blob"
)
def test_should_redirect_to_password_reset_sent_for_missing_email(
@@ -48,4 +64,6 @@ def test_should_redirect_to_password_reset_sent_for_missing_email(
assert response.status_code == 200
assert 'Click the link in the email to reset your password.' \
in response.get_data(as_text=True)
app.user_api_client.send_reset_password_url.assert_called_once_with(api_user_active['email_address'])
app.user_api_client.send_reset_password_url.assert_called_once_with(
api_user_active['email_address'], next_string=None
)