UNPKG

@keycloakify/keycloak-admin-ui

Version:
69 lines 4.39 kB
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { AlertVariant, Button, ButtonVariant, Flex, FlexItem, Form, FormGroup, Modal, ModalVariant, Radio, Split, SplitItem, Text, TextContent, Title, } from "@patternfly/react-core"; import { saveAs } from "file-saver"; import { useState } from "react"; import { FormProvider, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { HelpItem } from "../../ui-shared"; import { useAdminClient } from "../../admin-client"; import { useAlerts } from "../../ui-shared"; import { Certificate } from "../../clients/keys/Certificate"; import { KeyForm } from "../../clients/keys/GenerateKeyDialog"; export const submitForm = async (adminClient, form, id, attr, callback) => { try { const formData = new FormData(); const { file, ...rest } = form; Object.entries(rest).map(([key, value]) => formData.append(key === "format" ? "keystoreFormat" : key, value.toString())); formData.append("file", file); await adminClient.clients.uploadKey({ id, attr }, formData); callback(); } catch (error) { callback(error); } }; export const SamlKeysDialog = ({ id, attr, onClose, onCancel, }) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const [type, setType] = useState(false); const [keys, setKeys] = useState(); const form = useForm({ mode: "onChange" }); const { handleSubmit, formState: { isValid }, } = form; const { addAlert, addError } = useAlerts(); const submit = (form) => { submitForm(adminClient, form, id, attr, (error) => { if (error) { addError("importError", error); } else { addAlert(t("importSuccess"), AlertVariant.success); } }); }; const generate = async () => { try { const key = await adminClient.clients.generateKey({ id, attr, }); setKeys(key); saveAs(new Blob([key.privateKey], { type: "application/octet-stream", }), "private.key"); addAlert(t("generateSuccess"), AlertVariant.success); } catch (error) { addError("generateError", error); } }; return (_jsx(Modal, { variant: ModalVariant.medium, "aria-label": t("enableClientSignatureRequiredModal"), header: _jsxs(TextContent, { children: [_jsx(Title, { headingLevel: "h1", children: t("enableClientSignatureRequired") }), _jsx(Text, { children: t("enableClientSignatureRequiredExplain") })] }), isOpen: true, onClose: onClose, actions: [ _jsx(Button, { id: "modal-confirm", "data-testid": "confirm", variant: "primary", isDisabled: !isValid && !keys, onClick: () => { if (type) { handleSubmit(submit)(); } onClose(); }, children: t("confirm") }, "confirm"), _jsx(Button, { id: "modal-cancel", "data-testid": "cancel", variant: ButtonVariant.link, onClick: onCancel, children: t("cancel") }, "cancel"), ], children: _jsxs(FormProvider, { ...form, children: [_jsxs(Form, { isHorizontal: true, children: [_jsx(FormGroup, { label: t("selectMethod"), fieldId: "selectMethod", hasNoPaddingTop: true, children: _jsxs(Flex, { children: [_jsx(FlexItem, { children: _jsx(Radio, { isChecked: !type, name: "selectMethodType", onChange: () => setType(false), label: t("selectMethodType.generate"), id: "selectMethodType-generate" }) }), _jsx(FlexItem, { children: _jsx(Radio, { isChecked: type, name: "selectMethodType", onChange: () => setType(true), label: t("selectMethodType.import"), id: "selectMethodType-import" }) })] }) }), !type && (_jsx(FormGroup, { label: t("certificate"), fieldId: "certificate", labelIcon: _jsx(HelpItem, { helpText: t("certificateHelp"), fieldLabelId: "certificate" }), children: _jsxs(Split, { hasGutter: true, children: [_jsx(SplitItem, { isFilled: true, children: _jsx(Certificate, { plain: true, keyInfo: keys }) }), _jsx(SplitItem, { children: _jsx(Button, { variant: "secondary", "data-testid": "generate", onClick: generate, children: t("generate") }) })] }) }))] }), type && _jsx(KeyForm, { useFile: true })] }) })); }; //# sourceMappingURL=SamlKeysDialog.js.map