mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-05 02:42:26 -05:00
Merge pull request #269 from alphagov/invite-registration-sms-only
Change new invite registration flow to only need
This commit is contained in:
@@ -150,6 +150,23 @@ class TwoFactorForm(Form):
|
|||||||
raise ValidationError(reason)
|
raise ValidationError(reason)
|
||||||
|
|
||||||
|
|
||||||
|
class VerifySmsForm(Form):
|
||||||
|
def __init__(self, validate_code_func, *args, **kwargs):
|
||||||
|
'''
|
||||||
|
Keyword arguments:
|
||||||
|
validate_code_func -- Validates the code with the API.
|
||||||
|
'''
|
||||||
|
self.validate_code_func = validate_code_func
|
||||||
|
super(VerifySmsForm, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
sms_code = sms_code()
|
||||||
|
|
||||||
|
def validate_sms_code(self, field):
|
||||||
|
is_valid, reason = self.validate_code_func(field.data, 'sms')
|
||||||
|
if not is_valid:
|
||||||
|
raise ValidationError(reason)
|
||||||
|
|
||||||
|
|
||||||
class VerifyForm(Form):
|
class VerifyForm(Form):
|
||||||
def __init__(self, validate_code_func, *args, **kwargs):
|
def __init__(self, validate_code_func, *args, **kwargs):
|
||||||
'''
|
'''
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ from flask_login import login_user
|
|||||||
|
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app.main.dao import users_dao
|
from app.main.dao import users_dao
|
||||||
from app.main.forms import VerifyForm
|
from app.main.forms import (
|
||||||
|
VerifyForm,
|
||||||
|
VerifySmsForm
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@main.route('/verify', methods=['GET', 'POST'])
|
@main.route('/verify', methods=['GET', 'POST'])
|
||||||
@@ -22,7 +25,11 @@ def verify():
|
|||||||
def _check_code(code, code_type):
|
def _check_code(code, code_type):
|
||||||
return users_dao.check_verify_code(user_id, code, code_type)
|
return users_dao.check_verify_code(user_id, code, code_type)
|
||||||
|
|
||||||
form = VerifyForm(_check_code)
|
if session.get('invited_user'):
|
||||||
|
form = VerifySmsForm(_check_code)
|
||||||
|
else:
|
||||||
|
form = VerifyForm(_check_code)
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
try:
|
try:
|
||||||
user = users_dao.get_user_by_id(user_id)
|
user = users_dao.get_user_by_id(user_id)
|
||||||
|
|||||||
@@ -3,30 +3,48 @@
|
|||||||
{% from "components/page-footer.html" import page_footer %}
|
{% from "components/page-footer.html" import page_footer %}
|
||||||
|
|
||||||
{% block page_title %}
|
{% block page_title %}
|
||||||
Enter the codes we’ve sent you – GOV.UK Notify
|
{% if form.email_code %}
|
||||||
|
Enter the codes we’ve sent you – GOV.UK Notify
|
||||||
|
{% else %}
|
||||||
|
Enter the code we’ve sent you – GOV.UK Notify
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block maincolumn_content %}
|
{% block maincolumn_content %}
|
||||||
|
|
||||||
<div class="grid-row">
|
<div class="grid-row">
|
||||||
<div class="column-two-thirds">
|
<div class="column-two-thirds">
|
||||||
<h1 class="heading-large">Enter the codes we’ve sent you</h1>
|
{% if form.email_code %}
|
||||||
<p>
|
<h1 class="heading-large">Enter the codes we’ve sent you</h1>
|
||||||
We’ve sent you confirmation codes by email and text message.
|
{% else %}
|
||||||
</p>
|
<h1 class="heading-large">Enter the code we’ve sent you</h1>
|
||||||
|
{% endif %}
|
||||||
|
{% if form.email_code %}
|
||||||
|
<p>
|
||||||
|
We’ve sent you confirmation codes by email and text message.
|
||||||
|
</p>
|
||||||
|
{% else %}
|
||||||
|
<p>
|
||||||
|
We’ve sent you a confirmation code by text message.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
<form autocomplete="off" method="post">
|
<form autocomplete="off" method="post">
|
||||||
|
{% if form.sms_code %}
|
||||||
{{ textbox(
|
{{ textbox(
|
||||||
form.sms_code,
|
form.sms_code,
|
||||||
width='5em',
|
width='5em',
|
||||||
help_link=url_for('.check_and_resend_text_code'),
|
help_link=url_for('.check_and_resend_text_code'),
|
||||||
help_link_text='I haven’t received a text message'
|
help_link_text='I haven’t received a text message'
|
||||||
) }}
|
) }}
|
||||||
{{ textbox(
|
{% endif %}
|
||||||
form.email_code,
|
{% if form.email_code %}
|
||||||
width='5em',
|
{{ textbox(
|
||||||
help_link=url_for('.check_and_resend_email_code'),
|
form.email_code,
|
||||||
help_link_text='I haven’t received an email'
|
width='5em',
|
||||||
) }}
|
help_link=url_for('.check_and_resend_email_code'),
|
||||||
|
help_link_text='I haven’t received an email'
|
||||||
|
) }}
|
||||||
|
{% endif %}
|
||||||
{{ page_footer("Continue") }}
|
{{ page_footer("Continue") }}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -169,8 +169,7 @@ def test_cancelled_invited_user_accepts_invited_redirect_to_cancelled_invitation
|
|||||||
service_one,
|
service_one,
|
||||||
mocker,
|
mocker,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_service
|
mock_get_service):
|
||||||
):
|
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
cancelled_invitation = create_sample_invite(mocker, service_one, status='cancelled')
|
cancelled_invitation = create_sample_invite(mocker, service_one, status='cancelled')
|
||||||
@@ -232,6 +231,7 @@ def test_new_user_accept_invite_completes_new_registration_redirects_to_verify(a
|
|||||||
def test_new_invited_user_verifies_and_added_to_service(app_,
|
def test_new_invited_user_verifies_and_added_to_service(app_,
|
||||||
service_one,
|
service_one,
|
||||||
sample_invite,
|
sample_invite,
|
||||||
|
api_user_active,
|
||||||
mock_check_invite_token,
|
mock_check_invite_token,
|
||||||
mock_dont_get_user_by_email,
|
mock_dont_get_user_by_email,
|
||||||
mock_register_user,
|
mock_register_user,
|
||||||
@@ -261,8 +261,7 @@ def test_new_invited_user_verifies_and_added_to_service(app_,
|
|||||||
response = client.post(url_for('main.register_from_invite'), data=data)
|
response = client.post(url_for('main.register_from_invite'), data=data)
|
||||||
|
|
||||||
# that sends user on to verify
|
# that sends user on to verify
|
||||||
response = client.post(url_for('main.verify'), data={'sms_code': '12345', 'email_code': '23456'},
|
response = client.post(url_for('main.verify'), data={'sms_code': '12345'}, follow_redirects=True)
|
||||||
follow_redirects=True)
|
|
||||||
|
|
||||||
# when they post codes back to admin user should be added to
|
# when they post codes back to admin user should be added to
|
||||||
# service and sent on to dash board
|
# service and sent on to dash board
|
||||||
@@ -270,8 +269,8 @@ def test_new_invited_user_verifies_and_added_to_service(app_,
|
|||||||
with client.session_transaction() as session:
|
with client.session_transaction() as session:
|
||||||
new_user_id = session['user_id']
|
new_user_id = session['user_id']
|
||||||
mock_add_user_to_service.assert_called_with(data['service'], new_user_id, expected_permissions)
|
mock_add_user_to_service.assert_called_with(data['service'], new_user_id, expected_permissions)
|
||||||
|
mock_accept_invite.assert_called_with(data['service'], sample_invite['id'])
|
||||||
mock_accept_invite.assert_called_with(data['service'], sample_invite['id'])
|
mock_check_verify_code.assert_called_once_with(new_user_id, '12345', 'sms')
|
||||||
|
|
||||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||||
element = page.find('h2', class_='navigation-service-name').find('a')
|
element = page.find('h2', class_='navigation-service-name').find('a')
|
||||||
|
|||||||
@@ -332,6 +332,7 @@ def mock_register_user(mocker, api_user_pending):
|
|||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def mock_get_user(mocker, api_user_active):
|
def mock_get_user(mocker, api_user_active):
|
||||||
def _get_user(id):
|
def _get_user(id):
|
||||||
|
api_user_active.id = id
|
||||||
return api_user_active
|
return api_user_active
|
||||||
return mocker.patch(
|
return mocker.patch(
|
||||||
'app.user_api_client.get_user', side_effect=_get_user)
|
'app.user_api_client.get_user', side_effect=_get_user)
|
||||||
|
|||||||
Reference in New Issue
Block a user