
* remove pyright Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove pylint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * replace pylint with ruff Signed-off-by: Jens Langhammer <jens@goauthentik.io> * ruff fix Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix UP038 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ012 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix default arg Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix UP031 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename stage type to view Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ008 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining upgrade Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLR2004 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix B904 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLW2901 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining issues Signed-off-by: Jens Langhammer <jens@goauthentik.io> * prevent ruff from breaking the code Signed-off-by: Jens Langhammer <jens@goauthentik.io> * stages/prompt: refactor field building Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fully remove isort Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
"""Apply Blueprint meta model"""
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from rest_framework.exceptions import ValidationError
|
|
from rest_framework.fields import BooleanField
|
|
from structlog.stdlib import get_logger
|
|
|
|
from authentik.blueprints.v1.meta.registry import BaseMetaModel, MetaResult, registry
|
|
from authentik.core.api.utils import JSONDictField, PassiveSerializer
|
|
|
|
if TYPE_CHECKING:
|
|
from authentik.blueprints.models import BlueprintInstance
|
|
|
|
LOGGER = get_logger()
|
|
|
|
|
|
class ApplyBlueprintMetaSerializer(PassiveSerializer):
|
|
"""Serializer for meta apply blueprint model"""
|
|
|
|
identifiers = JSONDictField()
|
|
required = BooleanField(default=True)
|
|
|
|
# We cannot override `instance` as that will confuse rest_framework
|
|
# and make it attempt to update the instance
|
|
blueprint_instance: "BlueprintInstance"
|
|
|
|
def validate(self, attrs):
|
|
from authentik.blueprints.models import BlueprintInstance
|
|
|
|
identifiers = attrs["identifiers"]
|
|
required = attrs["required"]
|
|
instance = BlueprintInstance.objects.filter(**identifiers).first()
|
|
if not instance and required:
|
|
raise ValidationError({"identifiers": "Required blueprint does not exist"})
|
|
self.blueprint_instance = instance
|
|
return super().validate(attrs)
|
|
|
|
def create(self, validated_data: dict) -> MetaResult:
|
|
from authentik.blueprints.v1.tasks import apply_blueprint
|
|
|
|
if not self.blueprint_instance:
|
|
LOGGER.info("Blueprint does not exist, but not required")
|
|
return MetaResult()
|
|
LOGGER.debug("Applying blueprint from meta model", blueprint=self.blueprint_instance)
|
|
|
|
apply_blueprint(str(self.blueprint_instance.pk))
|
|
return MetaResult()
|
|
|
|
|
|
@registry.register("metaapplyblueprint")
|
|
class MetaApplyBlueprint(BaseMetaModel):
|
|
"""Meta model to apply another blueprint"""
|
|
|
|
@staticmethod
|
|
def serializer() -> ApplyBlueprintMetaSerializer:
|
|
return ApplyBlueprintMetaSerializer
|
|
|
|
class Meta:
|
|
abstract = True
|