* preview Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * web/admin: show provider page on application page Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * use oauth2 end session url instead of direct interface Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * dont show provider page on application page for now Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * add UI for preview Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * translate and release notes Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * fix lint Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * separate saml api files Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * add api tests Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
"""SAMLSource API Views"""
|
|
from django.urls import reverse
|
|
from drf_spectacular.utils import extend_schema
|
|
from rest_framework.decorators import action
|
|
from rest_framework.request import Request
|
|
from rest_framework.response import Response
|
|
from rest_framework.viewsets import ModelViewSet
|
|
|
|
from authentik.core.api.sources import SourceSerializer
|
|
from authentik.core.api.used_by import UsedByMixin
|
|
from authentik.providers.saml.api.providers import SAMLMetadataSerializer
|
|
from authentik.sources.saml.models import SAMLSource
|
|
from authentik.sources.saml.processors.metadata import MetadataProcessor
|
|
|
|
|
|
class SAMLSourceSerializer(SourceSerializer):
|
|
"""SAMLSource Serializer"""
|
|
|
|
class Meta:
|
|
|
|
model = SAMLSource
|
|
fields = SourceSerializer.Meta.fields + [
|
|
"pre_authentication_flow",
|
|
"issuer",
|
|
"sso_url",
|
|
"slo_url",
|
|
"allow_idp_initiated",
|
|
"name_id_policy",
|
|
"binding_type",
|
|
"signing_kp",
|
|
"digest_algorithm",
|
|
"signature_algorithm",
|
|
"temporary_user_delete_after",
|
|
]
|
|
|
|
|
|
class SAMLSourceViewSet(UsedByMixin, ModelViewSet):
|
|
"""SAMLSource Viewset"""
|
|
|
|
queryset = SAMLSource.objects.all()
|
|
serializer_class = SAMLSourceSerializer
|
|
lookup_field = "slug"
|
|
filterset_fields = [
|
|
"name",
|
|
"slug",
|
|
"enabled",
|
|
"authentication_flow",
|
|
"enrollment_flow",
|
|
"managed",
|
|
"policy_engine_mode",
|
|
"user_matching_mode",
|
|
"pre_authentication_flow",
|
|
"issuer",
|
|
"sso_url",
|
|
"slo_url",
|
|
"allow_idp_initiated",
|
|
"name_id_policy",
|
|
"binding_type",
|
|
"signing_kp",
|
|
"digest_algorithm",
|
|
"signature_algorithm",
|
|
"temporary_user_delete_after",
|
|
]
|
|
search_fields = ["name", "slug"]
|
|
ordering = ["name"]
|
|
|
|
@extend_schema(responses={200: SAMLMetadataSerializer(many=False)})
|
|
@action(methods=["GET"], detail=True)
|
|
# pylint: disable=unused-argument
|
|
def metadata(self, request: Request, slug: str) -> Response:
|
|
"""Return metadata as XML string"""
|
|
source = self.get_object()
|
|
metadata = MetadataProcessor(source, request).build_entity_descriptor()
|
|
return Response(
|
|
{
|
|
"metadata": metadata,
|
|
"download_url": reverse(
|
|
"authentik_sources_saml:metadata",
|
|
kwargs={
|
|
"source_slug": source.slug,
|
|
},
|
|
),
|
|
}
|
|
)
|