/* eslint-disable */ // @ts-nocheck import type ClientRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientRepresentation"; import { HelpItem, SelectControl } from "../../../shared/keycloak-ui-shared"; import { Checkbox, FormGroup, Grid, GridItem, InputGroup, InputGroupItem, Switch, } from "../../../shared/@patternfly/react-core"; import { Controller, useFormContext } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { DefaultSwitchControl } from "../../components/SwitchControl"; import { FormAccess } from "../../components/form/FormAccess"; import { convertAttributeNameToForm } from "../../util"; import useIsFeatureEnabled, { Feature } from "../../utils/useIsFeatureEnabled"; import { FormFields } from "../ClientDetails"; import { IdentityProviderSelect } from "../../components/identity-provider/IdentityProviderSelect"; import { IdentityProviderType } from "@keycloak/keycloak-admin-client/lib/defs/identityProviderRepresentation"; import { useAccess } from "../../context/access/Access"; import { useRealm } from "../../context/realm-context/RealmContext"; type CapabilityConfigProps = { unWrap?: boolean; protocol?: string; }; export const CapabilityConfig = ({ unWrap, protocol: type, }: CapabilityConfigProps) => { const { t } = useTranslation(); const { control, watch, setValue } = useFormContext(); const protocol = type || watch("protocol"); const clientAuthentication = watch("publicClient"); const authorization = watch("authorizationServicesEnabled"); const pkceCodeChallengeMethodField = convertAttributeNameToForm( "attributes.pkce.code.challenge.method", ); const pkceEnabled = watch(pkceCodeChallengeMethodField); const jwtAuthorizationGrantEnabled = watch( convertAttributeNameToForm( "attributes.oauth2.jwt.authorization.grant.enabled", ), false, ); const externalTokenEnabled = watch( convertAttributeNameToForm("attributes.external.token.enabled"), false, ); const isFeatureEnabled = useIsFeatureEnabled(); const { hasSomeAccess } = useAccess(); const { realmRepresentation } = useRealm(); const showIdentityProviders = hasSomeAccess("view-identity-providers"); // Mirror the gate in ClientDetails: only expose the SSF capability // toggle when both the server feature is enabled and the realm has // opted in. Otherwise enabling the toggle would just render a tab // that crashes on its first API call. const showSsfReceiverToggle = isFeatureEnabled(Feature.Ssf) && realmRepresentation.attributes?.["ssf.transmitterEnabled"] === "true"; return ( {protocol === "openid-connect" && ( <> } > ( { field.onChange(!value); if (!value) { setValue("authorizationServicesEnabled", false); setValue("serviceAccountsEnabled", false); setValue( convertAttributeNameToForm( "attributes.oidc.ciba.grant.enabled", ), false, ); setValue( convertAttributeNameToForm( "attributes.standard.token.exchange.enabled", ), false, ); setValue( convertAttributeNameToForm( "attributes.oauth2.jwt.authorization.grant.enabled", ), false, ); setValue( convertAttributeNameToForm( "attributes.ssf.enabled", ), false, ); } }} aria-label={t("clientAuthentication")} /> )} /> } > ( { field.onChange(value); if (value) { setValue("serviceAccountsEnabled", true); } }} isDisabled={clientAuthentication} aria-label={t("clientAuthorization")} /> )} /> ( )} /> ( )} /> ( )} /> ( )} /> {isFeatureEnabled(Feature.StandardTokenExchangeV2) && ( >("attributes.standard.token.exchange.enabled")} defaultValue={false} control={control} render={({ field }) => ( )} /> )} {isFeatureEnabled(Feature.JWTAuthorizationGrant) && ( >("attributes.oauth2.jwt.authorization.grant.enabled")} defaultValue={false} control={control} render={({ field }) => ( )} /> )} {isFeatureEnabled(Feature.DeviceFlow) && ( >("attributes.oauth2.device.authorization.grant.enabled")} defaultValue={false} control={control} render={({ field }) => ( )} /> )} ( "attributes.oidc.ciba.grant.enabled", )} defaultValue={false} control={control} render={({ field }) => ( )} /> } > ( field.onChange(checked ? "S256" : "") } aria-label={t("pkceRequired")} /> )} /> {pkceEnabled && pkceEnabled !== "" && ( )} {isFeatureEnabled(Feature.JWTAuthorizationGrant) && showIdentityProviders && jwtAuthorizationGrantEnabled.toString() === "true" && ( ( "attributes.oauth2.jwt.authorization.grant.idp", )} label={t("jwtAuthorizationGrantIdp")} helpText={t("jwtAuthorizationGrantIdpHelp")} convertToName={convertAttributeNameToForm} identityProviderType={ IdentityProviderType.JWT_AUTHORIZATION_GRANT } isDisabled={clientAuthentication} realmOnly stringify /> )} {isFeatureEnabled(Feature.DPoP) && ( ( "attributes.dpop.bound.access.tokens", )} label={t("oAuthDPoP")} labelIcon={t("oAuthDPoPHelp")} stringify /> )} {isFeatureEnabled(Feature.IdentityBrokeringAPIV2) && !clientAuthentication && ( <> ( "attributes.external.token.enabled", )} label={t("externalTokenEnabled")} labelIcon={t("externalTokenEnabledHelp")} stringify /> {showIdentityProviders && externalTokenEnabled?.toString() === "true" && ( ( "attributes.external.token.idp", )} label={t("externalTokenIdp")} helpText={t("externalTokenIdpHelp")} convertToName={convertAttributeNameToForm} identityProviderType={IdentityProviderType.ANY} realmOnly stringify /> )} )} {!clientAuthentication && showSsfReceiverToggle && ( ( "attributes.ssf.enabled", )} label={t("ssfReceiverEnabled")} labelIcon={t("ssfReceiverEnabledHelp")} stringify /> )} )} {protocol === "saml" && ( <> ( "attributes.saml.encrypt", )} label={t("encryptAssertions")} labelIcon={t("encryptAssertionsHelp")} /> ( "attributes.saml.client.signature", )} label={t("clientSignature")} labelIcon={t("clientSignatureHelp")} /> )} ); };