root: add lifespan shim to prevent errors

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens Langhammer 2021-11-16 13:25:03 +01:00
parent 956922820b
commit e831e4fb94
1 changed files with 23 additions and 0 deletions

View File

@ -20,11 +20,34 @@ django.setup()
# pylint: disable=wrong-import-position # pylint: disable=wrong-import-position
from authentik.root import websocket # noqa # isort:skip from authentik.root import websocket # noqa # isort:skip
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
application = SentryAsgiMiddleware( application = SentryAsgiMiddleware(
ProtocolTypeRouter( ProtocolTypeRouter(
{ {
"http": get_asgi_application(), "http": get_asgi_application(),
"websocket": URLRouter(websocket.websocket_urlpatterns), "websocket": URLRouter(websocket.websocket_urlpatterns),
"lifespan": LifespanApp,
} }
) )
) )