import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { first } from "@goauthentik/common/utils"; import "@goauthentik/elements/CodeMirror"; import { CodeMirrorMode } from "@goauthentik/elements/CodeMirror"; import { Form } from "@goauthentik/elements/forms/Form"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/SearchSelect"; import YAML from "yaml"; import { msg } from "@lit/localize"; import { TemplateResult, html, nothing } from "lit"; import { customElement, property } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { CoreApi, CoreGroupsListRequest, CoreUsersListRequest, Group, PropertyMapping, PropertyMappingTestRequest, PropertyMappingTestResult, PropertymappingsApi, RbacPermissionsAssignedByUsersListModelEnum, User, } from "@goauthentik/api"; @customElement("ak-property-mapping-test-form") export class PolicyTestForm extends Form { @property({ attribute: false }) mapping?: PropertyMapping; @property({ attribute: false }) result?: PropertyMappingTestResult; @property({ attribute: false }) request?: PropertyMappingTestRequest; getSuccessMessage(): string { return msg("Successfully sent test-request."); } async send(data: PropertyMappingTestRequest): Promise { this.request = data; const result = await new PropertymappingsApi(DEFAULT_CONFIG).propertymappingsAllTestCreate({ pmUuid: this.mapping?.pk || "", propertyMappingTestRequest: data, formatResult: true, }); return (this.result = result); } renderResult(): TemplateResult { return html` ${this.result?.successful ? html` ` : html`
${this.result?.result}
`}
`; } renderExampleButtons() { return this.mapping?.metaModelName === RbacPermissionsAssignedByUsersListModelEnum.AuthentikSourcesLdapLdapsourcepropertymapping ? html`

${msg("Example context data")}

${this.renderExampleLDAP()}` : nothing; } renderExampleLDAP(): TemplateResult { return html` `; } renderForm(): TemplateResult { return html` => { const args: CoreUsersListRequest = { ordering: "username", }; if (query !== undefined) { args.search = query; } const users = await new CoreApi(DEFAULT_CONFIG).coreUsersList(args); return users.results; }} .renderElement=${(user: User): string => { return user.username; }} .renderDescription=${(user: User): TemplateResult => { return html`${user.name}`; }} .value=${(user: User | undefined): number | undefined => { return user?.pk; }} .selected=${(user: User): boolean => { return this.request?.user?.toString() === user.pk.toString(); }} > => { const args: CoreGroupsListRequest = { ordering: "name", }; if (query !== undefined) { args.search = query; } const groups = await new CoreApi(DEFAULT_CONFIG).coreGroupsList(args); return groups.results; }} .renderElement=${(group: Group): string => { return group.name; }} .value=${(group: Group | undefined): string | undefined => { return group?.pk; }} .selected=${(group: Group): boolean => { return this.request?.group?.toString() === group.pk.toString(); }} >

${this.renderExampleButtons()}

${this.result ? this.renderResult() : html``}`; } } declare global { interface HTMLElementTagNameMap { "ak-property-mapping-test-form": PolicyTestForm; } }