*: load websocket paths similarly to URLs (#5018)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
parent
32840d3909
commit
54cacd784c
|
@ -11,6 +11,7 @@ class AuthentikCoreConfig(ManagedAppConfig):
|
||||||
label = "authentik_core"
|
label = "authentik_core"
|
||||||
verbose_name = "authentik Core"
|
verbose_name = "authentik Core"
|
||||||
mountpoint = ""
|
mountpoint = ""
|
||||||
|
ws_mountpoint = "authentik.outposts.urls"
|
||||||
default = True
|
default = True
|
||||||
|
|
||||||
def reconcile_load_core_signals(self):
|
def reconcile_load_core_signals(self):
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
"""authentik URL Configuration"""
|
"""authentik URL Configuration"""
|
||||||
|
from channels.auth import AuthMiddleware
|
||||||
|
from channels.sessions import CookieMiddleware
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
@ -9,6 +11,8 @@ from authentik.core.views import apps, impersonate
|
||||||
from authentik.core.views.debug import AccessDeniedView
|
from authentik.core.views.debug import AccessDeniedView
|
||||||
from authentik.core.views.interface import FlowInterfaceView, InterfaceView
|
from authentik.core.views.interface import FlowInterfaceView, InterfaceView
|
||||||
from authentik.core.views.session import EndSessionView
|
from authentik.core.views.session import EndSessionView
|
||||||
|
from authentik.root.asgi_middleware import SessionMiddleware
|
||||||
|
from authentik.root.messages.consumer import MessageConsumer
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path(
|
path(
|
||||||
|
@ -64,6 +68,12 @@ urlpatterns = [
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
websocket_urlpatterns = [
|
||||||
|
path(
|
||||||
|
"ws/client/", CookieMiddleware(SessionMiddleware(AuthMiddleware(MessageConsumer.as_asgi())))
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
urlpatterns += [
|
urlpatterns += [
|
||||||
path("debug/policy/deny/", AccessDeniedView.as_view(), name="debug-policy-deny"),
|
path("debug/policy/deny/", AccessDeniedView.as_view(), name="debug-policy-deny"),
|
||||||
|
|
|
@ -24,6 +24,7 @@ class AuthentikOutpostConfig(ManagedAppConfig):
|
||||||
label = "authentik_outposts"
|
label = "authentik_outposts"
|
||||||
verbose_name = "authentik Outpost"
|
verbose_name = "authentik Outpost"
|
||||||
default = True
|
default = True
|
||||||
|
ws_mountpoint = "authentik.outposts.urls"
|
||||||
|
|
||||||
def reconcile_load_outposts_signals(self):
|
def reconcile_load_outposts_signals(self):
|
||||||
"""Load outposts signals"""
|
"""Load outposts signals"""
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
"""Outpost Websocket URLS"""
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from authentik.outposts.channels import OutpostConsumer
|
||||||
|
|
||||||
|
websocket_urlpatterns = [
|
||||||
|
path("ws/outpost/<uuid:pk>/", OutpostConsumer.as_asgi()),
|
||||||
|
]
|
|
@ -1,15 +1,21 @@
|
||||||
"""root Websocket URLS"""
|
"""root Websocket URLS"""
|
||||||
from channels.auth import AuthMiddleware
|
from importlib import import_module
|
||||||
from channels.sessions import CookieMiddleware
|
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from authentik.outposts.channels import OutpostConsumer
|
from structlog.stdlib import get_logger
|
||||||
from authentik.root.asgi_middleware import SessionMiddleware
|
|
||||||
from authentik.root.messages.consumer import MessageConsumer
|
|
||||||
|
|
||||||
websocket_urlpatterns = [
|
from authentik.lib.utils.reflection import get_apps
|
||||||
path("ws/outpost/<uuid:pk>/", OutpostConsumer.as_asgi()),
|
|
||||||
path(
|
LOGGER = get_logger()
|
||||||
"ws/client/", CookieMiddleware(SessionMiddleware(AuthMiddleware(MessageConsumer.as_asgi())))
|
|
||||||
),
|
websocket_urlpatterns = []
|
||||||
]
|
for _authentik_app in get_apps():
|
||||||
|
mountpoint = getattr(_authentik_app, "ws_mountpoint", None)
|
||||||
|
if not mountpoint:
|
||||||
|
continue
|
||||||
|
ws_paths = import_module(mountpoint)
|
||||||
|
websocket_urlpatterns.extend(getattr(ws_paths, "websocket_urlpatterns"))
|
||||||
|
LOGGER.debug(
|
||||||
|
"Mounted URLs",
|
||||||
|
app_name=_authentik_app.name,
|
||||||
|
app_mountpoint=mountpoint,
|
||||||
|
)
|
||||||
|
|
Reference in New Issue