import type ResourceServerRepresentation from "@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation"; import { AlertVariant, Button, Divider, FormGroup, PageSection, Radio, } from "@patternfly/react-core"; import { useState } from "react"; import { Controller, FormProvider, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { HelpItem } from "@keycloak/keycloak-ui-shared"; import { useAdminClient } from "../../admin-client"; import { DefaultSwitchControl } from "../../components/SwitchControl"; import { useAlerts } from "../../components/alert/Alerts"; import { FixedButtonsGroup } from "../../components/form/FixedButtonGroup"; import { FormAccess } from "../../components/form/FormAccess"; import { KeycloakSpinner } from "../../components/keycloak-spinner/KeycloakSpinner"; import { useAccess } from "../../context/access/Access"; import { useFetch } from "../../utils/useFetch"; import useToggle from "../../utils/useToggle"; import { DecisionStrategySelect } from "./DecisionStrategySelect"; import { ImportDialog } from "./ImportDialog"; const POLICY_ENFORCEMENT_MODES = [ "ENFORCING", "PERMISSIVE", "DISABLED", ] as const; export type FormFields = Omit< ResourceServerRepresentation, "scopes" | "resources" >; export const AuthorizationSettings = ({ clientId }: { clientId: string }) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const [resource, setResource] = useState(); const [importDialog, toggleImportDialog] = useToggle(); const form = useForm({}); const { control, reset, handleSubmit } = form; const { addAlert, addError } = useAlerts(); const { hasAccess } = useAccess(); const isDisabled = !hasAccess("manage-authorization"); useFetch( () => adminClient.clients.getResourceServer({ id: clientId }), (resource) => { setResource(resource); reset(resource); }, [], ); const importResource = async (value: ResourceServerRepresentation) => { try { await adminClient.clients.importResource({ id: clientId }, value); addAlert(t("importResourceSuccess"), AlertVariant.success); reset({ ...value }); } catch (error) { addError("importResourceError", error); } }; const onSubmit = async (resource: ResourceServerRepresentation) => { try { await adminClient.clients.updateResourceServer( { id: clientId }, resource, ); addAlert(t("updateResourceSuccess"), AlertVariant.success); } catch (error) { addError("resourceSaveError", error); } }; if (!resource) { return ; } return ( {importDialog && ( )} } > } fieldId="policyEnforcementMode" hasNoPaddingTop > ( <> {POLICY_ENFORCEMENT_MODES.map((mode) => ( field.onChange(mode)} label={t(`policyEnforcementModes.${mode}`)} className="pf-v5-u-mb-md" /> ))} )} /> reset(resource)} isActive isSubmit /> ); };