import "@goauthentik/admin/common/ak-crypto-certificate-search"; import "@goauthentik/admin/common/ak-flow-search/ak-flow-search"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import "@goauthentik/elements/ak-dual-select/ak-dual-select-dynamic-selected-provider.js"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/Radio"; import "@goauthentik/elements/forms/SearchSelect"; import "@goauthentik/elements/utils/TimeDeltaHelp"; import { msg } from "@lit/localize"; import { html, nothing } from "lit"; import { ifDefined } from "lit/directives/if-defined.js"; import { FlowsInstancesListDesignationEnum, PropertymappingsApi, PropertymappingsProviderSamlListRequest, SAMLPropertyMapping, SAMLProvider, SpBindingEnum, ValidationError, } from "@goauthentik/api"; import { propertyMappingsProvider, propertyMappingsSelector } from "./SAMLProviderFormHelpers.js"; import { digestAlgorithmOptions, signatureAlgorithmOptions } from "./SAMLProviderOptions"; const serviceProviderBindingOptions = [ { label: msg("Redirect"), value: SpBindingEnum.Redirect, default: true, }, { label: msg("Post"), value: SpBindingEnum.Post, }, ]; function renderHasSigningKp(provider?: Partial) { return html` `; } export function renderForm( provider: Partial = {}, errors: ValidationError, setHasSigningKp: (ev: InputEvent) => void, hasSigningKp: boolean, ) { return html`

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

${msg("Protocol settings")}
${msg("Advanced flow settings")}

${msg( "Flow used when a user access this provider and is not authenticated.", )}

${msg("Flow used when logging out of this provider.")}

${msg("Advanced protocol settings")}

${msg( "Certificate used to sign outgoing Responses going to the Service Provider.", )}

${hasSigningKp ? renderHasSigningKp(provider) : nothing}

${msg( "When selected, incoming assertion's Signatures will be validated against this certificate. To allow unsigned Requests, leave on default.", )}

${msg("When selected, assertions will be encrypted using this keypair.")}

=> { const args: PropertymappingsProviderSamlListRequest = { ordering: "saml_name", }; if (query !== undefined) { args.search = query; } const items = await new PropertymappingsApi( DEFAULT_CONFIG, ).propertymappingsProviderSamlList(args); return items.results; }} .renderElement=${(item: SAMLPropertyMapping): string => { return item.name; }} .value=${(item: SAMLPropertyMapping | undefined): string | undefined => { return item?.pk; }} .selected=${(item: SAMLPropertyMapping): boolean => { return provider?.nameIdMapping === item.pk; }} ?blankable=${true} >

${msg( "Configure how the NameID value will be created. When left empty, the NameIDPolicy of the incoming request will be respected.", )}

`; }