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