authentik.enterprise.stages.source.api

Source Stage API Views

 1"""Source Stage API Views"""
 2
 3from rest_framework.exceptions import ValidationError
 4from rest_framework.viewsets import ModelViewSet
 5
 6from authentik.core.api.used_by import UsedByMixin
 7from authentik.core.models import Source
 8from authentik.enterprise.api import EnterpriseRequiredMixin
 9from authentik.enterprise.stages.source.models import SourceStage
10from authentik.flows.api.stages import StageSerializer
11
12
13class SourceStageSerializer(EnterpriseRequiredMixin, StageSerializer):
14    """SourceStage Serializer"""
15
16    def validate_source(self, _source: Source) -> Source:
17        """Ensure configured source supports web-based login"""
18        source = Source.objects.filter(pk=_source.pk).select_subclasses().first()
19        if not source:
20            raise ValidationError("Invalid source")
21        if "request" in self.context:
22            login_button = source.ui_login_button(self.context["request"])
23            if not login_button:
24                raise ValidationError(
25                    "Invalid source selected, only web-based sources are supported."
26                )
27        return source
28
29    class Meta:
30        model = SourceStage
31        fields = StageSerializer.Meta.fields + ["source", "resume_timeout"]
32
33
34class SourceStageViewSet(UsedByMixin, ModelViewSet):
35    """SourceStage Viewset"""
36
37    queryset = SourceStage.objects.all()
38    serializer_class = SourceStageSerializer
39    filterset_fields = "__all__"
40    ordering = ["name"]
41    search_fields = ["name"]
14class SourceStageSerializer(EnterpriseRequiredMixin, StageSerializer):
15    """SourceStage Serializer"""
16
17    def validate_source(self, _source: Source) -> Source:
18        """Ensure configured source supports web-based login"""
19        source = Source.objects.filter(pk=_source.pk).select_subclasses().first()
20        if not source:
21            raise ValidationError("Invalid source")
22        if "request" in self.context:
23            login_button = source.ui_login_button(self.context["request"])
24            if not login_button:
25                raise ValidationError(
26                    "Invalid source selected, only web-based sources are supported."
27                )
28        return source
29
30    class Meta:
31        model = SourceStage
32        fields = StageSerializer.Meta.fields + ["source", "resume_timeout"]

SourceStage Serializer

def validate_source( self, _source: authentik.core.models.Source) -> authentik.core.models.Source:
17    def validate_source(self, _source: Source) -> Source:
18        """Ensure configured source supports web-based login"""
19        source = Source.objects.filter(pk=_source.pk).select_subclasses().first()
20        if not source:
21            raise ValidationError("Invalid source")
22        if "request" in self.context:
23            login_button = source.ui_login_button(self.context["request"])
24            if not login_button:
25                raise ValidationError(
26                    "Invalid source selected, only web-based sources are supported."
27                )
28        return source

Ensure configured source supports web-based login

class SourceStageSerializer.Meta:
30    class Meta:
31        model = SourceStage
32        fields = StageSerializer.Meta.fields + ["source", "resume_timeout"]
fields = ['pk', 'name', 'component', 'verbose_name', 'verbose_name_plural', 'meta_model_name', 'flow_set', 'source', 'resume_timeout']
class SourceStageViewSet(authentik.core.api.used_by.UsedByMixin, rest_framework.viewsets.ModelViewSet):
35class SourceStageViewSet(UsedByMixin, ModelViewSet):
36    """SourceStage Viewset"""
37
38    queryset = SourceStage.objects.all()
39    serializer_class = SourceStageSerializer
40    filterset_fields = "__all__"
41    ordering = ["name"]
42    search_fields = ["name"]

SourceStage Viewset

queryset = <InheritanceQuerySet []>
serializer_class = <class 'SourceStageSerializer'>
filterset_fields = '__all__'
ordering = ['name']
search_fields = ['name']
name = None
description = None
suffix = None
detail = None
basename = None