import React from "react"; import { useFormContext } from "react-hook-form"; import { FormGroup, TextInput, Title } from "@patternfly/react-core"; import { HelpItem } from "../../components/help-enabler/HelpItem"; import { useTranslation } from "react-i18next"; import { useAdminClient } from "../../context/auth/AdminClient"; import type IdentityProviderRepresentation from "@keycloak/keycloak-admin-client/lib/defs/identityProviderRepresentation"; import { FileUploadForm } from "../../components/json-file-upload/FileUploadForm"; import { useRealm } from "../../context/realm-context/RealmContext"; import { DescriptorSettings } from "./DescriptorSettings"; import { getBaseUrl } from "../../util"; import { DiscoveryEndpointField } from "../component/DiscoveryEndpointField"; import environment from "../../environment"; export const SamlConnectSettings = () => { const { t } = useTranslation("identity-providers"); const id = "saml"; const adminClient = useAdminClient(); const { realm } = useRealm(); const { setValue, register, errors, setError, clearErrors } = 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( `${getBaseUrl( adminClient )}admin/realms/${realm}/identity-provider/import-config`, { method: "POST", body: formData, headers: { Authorization: `bearer ${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("common:required")} validated={errors.config?.entityId ? "error" : "default"} > } validated={errors.discoveryError ? "error" : "default"} helperTextInvalid={errors.discoveryError?.message} > fileUpload(value)} /> } > {(readonly) => } ); };