diff --git a/src/pretix/control/templates/pretixcontrol/user/2fa_disable.html b/src/pretix/control/templates/pretixcontrol/user/2fa_disable.html new file mode 100644 index 000000000..e4a5e3931 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/user/2fa_disable.html @@ -0,0 +1,24 @@ +{% extends "pretixcontrol/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "Disable two-factor authentication" %}{% endblock %} +{% block content %} +

{% trans "Disable two-factor authentication" %}

+
+ {% csrf_token %} +

+ {% trans "Do you really want to disable two-factor authentication?" %} +

+

+ {% trans "You will no longer require a second device to log in to your account." %} +

+
+ + {% trans "Cancel" %} + + +
+
+{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/user/2fa_enable.html b/src/pretix/control/templates/pretixcontrol/user/2fa_enable.html new file mode 100644 index 000000000..32a65aa77 --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/user/2fa_enable.html @@ -0,0 +1,25 @@ +{% extends "pretixcontrol/base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block title %}{% trans "Enable two-factor authentication" %}{% endblock %} +{% block content %} +

{% trans "Enable two-factor authentication" %}

+
+ {% csrf_token %} +

+ {% trans "Do you really want to enable two-factor authentication?" %} +

+

+ {% trans "You will no longer be able to log in to pretix without one of your configured devices." %} + {% trans "Please make sure to print out or copy the emergency keys and store them in a safe place." %} +

+
+ + {% trans "Cancel" %} + + +
+
+{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/user/2fa_main.html b/src/pretix/control/templates/pretixcontrol/user/2fa_main.html index bbb0051a5..cbb73dfae 100644 --- a/src/pretix/control/templates/pretixcontrol/user/2fa_main.html +++ b/src/pretix/control/templates/pretixcontrol/user/2fa_main.html @@ -12,12 +12,14 @@ {% endblocktrans %}

{% if user.require_2fa %} -
+

{% trans "Two-factor status" %}

- Disable + + {% trans "Disable" %} +

{% trans "Two-factor authentication is currently enabled." %}

@@ -30,7 +32,9 @@
{% if devices|length %} - Enable + + {% trans "Enable" %} + {% endif %}

{% trans "Two-factor authentication is currently disabled." %} diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py index 41c2d4b84..315c5fdb4 100644 --- a/src/pretix/control/urls.py +++ b/src/pretix/control/urls.py @@ -15,6 +15,8 @@ urlpatterns = [ url(r'^settings$', user.UserSettings.as_view(), name='user.settings'), url(r'^settings/2fa/$', user.User2FAMainView.as_view(), name='user.settings.2fa'), url(r'^settings/2fa/add$', user.User2FADeviceAddView.as_view(), name='user.settings.2fa.add'), + url(r'^settings/2fa/enable', user.User2FAEnableView.as_view(), name='user.settings.2fa.enable'), + url(r'^settings/2fa/disable', user.User2FADisableView.as_view(), name='user.settings.2fa.disable'), url(r'^settings/2fa/totp/(?P[0-9]+)/confirm', user.User2FADeviceConfirmTOTPView.as_view(), name='user.settings.2fa.confirm.totp'), url(r'^settings/2fa/(?P[^/]+)/(?P[0-9]+)/delete', user.User2FADeviceDeleteView.as_view(), diff --git a/src/pretix/control/views/user.py b/src/pretix/control/views/user.py index 1fe7ab7aa..26fc53554 100644 --- a/src/pretix/control/views/user.py +++ b/src/pretix/control/views/user.py @@ -131,3 +131,30 @@ class User2FADeviceConfirmTOTPView(TemplateView): return redirect(reverse('control:user.settings.2fa.confirm.totp', kwargs={ 'device': self.device.pk })) + + +class User2FAEnableView(TemplateView): + template_name = 'pretixcontrol/user/2fa_enable.html' + + def dispatch(self, request, *args, **kwargs): + if not any(dt.objects.filter(user=self.request.user, confirmed=True) for dt in REAL_DEVICE_TYPES): + messages.error(request, _('Please configure at least one device before enabling two-factor ' + 'authentication.')) + return redirect(reverse('control:user.settings.2fa')) + return super().dispatch(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + self.request.user.require_2fa = True + self.request.user.save() + messages.success(request, _('Two-factor authentication is now enabled for your account.')) + return redirect(reverse('control:user.settings.2fa')) + + +class User2FADisableView(TemplateView): + template_name = 'pretixcontrol/user/2fa_disable.html' + + def post(self, request, *args, **kwargs): + self.request.user.require_2fa = False + self.request.user.save() + messages.success(request, _('Two-factor authentication is now disabled for your account.')) + return redirect(reverse('control:user.settings.2fa'))