diff --git a/app/main/__init__.py b/app/main/__init__.py index 506599396..c4c2c8ab2 100644 --- a/app/main/__init__.py +++ b/app/main/__init__.py @@ -3,4 +3,4 @@ from flask import Blueprint main = Blueprint('main', __name__) -from app.main.views import index, sign_in, register, verify +from app.main.views import index, sign_in, register, two_factor, verify diff --git a/app/main/forms.py b/app/main/forms.py index 4b8e400ba..1dc7b4bed 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -41,6 +41,10 @@ class RegisterUserForm(Form): Blacklist(message='That password is blacklisted, too common')]) +class TwoFactorForm(Form): + sms_code = IntegerField('sms code', validators=[DataRequired(message='Please enter your code')]) + + class VerifyForm(Form): sms_code = StringField("Text message confirmation code", validators=[DataRequired(message='SMS code can not be empty'), diff --git a/app/main/views/index.py b/app/main/views/index.py index 6f46ae671..1c6055a67 100644 --- a/app/main/views/index.py +++ b/app/main/views/index.py @@ -41,11 +41,6 @@ def addservice(): return render_template('add-service.html') -@main.route("/two-factor") -def twofactor(): - return render_template('two-factor.html') - - @main.route("/send-sms") def sendsms(): return render_template('send-sms.html') diff --git a/app/main/views/two_factor.py b/app/main/views/two_factor.py new file mode 100644 index 000000000..bac755107 --- /dev/null +++ b/app/main/views/two_factor.py @@ -0,0 +1,19 @@ +from flask import render_template, redirect, jsonify + +from app.main import main +from app.main.forms import TwoFactorForm + + +@main.route("/two-factor", methods=['GET']) +def render_two_factor(): + return render_template('two-factor.html', form=TwoFactorForm()) + + +@main.route('/two-factor', methods=['POST']) +def process_two_factor(): + form = TwoFactorForm() + + if form.validate_on_submit(): + return redirect('/dashboard') + else: + return jsonify(form.errors), 400 diff --git a/tests/app/main/views/test_two_factor.py b/tests/app/main/views/test_two_factor.py new file mode 100644 index 000000000..f7ea0c4a3 --- /dev/null +++ b/tests/app/main/views/test_two_factor.py @@ -0,0 +1,14 @@ + + +def test_should_render_two_factor_page(notifications_admin, notifications_admin_db): + response = notifications_admin.test_client().get('/two-factor') + assert response.status_code == 200 + assert '''We've sent you a text message with a verification code.''' in response.get_data(as_text=True) + + +def test_should_login_user_and_redirect_to_dashboard(notifications_admin, notifications_admin_db): + response = notifications_admin.test_client().post('/two-factor', + data={'sms_code': '12345'}) + + assert response.status_code == 302 + assert response.location == 'http://localhost/dashboard' \ No newline at end of file