outposts: allow empty provider list for embedded provider
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
e02207f38d
commit
b36a3100e6
|
@ -15,6 +15,7 @@ from authentik.core.api.used_by import UsedByMixin
|
||||||
from authentik.core.api.utils import PassiveSerializer, is_dict
|
from authentik.core.api.utils import PassiveSerializer, is_dict
|
||||||
from authentik.core.models import Provider
|
from authentik.core.models import Provider
|
||||||
from authentik.outposts.api.service_connections import ServiceConnectionSerializer
|
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.outposts.models import Outpost, OutpostConfig, OutpostType, default_outpost_config
|
||||||
from authentik.providers.ldap.models import LDAPProvider
|
from authentik.providers.ldap.models import LDAPProvider
|
||||||
from authentik.providers.proxy.models import ProxyProvider
|
from authentik.providers.proxy.models import ProxyProvider
|
||||||
|
@ -24,8 +25,10 @@ class OutpostSerializer(ModelSerializer):
|
||||||
"""Outpost Serializer"""
|
"""Outpost Serializer"""
|
||||||
|
|
||||||
config = JSONField(validators=[is_dict], source="_config")
|
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(
|
providers = PrimaryKeyRelatedField(
|
||||||
allow_empty=False,
|
allow_empty=True,
|
||||||
many=True,
|
many=True,
|
||||||
queryset=Provider.objects.select_subclasses().all(),
|
queryset=Provider.objects.select_subclasses().all(),
|
||||||
)
|
)
|
||||||
|
@ -49,6 +52,10 @@ class OutpostSerializer(ModelSerializer):
|
||||||
f"{provider.__class__.__name__} providers."
|
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
|
return providers
|
||||||
|
|
||||||
def validate_config(self, config) -> dict:
|
def validate_config(self, config) -> dict:
|
||||||
|
|
|
@ -15,6 +15,9 @@ export class OutpostForm extends ModelForm<Outpost, string> {
|
||||||
@property()
|
@property()
|
||||||
type: OutpostTypeEnum = OutpostTypeEnum.Proxy;
|
type: OutpostTypeEnum = OutpostTypeEnum.Proxy;
|
||||||
|
|
||||||
|
@property({type: Boolean})
|
||||||
|
embedded: boolean = false;
|
||||||
|
|
||||||
loadInstance(pk: string): Promise<Outpost> {
|
loadInstance(pk: string): Promise<Outpost> {
|
||||||
return new OutpostsApi(DEFAULT_CONFIG)
|
return new OutpostsApi(DEFAULT_CONFIG)
|
||||||
.outpostsInstancesRetrieve({
|
.outpostsInstancesRetrieve({
|
||||||
|
@ -161,7 +164,11 @@ export class OutpostForm extends ModelForm<Outpost, string> {
|
||||||
>.
|
>.
|
||||||
</p>
|
</p>
|
||||||
</ak-form-element-horizontal>
|
</ak-form-element-horizontal>
|
||||||
<ak-form-element-horizontal label=${t`Providers`} ?required=${true} name="providers">
|
<ak-form-element-horizontal
|
||||||
|
label=${t`Providers`}
|
||||||
|
?required=${!this.embedded}
|
||||||
|
name="providers"
|
||||||
|
>
|
||||||
<select class="pf-c-form-control" multiple>
|
<select class="pf-c-form-control" multiple>
|
||||||
${until(this.renderProviders(), html`<option>${t`Loading...`}</option>`)}
|
${until(this.renderProviders(), html`<option>${t`Loading...`}</option>`)}
|
||||||
</select>
|
</select>
|
||||||
|
|
|
@ -80,7 +80,12 @@ export class OutpostListPage extends TablePage<Outpost> {
|
||||||
html`<ak-forms-modal>
|
html`<ak-forms-modal>
|
||||||
<span slot="submit"> ${t`Update`} </span>
|
<span slot="submit"> ${t`Update`} </span>
|
||||||
<span slot="header"> ${t`Update Outpost`} </span>
|
<span slot="header"> ${t`Update Outpost`} </span>
|
||||||
<ak-outpost-form slot="form" .instancePk=${item.pk}> </ak-outpost-form>
|
<ak-outpost-form
|
||||||
|
slot="form"
|
||||||
|
.instancePk=${item.pk}
|
||||||
|
.embedded=${item.managed === "goauthentik.io/outposts/embedded"}
|
||||||
|
>
|
||||||
|
</ak-outpost-form>
|
||||||
<button slot="trigger" class="pf-c-button pf-m-plain">
|
<button slot="trigger" class="pf-c-button pf-m-plain">
|
||||||
<i class="fas fa-edit"></i>
|
<i class="fas fa-edit"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
Reference in a new issue