api: create dedicated api for cached flows and policies
This commit is contained in:
parent
9e33b49d29
commit
cf46ee06b7
|
@ -19,8 +19,6 @@ class AdministrationOverviewSerializer(Serializer):
|
|||
version = SerializerMethodField()
|
||||
version_latest = SerializerMethodField()
|
||||
worker_count = SerializerMethodField()
|
||||
cached_policies = SerializerMethodField()
|
||||
cached_flows = SerializerMethodField()
|
||||
|
||||
def get_version(self, _) -> str:
|
||||
"""Get current version"""
|
||||
|
@ -38,14 +36,6 @@ class AdministrationOverviewSerializer(Serializer):
|
|||
"""Ping workers"""
|
||||
return len(CELERY_APP.control.ping(timeout=0.5))
|
||||
|
||||
def get_cached_policies(self, _) -> int:
|
||||
"""Get cached policy count"""
|
||||
return len(cache.keys("policy_*"))
|
||||
|
||||
def get_cached_flows(self, _) -> int:
|
||||
"""Get cached flow count"""
|
||||
return len(cache.keys("flow_*"))
|
||||
|
||||
def create(self, request: Request) -> Response:
|
||||
raise NotImplementedError
|
||||
|
||||
|
@ -54,12 +44,12 @@ class AdministrationOverviewSerializer(Serializer):
|
|||
|
||||
|
||||
class AdministrationOverviewViewSet(ViewSet):
|
||||
"""Return single instance of AdministrationOverviewSerializer"""
|
||||
"""General overview information about authentik."""
|
||||
|
||||
permission_classes = [IsAdminUser]
|
||||
|
||||
@swagger_auto_schema(responses={200: AdministrationOverviewSerializer(many=True)})
|
||||
def list(self, request: Request) -> Response:
|
||||
"""Return single instance of AdministrationOverviewSerializer"""
|
||||
"""General overview information about authentik."""
|
||||
serializer = AdministrationOverviewSerializer(True)
|
||||
return Response(serializer.data)
|
||||
|
|
|
@ -19,13 +19,13 @@ from authentik.core.api.sources import SourceViewSet
|
|||
from authentik.core.api.tokens import TokenViewSet
|
||||
from authentik.core.api.users import UserViewSet
|
||||
from authentik.crypto.api import CertificateKeyPairViewSet
|
||||
from authentik.flows.api import FlowStageBindingViewSet, FlowViewSet, StageViewSet
|
||||
from authentik.flows.api import FlowStageBindingViewSet, FlowViewSet, StageViewSet, FlowCacheViewSet
|
||||
from authentik.outposts.api import (
|
||||
DockerServiceConnectionViewSet,
|
||||
KubernetesServiceConnectionViewSet,
|
||||
OutpostViewSet,
|
||||
)
|
||||
from authentik.policies.api import PolicyBindingViewSet, PolicyViewSet
|
||||
from authentik.policies.api import PolicyBindingViewSet, PolicyViewSet, PolicyCacheViewSet
|
||||
from authentik.policies.dummy.api import DummyPolicyViewSet
|
||||
from authentik.policies.expiry.api import PasswordExpiryPolicyViewSet
|
||||
from authentik.policies.expression.api import ExpressionPolicyViewSet
|
||||
|
@ -82,6 +82,7 @@ router.register(
|
|||
router.register("outposts/proxy", ProxyOutpostConfigViewSet)
|
||||
|
||||
router.register("flows/instances", FlowViewSet)
|
||||
router.register("flows/cached", FlowCacheViewSet, basename="flows_cache")
|
||||
router.register("flows/bindings", FlowStageBindingViewSet)
|
||||
|
||||
router.register("crypto/certificatekeypairs", CertificateKeyPairViewSet)
|
||||
|
@ -94,6 +95,7 @@ router.register("sources/saml", SAMLSourceViewSet)
|
|||
router.register("sources/oauth", OAuthSourceViewSet)
|
||||
|
||||
router.register("policies/all", PolicyViewSet)
|
||||
router.register("policies/cached", PolicyCacheViewSet, basename="policies_cache")
|
||||
router.register("policies/bindings", PolicyBindingViewSet)
|
||||
router.register("policies/expression", ExpressionPolicyViewSet)
|
||||
router.register("policies/group_membership", GroupMembershipPolicyViewSet)
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
"""Flow API Views"""
|
||||
from django.core.cache import cache
|
||||
from rest_framework.serializers import ModelSerializer, SerializerMethodField
|
||||
from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
|
||||
from rest_framework.mixins import ListModelMixin
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.serializers import ModelSerializer, Serializer, SerializerMethodField
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet, ReadOnlyModelViewSet
|
||||
|
||||
from authentik.flows.models import Flow, FlowStageBinding, Stage
|
||||
from authentik.flows.planner import cache_key
|
||||
|
@ -98,3 +101,14 @@ class FlowStageBindingViewSet(ModelViewSet):
|
|||
queryset = FlowStageBinding.objects.all()
|
||||
serializer_class = FlowStageBindingSerializer
|
||||
filterset_fields = "__all__"
|
||||
|
||||
|
||||
class FlowCacheViewSet(ListModelMixin, GenericViewSet):
|
||||
"""Info about cached flows"""
|
||||
|
||||
queryset = Flow.objects.none()
|
||||
serializer_class = Serializer
|
||||
|
||||
def list(self, request: Request) -> Response:
|
||||
"""Info about cached flows"""
|
||||
return Response(data={"pagination": {"count": len(cache.keys("flow_*"))}})
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
"""policy API Views"""
|
||||
from django.core.cache import cache
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from drf_yasg2.utils import swagger_auto_schema
|
||||
from rest_framework.mixins import ListModelMixin
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.serializers import (
|
||||
ModelSerializer,
|
||||
PrimaryKeyRelatedField,
|
||||
PrimaryKeyRelatedField, Serializer,
|
||||
SerializerMethodField,
|
||||
)
|
||||
from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet, ReadOnlyModelViewSet
|
||||
|
||||
from authentik.policies.forms import GENERAL_FIELDS
|
||||
from authentik.policies.models import Policy, PolicyBinding, PolicyBindingModel
|
||||
|
@ -102,3 +107,14 @@ class PolicyBindingViewSet(ModelViewSet):
|
|||
serializer_class = PolicyBindingSerializer
|
||||
filterset_fields = ["policy", "target", "enabled", "order", "timeout"]
|
||||
search_fields = ["policy__name"]
|
||||
|
||||
|
||||
class PolicyCacheViewSet(ListModelMixin, GenericViewSet):
|
||||
"""Info about cached policies"""
|
||||
|
||||
queryset = Policy.objects.none()
|
||||
serializer_class = Serializer
|
||||
|
||||
def list(self, request: Request) -> Response:
|
||||
"""Info about cached policies"""
|
||||
return Response(data={"pagination": {"count": len(cache.keys("policy_*"))}})
|
||||
|
|
Reference in New Issue