mirror of
https://github.com/inventree/InvenTree.git
synced 2026-05-13 21:17:33 +00:00
redirect login if mfa is required
This commit is contained in:
@@ -5,7 +5,10 @@ import logging
|
|||||||
|
|
||||||
from django.contrib.auth import get_user, login, logout
|
from django.contrib.auth import get_user, login, logout
|
||||||
from django.contrib.auth.models import Group, User
|
from django.contrib.auth.models import Group, User
|
||||||
from django.urls import include, path, re_path
|
from django.http import HttpResponseRedirect
|
||||||
|
from django.http.response import HttpResponse
|
||||||
|
from django.shortcuts import redirect
|
||||||
|
from django.urls import NoReverseMatch, include, path, re_path, reverse_lazy
|
||||||
from django.views.generic.base import RedirectView
|
from django.views.generic.base import RedirectView
|
||||||
|
|
||||||
from allauth.account.adapter import get_adapter
|
from allauth.account.adapter import get_adapter
|
||||||
@@ -218,12 +221,20 @@ class GroupList(ListCreateAPI):
|
|||||||
class Login(LoginView):
|
class Login(LoginView):
|
||||||
"""API view for logging in via API."""
|
"""API view for logging in via API."""
|
||||||
|
|
||||||
def process_login(self):
|
def post(self, request, *args, **kwargs):
|
||||||
"""Process the login request, ensure that MFA is enforced if required."""
|
"""Handle login attempts."""
|
||||||
# Normal login process
|
self.request = request
|
||||||
ret = super().process_login()
|
self.serializer = self.get_serializer(data=self.request.data)
|
||||||
|
self.serializer.is_valid(raise_exception=True)
|
||||||
|
|
||||||
# Now check if MFA is enforced
|
self.login()
|
||||||
|
ret = self.check_mfa()
|
||||||
|
if ret is not None:
|
||||||
|
return ret
|
||||||
|
return self.get_response()
|
||||||
|
|
||||||
|
def check_mfa(self):
|
||||||
|
"""Ensure that MFA is enforced if required."""
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
adapter = get_adapter(self.request)
|
adapter = get_adapter(self.request)
|
||||||
|
|
||||||
@@ -232,8 +243,11 @@ class Login(LoginView):
|
|||||||
'LOGIN_ENFORCE_MFA'
|
'LOGIN_ENFORCE_MFA'
|
||||||
):
|
):
|
||||||
logout(self.request)
|
logout(self.request)
|
||||||
raise exceptions.PermissionDenied('MFA required for this user')
|
self.request.session['allauth_2fa_user_id'] = str(user.id)
|
||||||
return ret
|
ret = redirect(reverse_lazy('settings'))
|
||||||
|
return ret
|
||||||
|
# raise ImmediateHttpResponse(response=HttpResponse('MFA required for this user'))
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
@extend_schema_view(
|
@extend_schema_view(
|
||||||
|
|||||||
Reference in New Issue
Block a user