diff --git a/authentik/outposts/api/outposts.py b/authentik/outposts/api/outposts.py index f011b9242..742e526db 100644 --- a/authentik/outposts/api/outposts.py +++ b/authentik/outposts/api/outposts.py @@ -15,6 +15,7 @@ from authentik.core.api.used_by import UsedByMixin from authentik.core.api.utils import PassiveSerializer, is_dict from authentik.core.models import Provider from authentik.outposts.api.service_connections import ServiceConnectionSerializer +from authentik.outposts.managed import MANAGED_OUTPOST from authentik.outposts.models import Outpost, OutpostConfig, OutpostType, default_outpost_config from authentik.providers.ldap.models import LDAPProvider from authentik.providers.proxy.models import ProxyProvider @@ -24,8 +25,10 @@ class OutpostSerializer(ModelSerializer): """Outpost Serializer""" config = JSONField(validators=[is_dict], source="_config") + # Need to set allow_empty=True for the embedded outpost with no providers + # is checked for other providers in the API Viewset providers = PrimaryKeyRelatedField( - allow_empty=False, + allow_empty=True, many=True, queryset=Provider.objects.select_subclasses().all(), ) @@ -49,6 +52,10 @@ class OutpostSerializer(ModelSerializer): f"{provider.__class__.__name__} providers." ) ) + if self.instance and self.instance.managed == MANAGED_OUTPOST: + return providers + if len(providers) < 1: + raise ValidationError("This list may not be empty.") return providers def validate_config(self, config) -> dict: diff --git a/web/src/pages/outposts/OutpostForm.ts b/web/src/pages/outposts/OutpostForm.ts index 6cfbdc9e9..f4fcd69e6 100644 --- a/web/src/pages/outposts/OutpostForm.ts +++ b/web/src/pages/outposts/OutpostForm.ts @@ -15,6 +15,9 @@ export class OutpostForm extends ModelForm { @property() type: OutpostTypeEnum = OutpostTypeEnum.Proxy; + @property({type: Boolean}) + embedded: boolean = false; + loadInstance(pk: string): Promise { return new OutpostsApi(DEFAULT_CONFIG) .outpostsInstancesRetrieve({ @@ -161,7 +164,11 @@ export class OutpostForm extends ModelForm { >.

- + diff --git a/web/src/pages/outposts/OutpostListPage.ts b/web/src/pages/outposts/OutpostListPage.ts index f6205c1b7..a03644c95 100644 --- a/web/src/pages/outposts/OutpostListPage.ts +++ b/web/src/pages/outposts/OutpostListPage.ts @@ -80,7 +80,12 @@ export class OutpostListPage extends TablePage { html` ${t`Update`} ${t`Update Outpost`} - + +