import type IdentityProviderRepresentation from "@keycloak/keycloak-admin-client/lib/defs/identityProviderRepresentation"; import { FormGroup, Title } from "@patternfly/react-core"; import { useFormContext } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { HelpItem } from "ui-shared"; import { adminClient } from "../../admin-client"; import { FileUploadForm } from "../../components/json-file-upload/FileUploadForm"; import { KeycloakTextInput } from "../../components/keycloak-text-input/KeycloakTextInput"; import { useRealm } from "../../context/realm-context/RealmContext"; import environment from "../../environment"; import { addTrailingSlash } from "../../util"; import { getAuthorizationHeaders } from "../../utils/getAuthorizationHeaders"; import { DiscoveryEndpointField } from "../component/DiscoveryEndpointField"; import { DescriptorSettings } from "./DescriptorSettings"; type FormFields = IdentityProviderRepresentation & { discoveryError: string; }; export const SamlConnectSettings = () => { const { t } = useTranslation(); const id = "saml"; const { realm } = useRealm(); const { setValue, register, setError, clearErrors, formState: { errors }, } = useFormContext(); const setupForm = (result: IdentityProviderRepresentation) => { Object.entries(result).map(([key, value]) => setValue(`config.${key}`, value), ); }; const fileUpload = async (xml: string) => { clearErrors("discoveryError"); if (!xml) { return; } const formData = new FormData(); formData.append("providerId", id); formData.append("file", new Blob([xml])); try { const response = await fetch( `${addTrailingSlash( adminClient.baseUrl, )}admin/realms/${realm}/identity-provider/import-config`, { method: "POST", body: formData, headers: getAuthorizationHeaders(await adminClient.getAccessToken()), }, ); if (response.ok) { const result = await response.json(); setupForm(result); } else { setError("discoveryError", { type: "manual", message: response.statusText, }); } } catch (error) { setError("discoveryError", { type: "manual", message: (error as Error).message, }); } }; return ( <> {t("samlSettings")} } isRequired helperTextInvalid={t("required")} validated={errors.config?.entityId ? "error" : "default"} > } validated={errors.discoveryError ? "error" : "default"} helperTextInvalid={errors.discoveryError?.message} > fileUpload(value)} /> } > {(readonly) => } ); };