47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
|
from django.contrib.auth.views import LoginView
|
||
|
from django.contrib import messages
|
||
|
from django.http import HttpResponseRedirect
|
||
|
from django.views.generic import RedirectView
|
||
|
from django.urls import reverse_lazy
|
||
|
|
||
|
from authentication.forms.otp import TOTPLoginForm
|
||
|
from authentication.mixins.timeout import TimeoutMixin
|
||
|
from ..mixins.views import TitleMixin
|
||
|
|
||
|
|
||
|
class TOTPActivationView(TitleMixin, TimeoutMixin, LoginView):
|
||
|
authentication_form = TOTPLoginForm
|
||
|
template_name = "frontend/activate_totp.html"
|
||
|
title = "Activate Two-Factor Authentication"
|
||
|
|
||
|
def form_valid(self, form):
|
||
|
token = self.request.user.totpsecret
|
||
|
token.active = True
|
||
|
token.save()
|
||
|
|
||
|
messages.success(self.request, "Two-factor authentication was enabled for your account.")
|
||
|
|
||
|
return HttpResponseRedirect(self.get_success_url())
|
||
|
|
||
|
|
||
|
class TOTPDeactivationView(TitleMixin, TimeoutMixin, LoginView):
|
||
|
authentication_form = TOTPLoginForm
|
||
|
template_name = "frontend/deactivate_totp.html"
|
||
|
title = "Disable Two-Factor Authentication"
|
||
|
|
||
|
def form_valid(self, form):
|
||
|
token = self.request.user.totpsecret
|
||
|
token.active = False
|
||
|
token.save()
|
||
|
token.change_secret()
|
||
|
|
||
|
messages.success(self.request, "Two-factor authentication was disabled for your account.")
|
||
|
|
||
|
return HttpResponseRedirect(self.get_success_url())
|
||
|
|
||
|
|
||
|
class TOTPDispatcherView(TimeoutMixin, RedirectView):
|
||
|
def get_redirect_url(self):
|
||
|
if self.request.user.totpsecret.active:
|
||
|
return reverse_lazy("frontend:deactivate_totp")
|
||
|
return reverse_lazy("frontend:activate_totp")
|