@keycloakify/keycloak-admin-ui
Version:
Repackaged Keycloak Admin UI
69 lines • 4.39 kB
JavaScript
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