/* eslint-disable */ // @ts-nocheck import type RealmRepresentation from "@keycloak/keycloak-admin-client/lib/defs/realmRepresentation"; import { HelpItem, KeycloakSelect, NumberControl, SelectVariant, SelectControl, } from "../../../shared/keycloak-ui-shared"; import { ActionGroup, Button, FormGroup, SelectOption, } from "../../../shared/@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 "./Time"; type BruteForceDetectionProps = { realm: RealmRepresentation; save: (realm: RealmRepresentation) => void; }; export const BruteForceDetection = ({ realm, save, }: BruteForceDetectionProps) => { const { t } = useTranslation(); const form = useForm(); const { setValue, handleSubmit, formState: { isDirty }, } = form; const [isBruteForceModeOpen, setIsBruteForceModeOpen] = useState(false); const [isBruteForceModeUpdated, setIsBruteForceModeUpdated] = useState(false); enum BruteForceMode { Disabled = "Disabled", PermanentLockout = "PermanentLockout", TemporaryLockout = "TemporaryLockout", PermanentAfterTemporaryLockout = "PermanentAfterTemporaryLockout", } const bruteForceModes = [ BruteForceMode.Disabled, BruteForceMode.PermanentLockout, BruteForceMode.TemporaryLockout, BruteForceMode.PermanentAfterTemporaryLockout, ]; const bruteForceStrategyTypes = ["MULTIPLE", "LINEAR"]; const setupForm = () => { convertToFormValues(realm, setValue); setIsBruteForceModeUpdated(false); }; useEffect(setupForm, [realm]); 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 ( } > setIsBruteForceModeOpen(!isBruteForceModeOpen)} onSelect={(value) => { switch (value as BruteForceMode) { 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")} > {bruteForceModes.map((mode) => ( {t(`bruteForceMode.${mode}`)} ))} {bruteForceMode !== BruteForceMode.Disabled && ( <> {bruteForceMode === BruteForceMode.PermanentAfterTemporaryLockout && ( )} {(bruteForceMode === BruteForceMode.TemporaryLockout || bruteForceMode === BruteForceMode.PermanentAfterTemporaryLockout) && ( <> ({ key, value: t(`bruteForceStrategy.${key}`), }))} /> ); };