UNPKG

@keycloakify/keycloak-admin-ui

Version:
67 lines 4.73 kB
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { TextControl, useAlerts, useFetch } from "../../ui-shared"; import { ActionGroup, AlertVariant, Button, Card, CardBody, CardHeader, CardTitle, PageSection, Text, TextContent, } from "@patternfly/react-core"; import { saveAs } from "file-saver"; import { useState } from "react"; import { useFormContext, useWatch } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useAdminClient } from "../../admin-client"; import { FormAccess } from "../../components/form/FormAccess"; import { DefaultSwitchControl } from "../../components/SwitchControl"; import { convertAttributeNameToForm } from "../../util"; import useToggle from "../../utils/useToggle"; import { Certificate } from "../../clients/keys/Certificate"; import { GenerateKeyDialog, getFileExtension } from "../../clients/keys/GenerateKeyDialog"; import { ImportKeyDialog } from "../../clients/keys/ImportKeyDialog"; const attr = "jwt.credential"; export const Keys = ({ clientId, save, hasConfigureAccess }) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const { control, getValues, formState: { isDirty }, } = useFormContext(); const { addAlert, addError } = useAlerts(); const [keyInfo, setKeyInfo] = useState(); const [openGenerateKeys, toggleOpenGenerateKeys, setOpenGenerateKeys] = useToggle(); const [openImportKeys, toggleOpenImportKeys, setOpenImportKeys] = useToggle(); const [key, setKey] = useState(0); const refresh = () => setKey(key + 1); const useJwksUrl = useWatch({ control, name: convertAttributeNameToForm("attributes.use.jwks.url"), defaultValue: "false", }); useFetch(() => adminClient.clients.getKeyInfo({ id: clientId, attr }), (info) => setKeyInfo(info), [key]); const generate = async (config) => { var _a; try { const keyStore = await adminClient.clients.generateAndDownloadKey({ id: clientId, attr, }, config); saveAs(new Blob([keyStore], { type: "application/octet-stream" }), `keystore.${getFileExtension((_a = config.format) !== null && _a !== void 0 ? _a : "")}`); addAlert(t("generateSuccess"), AlertVariant.success); refresh(); } catch (error) { addError("generateError", error); } }; const importKey = async (importFile) => { try { const formData = new FormData(); const { file, ...rest } = importFile; for (const [key, value] of Object.entries(rest)) { formData.append(key, value); } formData.append("file", file.value); await adminClient.clients.uploadCertificate({ id: clientId, attr }, formData); addAlert(t("importSuccess"), AlertVariant.success); refresh(); } catch (error) { addError("importError", error); } }; return (_jsxs(PageSection, { variant: "light", className: "keycloak__form", children: [openGenerateKeys && (_jsx(GenerateKeyDialog, { clientId: getValues("clientId"), toggleDialog: toggleOpenGenerateKeys, save: generate })), openImportKeys && (_jsx(ImportKeyDialog, { toggleDialog: toggleOpenImportKeys, save: importKey })), _jsxs(Card, { isFlat: true, children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t("jwksUrlConfig") }) }), _jsx(CardBody, { children: _jsx(TextContent, { children: _jsx(Text, { children: t("keysIntro") }) }) }), _jsx(CardBody, { children: _jsxs(FormAccess, { role: "manage-clients", fineGrainedAccess: hasConfigureAccess, isHorizontal: true, children: [_jsx(DefaultSwitchControl, { name: convertAttributeNameToForm("attributes.use.jwks.url"), label: t("useJwksUrl"), labelIcon: t("useJwksUrlHelp"), stringify: true }), useJwksUrl !== "true" && (keyInfo ? (_jsx(Certificate, { plain: true, keyInfo: keyInfo })) : ("No client certificate configured")), useJwksUrl === "true" && (_jsx(TextControl, { name: convertAttributeNameToForm("attributes.jwks.url"), label: t("jwksUrl"), labelIcon: t("jwksUrlHelp"), type: "url" })), _jsxs(ActionGroup, { children: [_jsx(Button, { "data-testid": "saveKeys", onClick: save, isDisabled: !isDirty, children: t("save") }), _jsx(Button, { "data-testid": "generate", variant: "secondary", onClick: () => setOpenGenerateKeys(true), children: t("generateNewKeys") }), _jsx(Button, { "data-testid": "import", variant: "secondary", onClick: () => setOpenImportKeys(true), isDisabled: useJwksUrl === "true", children: t("import") })] })] }) })] })] })); }; //# sourceMappingURL=Keys.js.map