All Downloads are FREE. Search and download functionalities are using the official Maven repository.

theme.keycloak.v2.admin.resources.assets.AuthenticationSection-9ac18881.js.map Maven / Gradle / Ivy

There is a newer version: 25.0.1
Show newest version
{"version":3,"file":"AuthenticationSection-9ac18881.js","sources":["../../../../node_modules/.pnpm/@[email protected][email protected][email protected]/node_modules/@patternfly/react-core/dist/esm/components/InputGroup/InputGroupText.js","../../../../node_modules/.pnpm/@[email protected][email protected][email protected]/node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStatePrimary.js","../../src/authentication/BindFlowDialog.tsx","../../src/authentication/DuplicateFlowModal.tsx","../../src/authentication/RequiredActions.tsx","../../src/authentication/components/UsedBy.tsx","../../src/authentication/policies/CibaPolicy.tsx","../../src/authentication/policies/OtpPolicy.tsx","../../src/authentication/policies/PolicyRow.tsx","../../src/authentication/policies/util.ts","../../src/authentication/policies/PasswordPolicy.tsx","../../src/authentication/policies/WebauthnPolicy.tsx","../../src/authentication/policies/Policies.tsx","../../src/authentication/AuthenticationSection.tsx"],"sourcesContent":["import { __rest } from \"tslib\";\nimport * as React from 'react';\nimport styles from '@patternfly/react-styles/css/components/InputGroup/input-group';\nimport { css } from '@patternfly/react-styles';\nexport var InputGroupTextVariant;\n(function (InputGroupTextVariant) {\n    InputGroupTextVariant[\"default\"] = \"default\";\n    InputGroupTextVariant[\"plain\"] = \"plain\";\n})(InputGroupTextVariant || (InputGroupTextVariant = {}));\nexport const InputGroupText = (_a) => {\n    var { className = '', component = 'span', children, variant = InputGroupTextVariant.default } = _a, props = __rest(_a, [\"className\", \"component\", \"children\", \"variant\"]);\n    const Component = component;\n    return (React.createElement(Component, Object.assign({ className: css(styles.inputGroupText, variant === InputGroupTextVariant.plain && styles.modifiers.plain, className) }, props), children));\n};\nInputGroupText.displayName = 'InputGroupText';\n//# sourceMappingURL=InputGroupText.js.map","import { __rest } from \"tslib\";\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/EmptyState/empty-state';\nexport const EmptyStatePrimary = (_a) => {\n    var { children, className = '' } = _a, props = __rest(_a, [\"children\", \"className\"]);\n    return (React.createElement(\"div\", Object.assign({ className: css(styles.emptyStatePrimary, className) }, props), children));\n};\nEmptyStatePrimary.displayName = 'EmptyStatePrimary';\n//# sourceMappingURL=EmptyStatePrimary.js.map","import type RealmRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/realmRepresentation\";\nimport {\n  AlertVariant,\n  Button,\n  ButtonVariant,\n  Form,\n  FormGroup,\n  Modal,\n  Select,\n  SelectOption,\n  SelectVariant,\n} from \"@patternfly/react-core\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { adminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport useToggle from \"../utils/useToggle\";\nimport { REALM_FLOWS } from \"./AuthenticationSection\";\n\ntype BindingForm = {\n  bindingType: keyof RealmRepresentation;\n};\n\ntype BindFlowDialogProps = {\n  flowAlias: string;\n  onClose: () => void;\n};\n\nexport const BindFlowDialog = ({ flowAlias, onClose }: BindFlowDialogProps) => {\n  const { t } = useTranslation(\"authentication\");\n  const { control, handleSubmit } = useForm();\n  const { addAlert, addError } = useAlerts();\n  const { realm } = useRealm();\n  const [open, toggleOpen] = useToggle();\n\n  const onSubmit = async ({ bindingType }: BindingForm) => {\n    const realmRep = await adminClient.realms.findOne({ realm });\n\n    try {\n      await adminClient.realms.update(\n        { realm },\n        { ...realmRep, [bindingType]: flowAlias },\n      );\n      addAlert(t(\"updateFlowSuccess\"), AlertVariant.success);\n    } catch (error) {\n      addError(\"authentication:updateFlowError\", error);\n    }\n\n    onClose();\n  };\n\n  return (\n    \n          {t(\"common:save\")}\n        ,\n        \n          {t(\"common:cancel\")}\n        ,\n      ]}\n      isOpen\n    >\n      
\n \n (\n {\n field.onChange(value.toString());\n toggleOpen();\n }}\n selections={field.value}\n variant={SelectVariant.single}\n isOpen={open}\n menuAppendTo=\"parent\"\n >\n {[...REALM_FLOWS.keys()]\n .filter((f) => f !== \"dockerAuthenticationFlow\")\n .map((key) => {\n const value = REALM_FLOWS.get(key);\n return (\n \n {t(`flow.${value}`)}\n \n );\n })}\n \n )}\n />\n \n
\n \n );\n};\n","import AuthenticationFlowRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/authenticationFlowRepresentation\";\nimport {\n AlertVariant,\n Button,\n ButtonVariant,\n Form,\n Modal,\n ModalVariant,\n} from \"@patternfly/react-core\";\nimport { useEffect } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigate } from \"react-router-dom\";\n\nimport { adminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { NameDescription } from \"./form/NameDescription\";\nimport { toFlow } from \"./routes/Flow\";\n\ntype DuplicateFlowModalProps = {\n name: string;\n description: string;\n toggleDialog: () => void;\n onComplete: () => void;\n};\n\nexport const DuplicateFlowModal = ({\n name,\n description,\n toggleDialog,\n onComplete,\n}: DuplicateFlowModalProps) => {\n const { t } = useTranslation(\"authentication\");\n const form = useForm({ mode: \"onChange\" });\n const { setValue, getValues, handleSubmit } = form;\n const { addAlert, addError } = useAlerts();\n const navigate = useNavigate();\n const { realm } = useRealm();\n\n useEffect(() => {\n setValue(\"alias\", t(\"copyOf\", { name }));\n setValue(\"description\", description);\n }, [name, description]);\n\n const onSubmit = async () => {\n const form = getValues();\n try {\n await adminClient.authenticationManagement.copyFlow({\n flow: name,\n newName: form.alias!,\n });\n const newFlow = (\n await adminClient.authenticationManagement.getFlows()\n ).find((flow) => flow.alias === form.alias)!;\n\n if (form.description !== description) {\n newFlow.description = form.description;\n await adminClient.authenticationManagement.updateFlow(\n { flowId: newFlow.id! },\n newFlow,\n );\n }\n addAlert(t(\"copyFlowSuccess\"), AlertVariant.success);\n navigate(\n toFlow({\n realm,\n id: newFlow.id!,\n usedBy: \"notInUse\",\n builtIn: newFlow.builtIn ? \"builtIn\" : undefined,\n }),\n );\n } catch (error) {\n addError(\"authentication:copyFlowError\", error);\n }\n onComplete();\n };\n\n return (\n \n {t(\"duplicate\")}\n ,\n \n {t(\"common:cancel\")}\n ,\n ]}\n isOpen\n >\n \n \n \n \n \n \n );\n};\n","import type RequiredActionProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/requiredActionProviderRepresentation\";\nimport type RequiredActionProviderSimpleRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/requiredActionProviderSimpleRepresentation\";\nimport { AlertVariant, Switch } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { adminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { KeycloakSpinner } from \"../components/keycloak-spinner/KeycloakSpinner\";\nimport { toKey } from \"../util\";\nimport { useFetch } from \"../utils/useFetch\";\nimport { DraggableTable } from \"./components/DraggableTable\";\n\ntype DataType = RequiredActionProviderRepresentation &\n RequiredActionProviderSimpleRepresentation;\n\ntype Row = {\n name: string;\n enabled: boolean;\n defaultAction: boolean;\n data: DataType;\n};\n\nexport const RequiredActions = () => {\n const { t } = useTranslation(\"authentication\");\n const { addAlert, addError } = useAlerts();\n\n const [actions, setActions] = useState();\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n useFetch(\n async () => {\n const [requiredActions, unregisteredRequiredActions] = await Promise.all([\n adminClient.authenticationManagement.getRequiredActions(),\n adminClient.authenticationManagement.getUnregisteredRequiredActions(),\n ]);\n return [\n ...requiredActions.map((a) => ({\n name: a.name!,\n enabled: a.enabled!,\n defaultAction: a.defaultAction!,\n data: a,\n })),\n ...unregisteredRequiredActions.map((a) => ({\n name: a.name!,\n enabled: false,\n defaultAction: false,\n data: a,\n })),\n ];\n },\n (actions) => setActions(actions),\n [key],\n );\n\n const isUnregisteredAction = (data: DataType): boolean => {\n return !(\"alias\" in data);\n };\n\n const updateAction = async (\n action: DataType,\n field: \"enabled\" | \"defaultAction\",\n ) => {\n try {\n if (field in action) {\n action[field] = !action[field];\n await adminClient.authenticationManagement.updateRequiredAction(\n { alias: action.alias! },\n action,\n );\n } else if (isUnregisteredAction(action)) {\n await adminClient.authenticationManagement.registerRequiredAction({\n name: action.name,\n providerId: action.providerId,\n });\n }\n refresh();\n addAlert(t(\"updatedRequiredActionSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"authentication:updatedRequiredActionError\", error);\n }\n };\n\n const executeMove = async (\n action: RequiredActionProviderRepresentation,\n times: number,\n ) => {\n try {\n const alias = action.alias!;\n for (let index = 0; index < Math.abs(times); index++) {\n if (times > 0) {\n await adminClient.authenticationManagement.lowerRequiredActionPriority(\n {\n alias,\n },\n );\n } else {\n await adminClient.authenticationManagement.raiseRequiredActionPriority(\n {\n alias,\n },\n );\n }\n }\n refresh();\n\n addAlert(t(\"updatedRequiredActionSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"authentication:updatedRequiredActionError\", error);\n }\n };\n\n if (!actions) {\n return ;\n }\n\n return (\n {\n const keys = actions.map((e) => e.name);\n const newIndex = items.indexOf(nameDragged);\n const oldIndex = keys.indexOf(nameDragged);\n const dragged = actions[oldIndex].data;\n if (!dragged.alias) return;\n\n const times = newIndex - oldIndex;\n executeMove(dragged, times);\n }}\n columns={[\n {\n name: \"name\",\n displayKey: \"authentication:requiredActions\",\n },\n {\n name: \"enabled\",\n displayKey: \"common:enabled\",\n cellRenderer: (row) => (\n {\n updateAction(row.data, \"enabled\");\n }}\n aria-label={toKey(row.name)}\n />\n ),\n },\n {\n name: \"default\",\n displayKey: \"authentication:setAsDefaultAction\",\n thTooltipText: \"authentication-help:authDefaultActionTooltip\",\n cellRenderer: (row) => (\n {\n updateAction(row.data, \"defaultAction\");\n }}\n aria-label={toKey(row.name)}\n />\n ),\n },\n ]}\n data={actions}\n />\n );\n};\n","import RealmRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/realmRepresentation\";\nimport {\n Button,\n Modal,\n ModalVariant,\n Popover,\n Text,\n TextContent,\n TextVariants,\n} from \"@patternfly/react-core\";\nimport { CheckCircleIcon } from \"@patternfly/react-icons\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { fetchUsedBy } from \"../../components/role-mapping/resource\";\nimport { KeycloakDataTable } from \"../../components/table-toolbar/KeycloakDataTable\";\nimport useToggle from \"../../utils/useToggle\";\nimport { AuthenticationType, REALM_FLOWS } from \"../AuthenticationSection\";\n\nimport style from \"./used-by.module.css\";\n\ntype UsedByProps = {\n authType: AuthenticationType;\n realm: RealmRepresentation;\n};\n\nconst Label = ({ label }: { label: string }) => (\n <>\n {label}\n \n);\n\ntype UsedByModalProps = {\n id: string;\n onClose: () => void;\n isSpecificClient: boolean;\n};\n\nconst UsedByModal = ({ id, isSpecificClient, onClose }: UsedByModalProps) => {\n const { t } = useTranslation(\"authentication\");\n\n const loader = async (\n first?: number,\n max?: number,\n search?: string,\n ): Promise<{ name: string }[]> => {\n const result = await fetchUsedBy({\n id,\n type: isSpecificClient ? \"clients\" : \"idp\",\n first: first || 0,\n max: max || 10,\n search,\n });\n return result.map((p) => ({ name: p }));\n };\n\n return (\n \n {t(\"flowUsedBy\")}\n \n {t(\"flowUsedByDescription\", {\n value: isSpecificClient ? t(\"clients\") : t(\"identiyProviders\"),\n })}\n \n \n }\n variant={ModalVariant.medium}\n isOpen\n onClose={onClose}\n actions={[\n \n {t(\"common:close\")}\n ,\n ]}\n >\n \n \n );\n};\n\nexport const UsedBy = ({ authType: { id, usedBy }, realm }: UsedByProps) => {\n const { t } = useTranslation(\"authentication\");\n const [open, toggle] = useToggle();\n\n const key = Object.entries(realm).find(\n (e) => e[1] === usedBy?.values[0],\n )?.[0];\n\n return (\n <>\n {open && (\n \n )}\n {(usedBy?.type === \"SPECIFIC_PROVIDERS\" ||\n usedBy?.type === \"SPECIFIC_CLIENTS\") &&\n (usedBy.values.length <= 8 ? (\n \n {t(\n \"appliedBy\" +\n (usedBy.type === \"SPECIFIC_CLIENTS\"\n ? \"Clients\"\n : \"Providers\"),\n )}{\" \"}\n {usedBy.values.map((used, index) => (\n <>\n {used}\n {index < usedBy.values.length - 1 ? \", \" : \"\"}\n \n ))}\n
\n }\n >\n \n \n ) : (\n \n ))}\n {usedBy?.type === \"DEFAULT\" && (\n



© 2015 - 2024 Weber Informatics LLC | Privacy Policy