
* remove pyright Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove pylint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * replace pylint with ruff Signed-off-by: Jens Langhammer <jens@goauthentik.io> * ruff fix Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix UP038 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ012 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix default arg Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix UP031 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename stage type to view Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ008 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining upgrade Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLR2004 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix B904 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLW2901 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining issues Signed-off-by: Jens Langhammer <jens@goauthentik.io> * prevent ruff from breaking the code Signed-off-by: Jens Langhammer <jens@goauthentik.io> * stages/prompt: refactor field building Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fully remove isort Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
"""
|
|
ASGI config for authentik project.
|
|
|
|
It exposes the ASGI callable as a module-level variable named ``application``.
|
|
|
|
For more information on this file, see
|
|
https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/
|
|
"""
|
|
|
|
import django
|
|
from channels.routing import ProtocolTypeRouter, URLRouter
|
|
from defusedxml import defuse_stdlib
|
|
from django.core.asgi import get_asgi_application
|
|
from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
|
|
|
|
# DJANGO_SETTINGS_MODULE is set in gunicorn.conf.py
|
|
|
|
defuse_stdlib()
|
|
django.setup()
|
|
|
|
|
|
from authentik.root import websocket # noqa
|
|
|
|
|
|
class LifespanApp:
|
|
"""
|
|
temporary shim for https://github.com/django/channels/issues/1216
|
|
needed so that hypercorn doesn't display an error.
|
|
this uses ASGI 2.0 format, not the newer 3.0 single callable
|
|
"""
|
|
|
|
def __init__(self, scope):
|
|
self.scope = scope
|
|
|
|
async def __call__(self, receive, send):
|
|
if self.scope["type"] == "lifespan":
|
|
while True:
|
|
message = await receive()
|
|
if message["type"] == "lifespan.startup":
|
|
await send({"type": "lifespan.startup.complete"})
|
|
elif message["type"] == "lifespan.shutdown":
|
|
await send({"type": "lifespan.shutdown.complete"})
|
|
return
|
|
|
|
|
|
class RouteNotFoundMiddleware:
|
|
"""Middleware to ignore 404s for websocket requests
|
|
taken from https://github.com/django/daphne/issues/165#issuecomment-808284950"""
|
|
|
|
def __init__(self, app):
|
|
self.app = app
|
|
|
|
async def __call__(self, scope, receive, send):
|
|
try:
|
|
return await self.app(scope, receive, send)
|
|
except ValueError as exc:
|
|
if "No route found for path" in str(exc) and scope["type"] == "websocket":
|
|
await send({"type": "websocket.close"})
|
|
else:
|
|
raise exc
|
|
|
|
|
|
application = SentryAsgiMiddleware(
|
|
ProtocolTypeRouter(
|
|
{
|
|
"http": get_asgi_application(),
|
|
"websocket": RouteNotFoundMiddleware(URLRouter(websocket.websocket_urlpatterns)),
|
|
"lifespan": LifespanApp,
|
|
}
|
|
)
|
|
)
|