import { RenderFlowOption } from "@goauthentik/admin/flows/utils"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { SentryIgnoredError } from "@goauthentik/common/errors"; import { Form } from "@goauthentik/elements/forms/Form"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/SearchSelect"; import { msg } from "@lit/localize"; import { TemplateResult, html } from "lit"; import { customElement } from "lit/decorators.js"; import { Flow, FlowsApi, FlowsInstancesListDesignationEnum, FlowsInstancesListRequest, ProvidersApi, SAMLProvider, } from "@goauthentik/api"; @customElement("ak-provider-saml-import-form") export class SAMLProviderImportForm extends Form { getSuccessMessage(): string { return msg("Successfully imported provider."); } async send(data: SAMLProvider): Promise { const file = this.getFormFiles()["metadata"]; if (!file) { throw new SentryIgnoredError("No form data"); } return new ProvidersApi(DEFAULT_CONFIG).providersSamlImportMetadataCreate({ file: file, name: data.name, authorizationFlow: data.authorizationFlow || "", }); } renderInlineForm(): TemplateResult { return html` => { const args: FlowsInstancesListRequest = { ordering: "slug", designation: FlowsInstancesListDesignationEnum.Authorization, }; if (query !== undefined) { args.search = query; } const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); return flows.results; }} .renderElement=${(flow: Flow): string => { return RenderFlowOption(flow); }} .renderDescription=${(flow: Flow): TemplateResult => { return html`${flow.name}`; }} .value=${(flow: Flow | undefined): string | undefined => { return flow?.slug; }} >

${msg("Flow used when authorizing this provider.")}

`; } }