import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { docLink } from "@goauthentik/common/global"; import { groupBy } from "@goauthentik/common/utils"; import "@goauthentik/elements/CodeMirror"; import "@goauthentik/elements/SearchSelect"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; import YAML from "yaml"; import { t } from "@lingui/macro"; import { TemplateResult, html } from "lit"; import { customElement, property } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { until } from "lit/directives/until.js"; import { Outpost, OutpostTypeEnum, OutpostsApi, OutpostsServiceConnectionsAllListRequest, ProvidersApi, ServiceConnection, } from "@goauthentik/api"; @customElement("ak-outpost-form") export class OutpostForm extends ModelForm { @property() type: OutpostTypeEnum = OutpostTypeEnum.Proxy; @property({ type: Boolean }) embedded = false; loadInstance(pk: string): Promise { return new OutpostsApi(DEFAULT_CONFIG) .outpostsInstancesRetrieve({ uuid: pk, }) .then((o) => { this.type = o.type || OutpostTypeEnum.Proxy; return o; }); } getSuccessMessage(): string { if (this.instance) { return t`Successfully updated outpost.`; } else { return t`Successfully created outpost.`; } } send = (data: Outpost): Promise => { if (this.instance) { return new OutpostsApi(DEFAULT_CONFIG).outpostsInstancesUpdate({ uuid: this.instance.pk || "", outpostRequest: data, }); } else { return new OutpostsApi(DEFAULT_CONFIG).outpostsInstancesCreate({ outpostRequest: data, }); } }; renderProviders(): Promise { switch (this.type) { case OutpostTypeEnum.Proxy: return new ProvidersApi(DEFAULT_CONFIG) .providersProxyList({ ordering: "name", applicationIsnull: false, }) .then((providers) => { return providers.results.map((provider) => { const selected = Array.from(this.instance?.providers || []).some( (sp) => { return sp == provider.pk; }, ); return html``; }); }); case OutpostTypeEnum.Ldap: return new ProvidersApi(DEFAULT_CONFIG) .providersLdapList({ ordering: "name", applicationIsnull: false, }) .then((providers) => { return providers.results.map((provider) => { const selected = Array.from(this.instance?.providers || []).some( (sp) => { return sp == provider.pk; }, ); return html``; }); }); } } renderForm(): TemplateResult { return html`
=> { const args: OutpostsServiceConnectionsAllListRequest = { ordering: "name", }; if (query !== undefined) { args.search = query; } const items = await new OutpostsApi( DEFAULT_CONFIG, ).outpostsServiceConnectionsAllList(args); return items.results; }} .renderElement=${(item: ServiceConnection): string => { return item.name; }} .value=${(item: ServiceConnection | undefined): string | undefined => { return item?.pk; }} .groupBy=${(items: ServiceConnection[]) => { return groupBy(items, (item) => item.verboseName); }} .selected=${(item: ServiceConnection, items: ServiceConnection[]): boolean => { let selected = this.instance?.serviceConnection === sc.pk; if (items.length === 1 && !this.instance) { selected = true; } return selected; }} ?blankable=${true} >

${t`Selecting an integration enables the management of the outpost by authentik.`}

See documentation.

${t`You can only select providers that match the type of the outpost.`}

${t`Hold control/command to select multiple items.`}

${t`Set custom attributes using YAML or JSON.`}

${t`See more here:`}  ${t`Documentation`}

`; } }