From 0a1429ed6088a47a68b990de782849a7a1db9e3f Mon Sep 17 00:00:00 2001
From: Martin Gross
+ {% trans "This system enforces the usage of two-factor authentication!" %} +
+ {% if not devices %} +{% trans "Please set up at least one device below." %}
+ {% elif not user.require_2fa %} +{% trans "Please activate two-factor authentication using the button below." %}
+ {% endif %} +{% trans "Two-factor authentication is currently enabled." %}
diff --git a/src/pretix/settings.py b/src/pretix/settings.py index ecefc5244f..2393691b0b 100644 --- a/src/pretix/settings.py +++ b/src/pretix/settings.py @@ -120,6 +120,7 @@ PRETIX_REGISTRATION = config.getboolean('pretix', 'registration', fallback=True) PRETIX_PASSWORD_RESET = config.getboolean('pretix', 'password_reset', fallback=True) PRETIX_LONG_SESSIONS = config.getboolean('pretix', 'long_sessions', fallback=True) PRETIX_ADMIN_AUDIT_COMMENTS = config.getboolean('pretix', 'audit_comments', fallback=False) +PRETIX_OBLIGATORY_2FA = config.getboolean('pretix', 'obligatory_2fa', fallback=False) PRETIX_SESSION_TIMEOUT_RELATIVE = 3600 * 3 PRETIX_SESSION_TIMEOUT_ABSOLUTE = 3600 * 12 diff --git a/src/tests/control/test_auth.py b/src/tests/control/test_auth.py index 340668a2f3..0d03935ef9 100644 --- a/src/tests/control/test_auth.py +++ b/src/tests/control/test_auth.py @@ -769,3 +769,33 @@ def test_staff_session_require_staff(user, client): session.save() response = client.post('/control/sudo/') assert response.status_code == 403 + + +@override_settings(PRETIX_OBLIGATORY_2FA=True) +class Obligatory2FATest(TestCase): + def setUp(self): + super().setUp() + self.user = User.objects.create_user('demo@demo.dummy', 'demo') + self.client.login(email='demo@demo.dummy', password='demo') + + def test_enabled_2fa_not_setup(self): + response = self.client.get('/control/events/') + assert response.status_code == 302 + assert response.url == '/control/settings/2fa/' + + def test_enabled_2fa_setup_not_enabled(self): + U2FDevice.objects.create(user=self.user, name='test', json_data="{}", confirmed=True) + self.user.require_2fa = False + self.user.save() + + response = self.client.get('/control/events/') + assert response.status_code == 302 + assert response.url == '/control/settings/2fa/' + + def test_enabled_2fa_setup_enabled(self): + U2FDevice.objects.create(user=self.user, name='test', json_data="{}", confirmed=True) + self.user.require_2fa = True + self.user.save() + + response = self.client.get('/control/events/') + assert response.status_code == 200