out-of-scope: Add decorator to not require auth (#3633)

This commit is contained in:
Matthias Mair 2022-09-05 05:03:38 +02:00 committed by GitHub
parent abf133384b
commit b7d0bb9820
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View File

@ -7,7 +7,7 @@ from django.conf import settings
from django.contrib.auth.middleware import PersistentRemoteUserMiddleware
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import Resolver404, include, re_path, reverse_lazy
from django.urls import Resolver404, include, re_path, resolve, reverse_lazy
from allauth_2fa.middleware import (AllauthTwoFactorMiddleware,
BaseRequire2FAMiddleware)
@ -41,6 +41,11 @@ class AuthRequiredMiddleware(object):
if request.path_info.startswith('/api/'):
return self.get_response(request)
# Is the function exempt from auth requirements?
path_func = resolve(request.path).func
if getattr(path_func, 'auth_exempt', False) is True:
return self.get_response(request)
if not request.user.is_authenticated:
"""
Normally, a web-based session would use csrftoken based authentication.

View File

@ -1,5 +1,7 @@
"""Permission set for InvenTree."""
from functools import wraps
from rest_framework import permissions
import users.models
@ -63,3 +65,11 @@ class RolePermission(permissions.BasePermission):
result = users.models.RuleSet.check_table_permission(user, table, permission)
return result
def auth_exempt(view_func):
"""Mark a view function as being exempt from auth requirements."""
def wrapped_view(*args, **kwargs):
return view_func(*args, **kwargs)
wrapped_view.auth_exempt = True
return wraps(view_func)(wrapped_view)