import "@goauthentik/admin/flows/BoundStagesList"; import "@goauthentik/admin/flows/FlowDiagram"; import "@goauthentik/admin/flows/FlowForm"; import "@goauthentik/admin/policies/BoundPoliciesList"; import { AndNext, DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { AKElement } from "@goauthentik/elements/Base"; import "@goauthentik/elements/PageHeader"; import "@goauthentik/elements/Tabs"; import "@goauthentik/elements/buttons/SpinnerButton"; import "@goauthentik/elements/events/ObjectChangelog"; import { t } from "@lingui/macro"; import { CSSResult, TemplateResult, css, html } from "lit"; import { customElement, property } from "lit/decorators.js"; import AKGlobal from "@goauthentik/common/styles/authentik.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFCard from "@patternfly/patternfly/components/Card/card.css"; import PFContent from "@patternfly/patternfly/components/Content/content.css"; import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css"; import PFPage from "@patternfly/patternfly/components/Page/page.css"; import PFGrid from "@patternfly/patternfly/layouts/Grid/grid.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { Flow, FlowsApi, ResponseError } from "@goauthentik/api"; @customElement("ak-flow-view") export class FlowViewPage extends AKElement { @property() set flowSlug(value: string) { new FlowsApi(DEFAULT_CONFIG) .flowsInstancesRetrieve({ slug: value, }) .then((flow) => { this.flow = flow; }); } @property({ attribute: false }) flow!: Flow; static get styles(): CSSResult[] { return [ PFBase, PFPage, PFDescriptionList, PFButton, PFCard, PFContent, PFGrid, AKGlobal, ].concat( css` img.pf-icon { max-height: 24px; } ak-tabs { height: 100%; } `, ); } render(): TemplateResult { if (!this.flow) { return html``; } return html` ${t`Related actions`} ${t`Edit`} ${t`Update`} ${t`Update Flow`} ${t`Edit`} ${t`Execute flow`} { const finalURL = `${ window.location.origin }/if/flow/${this.flow.slug}/${AndNext( `${window.location.pathname}#${window.location.hash}`, )}`; window.open(finalURL, "_blank"); }} > ${t`Normal`} { new FlowsApi(DEFAULT_CONFIG) .flowsInstancesExecuteRetrieve({ slug: this.flow.slug, }) .then((link) => { const finalURL = `${ link.link }${AndNext( `${window.location.pathname}#${window.location.hash}`, )}`; window.open(finalURL, "_blank"); }); }} > ${t`with current user`} { new FlowsApi(DEFAULT_CONFIG) .flowsInstancesExecuteRetrieve({ slug: this.flow.slug, }) .then((link) => { const finalURL = `${ link.link }?${encodeURI( `inspector&next=/#${window.location.hash}`, )}`; window.open(finalURL, "_blank"); }) .catch((exc: ResponseError) => { // This request can return a HTTP 400 when a flow // is not applicable. window.open( exc.response.url, "_blank", ); }); }} > ${t`with inspector`} ${t`Export flow`} ${t`Export`} ${t`Diagram`} ${t`Changelog`} ${t`These bindings control which users can access this flow.`} `; } }