UNPKG

@keycloakify/keycloak-admin-ui

Version:
82 lines 6.22 kB
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import { HelpItem, KeycloakSelect, NumberControl, SelectVariant, } from "../../ui-shared"; import { ActionGroup, Button, FormGroup, SelectOption, } from "@patternfly/react-core"; import { useEffect, useState } from "react"; import { FormProvider, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { FormAccess } from "../../components/form/FormAccess"; import { convertToFormValues } from "../../util"; import { Time } from "../../realm-settings/security-defences/Time"; export const BruteForceDetection = ({ realm, save, }) => { const { t } = useTranslation(); const form = useForm(); const { setValue, handleSubmit, formState: { isDirty }, } = form; const [isBruteForceModeOpen, setIsBruteForceModeOpen] = useState(false); const [isBruteForceModeUpdated, setIsBruteForceModeUpdated] = useState(false); let BruteForceMode; (function (BruteForceMode) { BruteForceMode["Disabled"] = "Disabled"; BruteForceMode["PermanentLockout"] = "PermanentLockout"; BruteForceMode["TemporaryLockout"] = "TemporaryLockout"; BruteForceMode["PermanentAfterTemporaryLockout"] = "PermanentAfterTemporaryLockout"; })(BruteForceMode || (BruteForceMode = {})); const bruteForceModes = [ BruteForceMode.Disabled, BruteForceMode.PermanentLockout, BruteForceMode.TemporaryLockout, BruteForceMode.PermanentAfterTemporaryLockout, ]; const setupForm = () => { convertToFormValues(realm, setValue); setIsBruteForceModeUpdated(false); }; useEffect(setupForm, []); const bruteForceMode = (() => { if (!form.getValues("bruteForceProtected")) { return BruteForceMode.Disabled; } if (!form.getValues("permanentLockout")) { return BruteForceMode.TemporaryLockout; } return form.getValues("maxTemporaryLockouts") == 0 ? BruteForceMode.PermanentLockout : BruteForceMode.PermanentAfterTemporaryLockout; })(); return (_jsx(FormProvider, { ...form, children: _jsxs(FormAccess, { role: "manage-realm", isHorizontal: true, onSubmit: handleSubmit(save), children: [_jsx(FormGroup, { label: t("bruteForceMode"), fieldId: "kc-brute-force-mode", labelIcon: _jsx(HelpItem, { helpText: t("bruteForceModeHelpText"), fieldLabelId: "bruteForceMode" }), children: _jsx(KeycloakSelect, { toggleId: "kc-brute-force-mode", onToggle: () => setIsBruteForceModeOpen(!isBruteForceModeOpen), onSelect: (value) => { switch (value) { case BruteForceMode.Disabled: form.setValue("bruteForceProtected", false); form.setValue("permanentLockout", false); form.setValue("maxTemporaryLockouts", 0); break; case BruteForceMode.TemporaryLockout: form.setValue("bruteForceProtected", true); form.setValue("permanentLockout", false); form.setValue("maxTemporaryLockouts", 0); break; case BruteForceMode.PermanentLockout: form.setValue("bruteForceProtected", true); form.setValue("permanentLockout", true); form.setValue("maxTemporaryLockouts", 0); break; case BruteForceMode.PermanentAfterTemporaryLockout: form.setValue("bruteForceProtected", true); form.setValue("permanentLockout", true); form.setValue("maxTemporaryLockouts", 1); break; } setIsBruteForceModeUpdated(true); setIsBruteForceModeOpen(false); }, selections: bruteForceMode, variant: SelectVariant.single, isOpen: isBruteForceModeOpen, "data-testid": "select-brute-force-mode", "aria-label": t("selectUnmanagedAttributePolicy"), children: bruteForceModes.map((mode) => (_jsx(SelectOption, { value: mode, children: t(`bruteForceMode.${mode}`) }, mode))) }) }), bruteForceMode !== BruteForceMode.Disabled && (_jsxs(_Fragment, { children: [_jsx(NumberControl, { name: "failureFactor", label: t("failureFactor"), labelIcon: t("failureFactorHelp"), controller: { defaultValue: 0, rules: { required: t("required") }, } }), bruteForceMode === BruteForceMode.PermanentAfterTemporaryLockout && (_jsx(NumberControl, { name: "maxTemporaryLockouts", label: t("maxTemporaryLockouts"), labelIcon: t("maxTemporaryLockoutsHelp"), controller: { defaultValue: 0, } })), (bruteForceMode === BruteForceMode.TemporaryLockout || bruteForceMode === BruteForceMode.PermanentAfterTemporaryLockout) && (_jsxs(_Fragment, { children: [_jsx(Time, { name: "waitIncrementSeconds" }), _jsx(Time, { name: "maxFailureWaitSeconds" }), _jsx(Time, { name: "maxDeltaTimeSeconds" })] })), _jsx(NumberControl, { name: "quickLoginCheckMilliSeconds", label: t("quickLoginCheckMilliSeconds"), labelIcon: t("quickLoginCheckMilliSecondsHelp"), controller: { defaultValue: 0, } }), _jsx(Time, { name: "minimumQuickLoginWaitSeconds" })] })), _jsxs(ActionGroup, { children: [_jsx(Button, { variant: "primary", type: "submit", "data-testid": "brute-force-tab-save", isDisabled: !isDirty && !isBruteForceModeUpdated, children: t("save") }), _jsx(Button, { variant: "link", onClick: setupForm, children: t("revert") })] })] }) })); }; //# sourceMappingURL=BruteForceDetection.js.map