-
-
Notifications
You must be signed in to change notification settings - Fork 598
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
load API urls from app module's urls file instead of a single static file Signed-off-by: Jens Langhammer <jens@goauthentik.io>
- Loading branch information
Showing
45 changed files
with
404 additions
and
246 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
"""API URLs""" | ||
from django.urls import path | ||
|
||
from authentik.admin.api.meta import AppsViewSet | ||
from authentik.admin.api.metrics import AdministrationMetricsViewSet | ||
from authentik.admin.api.system import SystemView | ||
from authentik.admin.api.tasks import TaskViewSet | ||
from authentik.admin.api.version import VersionView | ||
from authentik.admin.api.workers import WorkerView | ||
|
||
api_urlpatterns = [ | ||
("admin/system_tasks", TaskViewSet, "admin_system_tasks"), | ||
("admin/apps", AppsViewSet, "apps"), | ||
path( | ||
"admin/metrics/", | ||
AdministrationMetricsViewSet.as_view(), | ||
name="admin_metrics", | ||
), | ||
path("admin/version/", VersionView.as_view(), name="admin_version"), | ||
path("admin/workers/", WorkerView.as_view(), name="admin_workers"), | ||
path("admin/system/", SystemView.as_view(), name="admin_system"), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,269 +1,50 @@ | ||
"""api v3 urls""" | ||
from importlib import import_module | ||
|
||
from django.urls import path | ||
from django.urls.resolvers import URLPattern | ||
from django.views.decorators.cache import cache_page | ||
from drf_spectacular.views import SpectacularAPIView | ||
from rest_framework import routers | ||
from structlog.stdlib import get_logger | ||
|
||
from authentik.admin.api.meta import AppsViewSet | ||
from authentik.admin.api.metrics import AdministrationMetricsViewSet | ||
from authentik.admin.api.system import SystemView | ||
from authentik.admin.api.tasks import TaskViewSet | ||
from authentik.admin.api.version import VersionView | ||
from authentik.admin.api.workers import WorkerView | ||
from authentik.api.v3.config import ConfigView | ||
from authentik.api.views import APIBrowserView | ||
from authentik.blueprints.api import BlueprintInstanceViewSet | ||
from authentik.core.api.applications import ApplicationViewSet | ||
from authentik.core.api.authenticated_sessions import AuthenticatedSessionViewSet | ||
from authentik.core.api.devices import AdminDeviceViewSet, DeviceViewSet | ||
from authentik.core.api.groups import GroupViewSet | ||
from authentik.core.api.propertymappings import PropertyMappingViewSet | ||
from authentik.core.api.providers import ProviderViewSet | ||
from authentik.core.api.sources import SourceViewSet, UserSourceConnectionViewSet | ||
from authentik.core.api.tokens import TokenViewSet | ||
from authentik.core.api.users import UserViewSet | ||
from authentik.crypto.api import CertificateKeyPairViewSet | ||
from authentik.events.api.events import EventViewSet | ||
from authentik.events.api.notification_mappings import NotificationWebhookMappingViewSet | ||
from authentik.events.api.notification_rules import NotificationRuleViewSet | ||
from authentik.events.api.notification_transports import NotificationTransportViewSet | ||
from authentik.events.api.notifications import NotificationViewSet | ||
from authentik.flows.api.bindings import FlowStageBindingViewSet | ||
from authentik.flows.api.flows import FlowViewSet | ||
from authentik.flows.api.stages import StageViewSet | ||
from authentik.flows.views.executor import FlowExecutorView | ||
from authentik.flows.views.inspector import FlowInspectorView | ||
from authentik.outposts.api.outposts import OutpostViewSet | ||
from authentik.outposts.api.service_connections import ( | ||
DockerServiceConnectionViewSet, | ||
KubernetesServiceConnectionViewSet, | ||
ServiceConnectionViewSet, | ||
) | ||
from authentik.policies.api.bindings import PolicyBindingViewSet | ||
from authentik.policies.api.policies import PolicyViewSet | ||
from authentik.policies.dummy.api import DummyPolicyViewSet | ||
from authentik.policies.event_matcher.api import EventMatcherPolicyViewSet | ||
from authentik.policies.expiry.api import PasswordExpiryPolicyViewSet | ||
from authentik.policies.expression.api import ExpressionPolicyViewSet | ||
from authentik.policies.password.api import PasswordPolicyViewSet | ||
from authentik.policies.reputation.api import ReputationPolicyViewSet, ReputationViewSet | ||
from authentik.providers.ldap.api import LDAPOutpostConfigViewSet, LDAPProviderViewSet | ||
from authentik.providers.oauth2.api.providers import OAuth2ProviderViewSet | ||
from authentik.providers.oauth2.api.scopes import ScopeMappingViewSet | ||
from authentik.providers.oauth2.api.tokens import ( | ||
AccessTokenViewSet, | ||
AuthorizationCodeViewSet, | ||
RefreshTokenViewSet, | ||
) | ||
from authentik.providers.proxy.api import ProxyOutpostConfigViewSet, ProxyProviderViewSet | ||
from authentik.providers.radius.api import RadiusOutpostConfigViewSet, RadiusProviderViewSet | ||
from authentik.providers.saml.api.property_mapping import SAMLPropertyMappingViewSet | ||
from authentik.providers.saml.api.providers import SAMLProviderViewSet | ||
from authentik.providers.scim.api.property_mapping import SCIMMappingViewSet | ||
from authentik.providers.scim.api.providers import SCIMProviderViewSet | ||
from authentik.sources.ldap.api import LDAPPropertyMappingViewSet, LDAPSourceViewSet | ||
from authentik.sources.oauth.api.source import OAuthSourceViewSet | ||
from authentik.sources.oauth.api.source_connection import UserOAuthSourceConnectionViewSet | ||
from authentik.sources.plex.api.source import PlexSourceViewSet | ||
from authentik.sources.plex.api.source_connection import PlexSourceConnectionViewSet | ||
from authentik.sources.saml.api.source import SAMLSourceViewSet | ||
from authentik.sources.saml.api.source_connection import UserSAMLSourceConnectionViewSet | ||
from authentik.stages.authenticator_duo.api import ( | ||
AuthenticatorDuoStageViewSet, | ||
DuoAdminDeviceViewSet, | ||
DuoDeviceViewSet, | ||
) | ||
from authentik.stages.authenticator_sms.api import ( | ||
AuthenticatorSMSStageViewSet, | ||
SMSAdminDeviceViewSet, | ||
SMSDeviceViewSet, | ||
) | ||
from authentik.stages.authenticator_static.api import ( | ||
AuthenticatorStaticStageViewSet, | ||
StaticAdminDeviceViewSet, | ||
StaticDeviceViewSet, | ||
) | ||
from authentik.stages.authenticator_totp.api import ( | ||
AuthenticatorTOTPStageViewSet, | ||
TOTPAdminDeviceViewSet, | ||
TOTPDeviceViewSet, | ||
) | ||
from authentik.stages.authenticator_validate.api import AuthenticatorValidateStageViewSet | ||
from authentik.stages.authenticator_webauthn.api import ( | ||
AuthenticateWebAuthnStageViewSet, | ||
WebAuthnAdminDeviceViewSet, | ||
WebAuthnDeviceViewSet, | ||
) | ||
from authentik.stages.captcha.api import CaptchaStageViewSet | ||
from authentik.stages.consent.api import ConsentStageViewSet, UserConsentViewSet | ||
from authentik.stages.deny.api import DenyStageViewSet | ||
from authentik.stages.dummy.api import DummyStageViewSet | ||
from authentik.stages.email.api import EmailStageViewSet | ||
from authentik.stages.identification.api import IdentificationStageViewSet | ||
from authentik.stages.invitation.api import InvitationStageViewSet, InvitationViewSet | ||
from authentik.stages.password.api import PasswordStageViewSet | ||
from authentik.stages.prompt.api import PromptStageViewSet, PromptViewSet | ||
from authentik.stages.user_delete.api import UserDeleteStageViewSet | ||
from authentik.stages.user_login.api import UserLoginStageViewSet | ||
from authentik.stages.user_logout.api import UserLogoutStageViewSet | ||
from authentik.stages.user_write.api import UserWriteStageViewSet | ||
from authentik.tenants.api import TenantViewSet | ||
from authentik.lib.utils.reflection import get_apps | ||
|
||
LOGGER = get_logger() | ||
|
||
router = routers.DefaultRouter() | ||
router.include_format_suffixes = False | ||
|
||
router.register("admin/system_tasks", TaskViewSet, basename="admin_system_tasks") | ||
router.register("admin/apps", AppsViewSet, basename="apps") | ||
|
||
router.register("core/authenticated_sessions", AuthenticatedSessionViewSet) | ||
router.register("core/applications", ApplicationViewSet) | ||
router.register("core/groups", GroupViewSet) | ||
router.register("core/users", UserViewSet) | ||
router.register("core/user_consent", UserConsentViewSet) | ||
router.register("core/tokens", TokenViewSet) | ||
router.register("core/tenants", TenantViewSet) | ||
|
||
router.register("outposts/instances", OutpostViewSet) | ||
router.register("outposts/service_connections/all", ServiceConnectionViewSet) | ||
router.register("outposts/service_connections/docker", DockerServiceConnectionViewSet) | ||
router.register("outposts/service_connections/kubernetes", KubernetesServiceConnectionViewSet) | ||
router.register("outposts/proxy", ProxyOutpostConfigViewSet) | ||
router.register("outposts/ldap", LDAPOutpostConfigViewSet) | ||
router.register("outposts/radius", RadiusOutpostConfigViewSet) | ||
|
||
router.register("flows/instances", FlowViewSet) | ||
router.register("flows/bindings", FlowStageBindingViewSet) | ||
|
||
router.register("crypto/certificatekeypairs", CertificateKeyPairViewSet) | ||
|
||
router.register("events/events", EventViewSet) | ||
router.register("events/notifications", NotificationViewSet) | ||
router.register("events/transports", NotificationTransportViewSet) | ||
router.register("events/rules", NotificationRuleViewSet) | ||
|
||
router.register("managed/blueprints", BlueprintInstanceViewSet) | ||
|
||
router.register("sources/all", SourceViewSet) | ||
router.register("sources/user_connections/all", UserSourceConnectionViewSet) | ||
router.register("sources/user_connections/oauth", UserOAuthSourceConnectionViewSet) | ||
router.register("sources/user_connections/plex", PlexSourceConnectionViewSet) | ||
router.register("sources/user_connections/saml", UserSAMLSourceConnectionViewSet) | ||
router.register("sources/ldap", LDAPSourceViewSet) | ||
router.register("sources/saml", SAMLSourceViewSet) | ||
router.register("sources/oauth", OAuthSourceViewSet) | ||
router.register("sources/plex", PlexSourceViewSet) | ||
|
||
router.register("policies/all", PolicyViewSet) | ||
router.register("policies/bindings", PolicyBindingViewSet) | ||
router.register("policies/expression", ExpressionPolicyViewSet) | ||
router.register("policies/event_matcher", EventMatcherPolicyViewSet) | ||
router.register("policies/password_expiry", PasswordExpiryPolicyViewSet) | ||
router.register("policies/password", PasswordPolicyViewSet) | ||
router.register("policies/reputation/scores", ReputationViewSet) | ||
router.register("policies/reputation", ReputationPolicyViewSet) | ||
|
||
router.register("providers/all", ProviderViewSet) | ||
router.register("providers/ldap", LDAPProviderViewSet) | ||
router.register("providers/proxy", ProxyProviderViewSet) | ||
router.register("providers/oauth2", OAuth2ProviderViewSet) | ||
router.register("providers/saml", SAMLProviderViewSet) | ||
router.register("providers/scim", SCIMProviderViewSet) | ||
router.register("providers/radius", RadiusProviderViewSet) | ||
|
||
router.register("oauth2/authorization_codes", AuthorizationCodeViewSet) | ||
router.register("oauth2/refresh_tokens", RefreshTokenViewSet) | ||
router.register("oauth2/access_tokens", AccessTokenViewSet) | ||
|
||
router.register("propertymappings/all", PropertyMappingViewSet) | ||
router.register("propertymappings/ldap", LDAPPropertyMappingViewSet) | ||
router.register("propertymappings/saml", SAMLPropertyMappingViewSet) | ||
router.register("propertymappings/scope", ScopeMappingViewSet) | ||
router.register("propertymappings/notification", NotificationWebhookMappingViewSet) | ||
router.register("propertymappings/scim", SCIMMappingViewSet) | ||
|
||
router.register("authenticators/all", DeviceViewSet, basename="device") | ||
router.register("authenticators/duo", DuoDeviceViewSet) | ||
router.register("authenticators/sms", SMSDeviceViewSet) | ||
router.register("authenticators/static", StaticDeviceViewSet) | ||
router.register("authenticators/totp", TOTPDeviceViewSet) | ||
router.register("authenticators/webauthn", WebAuthnDeviceViewSet) | ||
router.register( | ||
"authenticators/admin/all", | ||
AdminDeviceViewSet, | ||
basename="admin-device", | ||
) | ||
router.register( | ||
"authenticators/admin/duo", | ||
DuoAdminDeviceViewSet, | ||
basename="admin-duodevice", | ||
) | ||
router.register( | ||
"authenticators/admin/sms", | ||
SMSAdminDeviceViewSet, | ||
basename="admin-smsdevice", | ||
) | ||
router.register( | ||
"authenticators/admin/static", | ||
StaticAdminDeviceViewSet, | ||
basename="admin-staticdevice", | ||
) | ||
router.register("authenticators/admin/totp", TOTPAdminDeviceViewSet, basename="admin-totpdevice") | ||
router.register( | ||
"authenticators/admin/webauthn", | ||
WebAuthnAdminDeviceViewSet, | ||
basename="admin-webauthndevice", | ||
) | ||
|
||
router.register("stages/all", StageViewSet) | ||
router.register("stages/authenticator/duo", AuthenticatorDuoStageViewSet) | ||
router.register("stages/authenticator/sms", AuthenticatorSMSStageViewSet) | ||
router.register("stages/authenticator/static", AuthenticatorStaticStageViewSet) | ||
router.register("stages/authenticator/totp", AuthenticatorTOTPStageViewSet) | ||
router.register("stages/authenticator/validate", AuthenticatorValidateStageViewSet) | ||
router.register("stages/authenticator/webauthn", AuthenticateWebAuthnStageViewSet) | ||
router.register("stages/captcha", CaptchaStageViewSet) | ||
router.register("stages/consent", ConsentStageViewSet) | ||
router.register("stages/deny", DenyStageViewSet) | ||
router.register("stages/email", EmailStageViewSet) | ||
router.register("stages/identification", IdentificationStageViewSet) | ||
router.register("stages/invitation/invitations", InvitationViewSet) | ||
router.register("stages/invitation/stages", InvitationStageViewSet) | ||
router.register("stages/password", PasswordStageViewSet) | ||
router.register("stages/prompt/prompts", PromptViewSet) | ||
router.register("stages/prompt/stages", PromptStageViewSet) | ||
router.register("stages/user_delete", UserDeleteStageViewSet) | ||
router.register("stages/user_login", UserLoginStageViewSet) | ||
router.register("stages/user_logout", UserLogoutStageViewSet) | ||
router.register("stages/user_write", UserWriteStageViewSet) | ||
_other_urls = [] | ||
for _authentik_app in get_apps(): | ||
try: | ||
api_urls = import_module(f"{_authentik_app.name}.urls") | ||
except ModuleNotFoundError: | ||
continue | ||
if not hasattr(api_urls, "api_urlpatterns"): | ||
continue | ||
urls: list = getattr(api_urls, "api_urlpatterns") | ||
for url in urls: | ||
if isinstance(url, URLPattern): | ||
_other_urls.append(url) | ||
else: | ||
router.register(*url) | ||
LOGGER.debug( | ||
"Mounted API URLs", | ||
app_name=_authentik_app.name, | ||
) | ||
|
||
router.register("stages/dummy", DummyStageViewSet) | ||
router.register("policies/dummy", DummyPolicyViewSet) | ||
|
||
urlpatterns = ( | ||
[ | ||
path("", APIBrowserView.as_view(), name="schema-browser"), | ||
] | ||
+ router.urls | ||
+ _other_urls | ||
+ [ | ||
path( | ||
"admin/metrics/", | ||
AdministrationMetricsViewSet.as_view(), | ||
name="admin_metrics", | ||
), | ||
path("admin/version/", VersionView.as_view(), name="admin_version"), | ||
path("admin/workers/", WorkerView.as_view(), name="admin_workers"), | ||
path("admin/system/", SystemView.as_view(), name="admin_system"), | ||
path("root/config/", ConfigView.as_view(), name="config"), | ||
path( | ||
"flows/executor/<slug:flow_slug>/", | ||
FlowExecutorView.as_view(), | ||
name="flow-executor", | ||
), | ||
path( | ||
"flows/inspector/<slug:flow_slug>/", | ||
FlowInspectorView.as_view(), | ||
name="flow-inspector", | ||
), | ||
path("schema/", cache_page(86400)(SpectacularAPIView.as_view()), name="schema"), | ||
] | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
"""API URLs""" | ||
from authentik.blueprints.api import BlueprintInstanceViewSet | ||
|
||
api_urlpatterns = [ | ||
("managed/blueprints", BlueprintInstanceViewSet), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
"""API URLs""" | ||
from authentik.crypto.api import CertificateKeyPairViewSet | ||
|
||
api_urlpatterns = [ | ||
("crypto/certificatekeypairs", CertificateKeyPairViewSet), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
"""API URLs""" | ||
from authentik.events.api.events import EventViewSet | ||
from authentik.events.api.notification_mappings import NotificationWebhookMappingViewSet | ||
from authentik.events.api.notification_rules import NotificationRuleViewSet | ||
from authentik.events.api.notification_transports import NotificationTransportViewSet | ||
from authentik.events.api.notifications import NotificationViewSet | ||
|
||
api_urlpatterns = [ | ||
("events/events", EventViewSet), | ||
("events/notifications", NotificationViewSet), | ||
("events/transports", NotificationTransportViewSet), | ||
("events/rules", NotificationRuleViewSet), | ||
("propertymappings/notification", NotificationWebhookMappingViewSet), | ||
] |
Oops, something went wrong.