include root URL in API
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
4698194a4a
commit
f1426be34c
|
@ -1,7 +1,10 @@
|
||||||
"""SCIMSource API Views"""
|
"""SCIMSource API Views"""
|
||||||
|
from django.urls import reverse_lazy
|
||||||
|
from rest_framework.fields import SerializerMethodField
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
from authentik.core.api.sources import SourceSerializer
|
from authentik.core.api.sources import SourceSerializer
|
||||||
|
from authentik.core.api.tokens import TokenSerializer
|
||||||
from authentik.core.api.used_by import UsedByMixin
|
from authentik.core.api.used_by import UsedByMixin
|
||||||
from authentik.core.models import USER_ATTRIBUTE_SA, Token, TokenIntents, User
|
from authentik.core.models import USER_ATTRIBUTE_SA, Token, TokenIntents, User
|
||||||
from authentik.sources.scim.models import SCIMSource
|
from authentik.sources.scim.models import SCIMSource
|
||||||
|
@ -10,6 +13,19 @@ from authentik.sources.scim.models import SCIMSource
|
||||||
class SCIMSourceSerializer(SourceSerializer):
|
class SCIMSourceSerializer(SourceSerializer):
|
||||||
"""SCIMSource Serializer"""
|
"""SCIMSource Serializer"""
|
||||||
|
|
||||||
|
root_url = SerializerMethodField()
|
||||||
|
token_obj = TokenSerializer(source="token", required=False, read_only=True)
|
||||||
|
|
||||||
|
def get_root_url(self, instance: SCIMSource) -> str:
|
||||||
|
"""Get Root URL"""
|
||||||
|
relative_url = reverse_lazy(
|
||||||
|
"authentik_sources_scim:v2-root",
|
||||||
|
kwargs={"source_slug": instance.slug},
|
||||||
|
)
|
||||||
|
if "request" not in self.context:
|
||||||
|
return relative_url
|
||||||
|
return self.context["request"].build_absolute_uri(relative_url)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
instance: SCIMSource = super().create(validated_data)
|
instance: SCIMSource = super().create(validated_data)
|
||||||
identifier = f"ak-source-scim-{instance.pk}"
|
identifier = f"ak-source-scim-{instance.pk}"
|
||||||
|
@ -32,7 +48,7 @@ class SCIMSourceSerializer(SourceSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
||||||
model = SCIMSource
|
model = SCIMSource
|
||||||
fields = SourceSerializer.Meta.fields + ["token"]
|
fields = SourceSerializer.Meta.fields + ["token", "root_url", "token_obj"]
|
||||||
|
|
||||||
|
|
||||||
class SCIMSourceViewSet(UsedByMixin, ModelViewSet):
|
class SCIMSourceViewSet(UsedByMixin, ModelViewSet):
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
|
||||||
from authentik.sources.scim.views.v2 import (
|
from authentik.sources.scim.views.v2 import (
|
||||||
|
base,
|
||||||
groups,
|
groups,
|
||||||
resource_types,
|
resource_types,
|
||||||
schemas,
|
schemas,
|
||||||
|
@ -10,6 +11,11 @@ from authentik.sources.scim.views.v2 import (
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path(
|
||||||
|
"<slug:source_slug>/v2",
|
||||||
|
base.SCIMRootView.as_view(),
|
||||||
|
name="v2-root",
|
||||||
|
),
|
||||||
path(
|
path(
|
||||||
"<slug:source_slug>/v2/Users",
|
"<slug:source_slug>/v2/Users",
|
||||||
users.UsersView.as_view(),
|
users.UsersView.as_view(),
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
from rest_framework.parsers import JSONParser
|
from rest_framework.parsers import JSONParser
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.renderers import JSONRenderer
|
from rest_framework.renderers import JSONRenderer
|
||||||
|
from rest_framework.request import Request
|
||||||
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
from authentik.sources.scim.views.v2.auth import SCIMTokenAuth
|
from authentik.sources.scim.views.v2.auth import SCIMTokenAuth
|
||||||
|
@ -28,3 +30,10 @@ class SCIMView(APIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
parser_classes = [SCIMParser]
|
parser_classes = [SCIMParser]
|
||||||
renderer_classes = [SCIMRenderer]
|
renderer_classes = [SCIMRenderer]
|
||||||
|
|
||||||
|
|
||||||
|
class SCIMRootView(SCIMView):
|
||||||
|
"""Root SCIM View"""
|
||||||
|
|
||||||
|
def dispatch(self, request: Request, *args, **kwargs) -> Response:
|
||||||
|
return Response({"message": "Use this base-URL with an SCIM-compatible system."})
|
||||||
|
|
Reference in New Issue