misc: optimize use of middlewares
Middleware are useless for the API endpoints, so we only apply them to views of the admin site.
This commit is contained in:
parent
58b91ba0de
commit
3a8c844535
|
@ -44,7 +44,7 @@ def authenticate(func):
|
||||||
def wrapper(request, *args, **kwargs):
|
def wrapper(request, *args, **kwargs):
|
||||||
global AUTH_TOKEN, AUTH_TOKEN_TIME # pylint: disable=global-statement
|
global AUTH_TOKEN, AUTH_TOKEN_TIME # pylint: disable=global-statement
|
||||||
|
|
||||||
if not request.user.is_authenticated:
|
if not hasattr(request, 'user') or not request.user.is_authenticated:
|
||||||
header = request.headers.get('X-Hub-Rdv-Auth-Token', '')
|
header = request.headers.get('X-Hub-Rdv-Auth-Token', '')
|
||||||
if not header:
|
if not header:
|
||||||
logger.warning('authentication failed, missing header X-HUB-RDV-AUTH-TOKEN')
|
logger.warning('authentication failed, missing header X-HUB-RDV-AUTH-TOKEN')
|
||||||
|
|
|
@ -20,6 +20,15 @@ INSTALLED_APPS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
]
|
||||||
|
|
||||||
|
SILENCED_SYSTEM_CHECKS = [
|
||||||
|
'admin.E408',
|
||||||
|
'admin.E409',
|
||||||
|
'admin.E410',
|
||||||
|
]
|
||||||
|
|
||||||
|
ADMIN_MIDDLEWARE = [
|
||||||
'django.middleware.security.SecurityMiddleware',
|
'django.middleware.security.SecurityMiddleware',
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
|
|
@ -6,7 +6,7 @@ from django.conf import settings
|
||||||
from django.urls import include, path, register_converter
|
from django.urls import include, path, register_converter
|
||||||
from django.utils.timezone import is_aware
|
from django.utils.timezone import is_aware
|
||||||
|
|
||||||
from . import admin, views
|
from . import admin, urls_utils, views
|
||||||
|
|
||||||
|
|
||||||
class IsoDatetimeConverter:
|
class IsoDatetimeConverter:
|
||||||
|
@ -28,7 +28,7 @@ register_converter(IsoDatetimeConverter, 'isodatetime')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.homepage),
|
path('', views.homepage),
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', urls_utils.decorate_admin(admin.site.urls)),
|
||||||
path('api/', include('ants_hub.api.urls')),
|
path('api/', include('ants_hub.api.urls')),
|
||||||
path(
|
path(
|
||||||
'rdv/<slug:collectivite_slug>-<int:collectivite_pk>'
|
'rdv/<slug:collectivite_slug>-<int:collectivite_pk>'
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
# ANTS-Hub - Copyright (C) Entr'ouvert
|
||||||
|
|
||||||
|
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.urls.resolvers import URLPattern, URLResolver
|
||||||
|
from django.utils.decorators import decorator_from_middleware
|
||||||
|
|
||||||
|
|
||||||
|
class DecoratedURLPattern(URLPattern):
|
||||||
|
def resolve(self, *args, **kwargs):
|
||||||
|
result = super().resolve(*args, **kwargs)
|
||||||
|
if result:
|
||||||
|
result.func = self._decorate_with(result.func)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class DecoratedURLResolver(URLResolver):
|
||||||
|
def resolve(self, *args, **kwargs):
|
||||||
|
result = super().resolve(*args, **kwargs)
|
||||||
|
if result:
|
||||||
|
result.func = self._decorate_with(result.func)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def decorated_includes(func, includes, *args, **kwargs):
|
||||||
|
urlconf_module, app_name, namespace = includes
|
||||||
|
|
||||||
|
for item in urlconf_module:
|
||||||
|
if isinstance(item, URLResolver):
|
||||||
|
item.__class__ = DecoratedURLResolver
|
||||||
|
else:
|
||||||
|
item.__class__ = DecoratedURLPattern
|
||||||
|
item._decorate_with = func
|
||||||
|
|
||||||
|
return urlconf_module, app_name, namespace
|
||||||
|
|
||||||
|
|
||||||
|
def decorate_admin(includes):
|
||||||
|
decorators = []
|
||||||
|
for middleware_path in reversed(settings.ADMIN_MIDDLEWARE):
|
||||||
|
module_name, class_name = middleware_path.rsplit('.', 1)
|
||||||
|
module = importlib.import_module(module_name)
|
||||||
|
middleware_class = getattr(module, class_name)
|
||||||
|
decorators.append(decorator_from_middleware(middleware_class))
|
||||||
|
|
||||||
|
def decorator(func):
|
||||||
|
for deco in decorators:
|
||||||
|
func = deco(func)
|
||||||
|
return func
|
||||||
|
|
||||||
|
return decorated_includes(decorator, includes)
|
|
@ -1,3 +1,4 @@
|
||||||
# ANTS-Hub - Copyright (C) Entr'ouvert
|
# ANTS-Hub - Copyright (C) Entr'ouvert
|
||||||
|
|
||||||
SECRET_KEY = 'abcd'
|
SECRET_KEY = 'abcd'
|
||||||
|
MIDDLEWARE += ADMIN_MIDDLEWARE # pylint: disable=undefined-variable
|
||||||
|
|
Loading…
Reference in New Issue