import { PolicyBindingForm } from "@goauthentik/admin/policies/PolicyBindingForm"; import "@goauthentik/admin/policies/dummy/DummyPolicyForm"; import "@goauthentik/admin/policies/event_matcher/EventMatcherPolicyForm"; import "@goauthentik/admin/policies/expiry/ExpiryPolicyForm"; import "@goauthentik/admin/policies/expression/ExpressionPolicyForm"; import "@goauthentik/admin/policies/hibp/HaveIBeenPwnedPolicyForm"; import "@goauthentik/admin/policies/password/PasswordPolicyForm"; import "@goauthentik/admin/policies/reputation/ReputationPolicyForm"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { AKElement } from "@goauthentik/elements/Base"; import "@goauthentik/elements/forms/ProxyForm"; import "@goauthentik/elements/wizard/FormWizardPage"; import { FormWizardPage } from "@goauthentik/elements/wizard/FormWizardPage"; import "@goauthentik/elements/wizard/Wizard"; import { WizardPage } from "@goauthentik/elements/wizard/WizardPage"; import { t } from "@lingui/macro"; import { customElement } from "@lit/reactive-element/decorators/custom-element.js"; import { CSSResult, TemplateResult, html } from "lit"; import { property } from "lit/decorators.js"; import AKGlobal from "@goauthentik/common/styles/authentik.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFForm from "@patternfly/patternfly/components/Form/form.css"; import PFRadio from "@patternfly/patternfly/components/Radio/radio.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { PoliciesApi, Policy, PolicyBinding, TypeCreate } from "@goauthentik/api"; @customElement("ak-policy-wizard-initial") export class InitialPolicyWizardPage extends WizardPage { @property({ attribute: false }) policyTypes: TypeCreate[] = []; static get styles(): CSSResult[] { return [PFBase, PFForm, PFButton, AKGlobal, PFRadio]; } sidebarLabel = () => t`Select type`; render(): TemplateResult { return html`
${this.policyTypes.map((type) => { return html`
{ const idx = this.host.steps.indexOf("initial") + 1; this.host.steps.splice( idx, 0, `type-${type.component}-${type.modelName}`, ); this.host.isValid = true; }} /> ${type.description}
`; })}
`; } } @customElement("ak-policy-wizard") export class PolicyWizard extends AKElement { static get styles(): CSSResult[] { return [PFBase, PFButton, AKGlobal, PFRadio]; } @property() createText = t`Create`; @property({ type: Boolean }) showBindingPage = false; @property() bindingTarget?: string; @property({ attribute: false }) policyTypes: TypeCreate[] = []; firstUpdated(): void { new PoliciesApi(DEFAULT_CONFIG).policiesAllTypesList().then((types) => { this.policyTypes = types; }); } render(): TemplateResult { return html` ${this.policyTypes.map((type) => { return html` t`Create ${type.name}`} > `; })} ${this.showBindingPage ? html` t`Create Binding`} .activePageCallback=${async (context: FormWizardPage) => { const createSlot = context.host.steps[1]; const bindingForm = context.querySelector( "ak-policy-binding-form", ); if (!bindingForm) return; bindingForm.instance = { policy: (context.host.state[createSlot] as Policy).pk, } as PolicyBinding; }} > ` : html``} `; } }