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

theme.keycloak.v2.admin.resources.assets.EditUser-Ad2pc0MX.js.map Maven / Gradle / Ivy

There is a newer version: 26.0.7
Show newest version
{"version":3,"file":"EditUser-Ad2pc0MX.js","sources":["../../../../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIntersection.js","../../../../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_castArrayLikeObject.js","../../../../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/intersectionBy.js","../../../../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isEmpty.js","../../src/user/UserAttributes.tsx","../../src/user/UserConsents.tsx","../../src/user/user-credentials/CredentialDataDialog.tsx","../../src/user/user-credentials/CredentialRow.tsx","../../src/user/user-credentials/InlineLabelEdit.tsx","../../src/user/user-credentials/LifespanField.tsx","../../src/user/user-credentials/ResetCredentialDialog.tsx","../../src/user/user-credentials/ResetPasswordDialog.tsx","../../src/user/UserCredentials.tsx","../../src/user/UserGroups.tsx","../../src/user/UserIdPModal.tsx","../../src/user/UserIdentityProviderLinks.tsx","../../src/user/UserRoleMapping.tsx","../../src/user/UserSessions.tsx","../../src/user/EditUser.tsx"],"sourcesContent":["import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n  var includes = comparator ? arrayIncludesWith : arrayIncludes,\n      length = arrays[0].length,\n      othLength = arrays.length,\n      othIndex = othLength,\n      caches = Array(othLength),\n      maxLength = Infinity,\n      result = [];\n\n  while (othIndex--) {\n    var array = arrays[othIndex];\n    if (othIndex && iteratee) {\n      array = arrayMap(array, baseUnary(iteratee));\n    }\n    maxLength = nativeMin(array.length, maxLength);\n    caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n      ? new SetCache(othIndex && array)\n      : undefined;\n  }\n  array = arrays[0];\n\n  var index = -1,\n      seen = caches[0];\n\n  outer:\n  while (++index < length && result.length < maxLength) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (!(seen\n          ? cacheHas(seen, computed)\n          : includes(result, computed, comparator)\n        )) {\n      othIndex = othLength;\n      while (--othIndex) {\n        var cache = caches[othIndex];\n        if (!(cache\n              ? cacheHas(cache, computed)\n              : includes(arrays[othIndex], computed, comparator))\n            ) {\n          continue outer;\n        }\n      }\n      if (seen) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nexport default baseIntersection;\n","import isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n  return isArrayLikeObject(value) ? value : [];\n}\n\nexport default castArrayLikeObject;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\nvar intersectionBy = baseRest(function(arrays) {\n  var iteratee = last(arrays),\n      mapped = arrayMap(arrays, castArrayLikeObject);\n\n  if (iteratee === last(mapped)) {\n    iteratee = undefined;\n  } else {\n    mapped.pop();\n  }\n  return (mapped.length && mapped[0] === arrays[0])\n    ? baseIntersection(mapped, baseIteratee(iteratee, 2))\n    : [];\n});\n\nexport default intersectionBy;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport default isEmpty;\n","import type UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport { PageSection, PageSectionVariants } from \"@patternfly/react-core\";\nimport { UseFormReturn, useFormContext } from \"react-hook-form\";\n\nimport {\n  AttributeForm,\n  AttributesForm,\n} from \"../components/key-value-form/AttributeForm\";\nimport { UserFormFields, toUserFormFields } from \"./form-state\";\nimport {\n  UnmanagedAttributePolicy,\n  UserProfileConfig,\n} from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\n\ntype UserAttributesProps = {\n  user: UserRepresentation;\n  save: (user: UserFormFields) => void;\n  upConfig?: UserProfileConfig;\n};\n\nexport const UserAttributes = ({\n  user,\n  save,\n  upConfig,\n}: UserAttributesProps) => {\n  const form = useFormContext();\n\n  return (\n    \n      }\n        save={save}\n        fineGrainedAccess={user.access?.manage}\n        reset={() =>\n          form.reset({\n            ...form.getValues(),\n            attributes: toUserFormFields(user).attributes,\n          })\n        }\n        name=\"unmanagedAttributes\"\n        isDisabled={\n          UnmanagedAttributePolicy.AdminView ==\n          upConfig?.unmanagedAttributePolicy\n        }\n      />\n    \n  );\n};\n","import type UserConsentRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userConsentRepresentation\";\nimport {\n  AlertVariant,\n  ButtonVariant,\n  Chip,\n  ChipGroup,\n} from \"@patternfly/react-core\";\nimport { CubesIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { sortBy } from \"lodash-es\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { ListEmptyState } from \"../components/list-empty-state/ListEmptyState\";\nimport {\n  Action,\n  KeycloakDataTable,\n} from \"../components/table-toolbar/KeycloakDataTable\";\nimport { emptyFormatter } from \"../util\";\nimport useFormatDate from \"../utils/useFormatDate\";\nimport { useParams } from \"../utils/useParams\";\n\nexport const UserConsents = () => {\n  const { adminClient } = useAdminClient();\n\n  const [selectedClient, setSelectedClient] =\n    useState();\n  const { t } = useTranslation();\n  const { addAlert, addError } = useAlerts();\n  const formatDate = useFormatDate();\n  const [key, setKey] = useState(0);\n\n  const { id } = useParams<{ id: string }>();\n  const alphabetize = (consentsList: UserConsentRepresentation[]) => {\n    return sortBy(consentsList, (client) => client.clientId?.toUpperCase());\n  };\n\n  const refresh = () => setKey(new Date().getTime());\n\n  const loader = async () => {\n    const getConsents = await adminClient.users.listConsents({ id });\n\n    return alphabetize(getConsents);\n  };\n\n  const clientScopesRenderer = ({\n    grantedClientScopes,\n  }: UserConsentRepresentation) => {\n    return (\n      \n        {grantedClientScopes!.map((currentChip) => (\n          \n            {currentChip}\n          \n        ))}\n      \n    );\n  };\n\n  const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n    titleKey: \"revokeClientScopesTitle\",\n    messageKey: t(\"revokeClientScopes\", {\n      clientId: selectedClient?.clientId,\n    }),\n    continueButtonLabel: \"revoke\",\n    continueButtonVariant: ButtonVariant.danger,\n    onConfirm: async () => {\n      try {\n        await adminClient.users.revokeConsent({\n          id,\n          clientId: selectedClient!.clientId!,\n        });\n\n        refresh();\n\n        addAlert(t(\"deleteGrantsSuccess\"), AlertVariant.success);\n      } catch (error) {\n        addError(\"deleteGrantsError\", error);\n      }\n    },\n  });\n\n  return (\n    <>\n      \n      \n              createDate ? formatDate(new Date(createDate)) : \"—\",\n          },\n          {\n            name: \"lastUpdatedDate\",\n            displayKey: \"lastUpdated\",\n            transforms: [cellWidth(10)],\n            cellRenderer: ({ lastUpdatedDate }) =>\n              lastUpdatedDate ? formatDate(new Date(lastUpdatedDate)) : \"—\",\n          },\n        ]}\n        actions={[\n          {\n            title: t(\"revoke\"),\n            onRowClick: (client) => {\n              setSelectedClient(client);\n              toggleDeleteDialog();\n            },\n          } as Action,\n        ]}\n        emptyState={\n          \n        }\n      />\n    \n  );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { Modal, ModalVariant } from \"@patternfly/react-core\";\nimport {\n  Table,\n  TableVariant,\n  Tbody,\n  Td,\n  Th,\n  Thead,\n  Tr,\n} from \"@patternfly/react-table\";\n\ntype CredentialDataDialogProps = {\n  credentialData: [string, string][];\n  onClose: () => void;\n};\n\nexport const CredentialDataDialog = ({\n  credentialData,\n  onClose,\n}: CredentialDataDialogProps) => {\n  const { t } = useTranslation();\n  return (\n    \n      \n        \n          \n            {t(\"showPasswordDataName\")}\n            {t(\"showPasswordDataValue\")}\n          \n        \n        \n          {credentialData.map((cred, index) => {\n            return (\n              \n                {cred[0]}\n                {cred[1]}\n              \n            );\n          })}\n        \n      \n    \n  );\n};\n","import { ReactNode, useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Td } from \"@patternfly/react-table\";\nimport {\n  Button,\n  Dropdown,\n  DropdownItem,\n  DropdownList,\n  MenuToggle,\n} from \"@patternfly/react-core\";\nimport type CredentialRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/credentialRepresentation\";\nimport useToggle from \"../../utils/useToggle\";\nimport useLocaleSort from \"../../utils/useLocaleSort\";\nimport { CredentialDataDialog } from \"./CredentialDataDialog\";\nimport useFormatDate from \"../../utils/useFormatDate\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\n\ntype CredentialRowProps = {\n  credential: CredentialRepresentation;\n  resetPassword: () => void;\n  toggleDelete: () => void;\n  children: ReactNode;\n};\n\nexport const CredentialRow = ({\n  credential,\n  resetPassword,\n  toggleDelete,\n  children,\n}: CredentialRowProps) => {\n  const formatDate = useFormatDate();\n  const { t } = useTranslation();\n  const [showData, toggleShow] = useToggle();\n  const [kebabOpen, toggleKebab] = useToggle();\n  const localeSort = useLocaleSort();\n\n  const rows = useMemo(() => {\n    if (!credential.credentialData) {\n      return [];\n    }\n\n    const credentialData: Record = JSON.parse(\n      credential.credentialData,\n    );\n    return localeSort(Object.entries(credentialData), ([key]) => key).map<\n      [string, string]\n    >(([key, value]) => {\n      if (typeof value === \"string\") {\n        return [key, value];\n      }\n\n      return [key, JSON.stringify(value)];\n    });\n  }, [credential.credentialData]);\n\n  return (\n    <>\n      {showData && Object.keys(credential).length !== 0 && (\n         {\n            toggleShow();\n          }}\n        />\n      )}\n\n      {children}\n      {formatDate(new Date(credential.createdDate!))}\n      \n        \n          {t(\"showDataBtn\")}\n        \n      \n      {credential.type === \"password\" ? (\n        \n          \n            {t(\"resetPasswordBtn\")}\n          \n        \n      ) : (\n        \n      )}\n      \n         (\n            \n              \n            \n          )}\n          isOpen={kebabOpen}\n        >\n          \n             {\n                toggleDelete();\n                toggleKebab();\n              }}\n            >\n              {t(\"deleteBtn\")}\n            \n          \n        \n      \n    \n  );\n};\n","import type CredentialRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/credentialRepresentation\";\nimport {\n  AlertVariant,\n  Button,\n  Form,\n  FormGroup,\n  TextInput,\n} from \"@patternfly/react-core\";\nimport { CheckIcon, PencilAltIcon, TimesIcon } from \"@patternfly/react-icons\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\n\ntype UserLabelForm = {\n  userLabel: string;\n};\n\ntype InlineLabelEditProps = {\n  userId: string;\n  credential: CredentialRepresentation;\n  isEditable: boolean;\n  toggle: () => void;\n};\n\nexport const InlineLabelEdit = ({\n  userId,\n  credential,\n  isEditable,\n  toggle,\n}: InlineLabelEditProps) => {\n  const { adminClient } = useAdminClient();\n\n  const { t } = useTranslation();\n  const { register, handleSubmit } = useForm();\n\n  const { addAlert, addError } = useAlerts();\n\n  const saveUserLabel = async (userLabel: UserLabelForm) => {\n    try {\n      await adminClient.users.updateCredentialLabel(\n        {\n          id: userId,\n          credentialId: credential.id!,\n        },\n        userLabel.userLabel || \"\",\n      );\n      addAlert(t(\"updateCredentialUserLabelSuccess\"), AlertVariant.success);\n      toggle();\n    } catch (error) {\n      addError(\"updateCredentialUserLabelError\", error);\n    }\n  };\n\n  return (\n    \n      \n        
\n {isEditable ? (\n <>\n \n
\n }\n />\n }\n />\n
\n \n ) : (\n <>\n {credential.userLabel}\n }\n />\n \n )}\n
\n
\n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { TimeSelectorControl } from \"../../components/time-selector/TimeSelectorControl\";\nimport { credResetFormDefaultValues } from \"./ResetCredentialDialog\";\n\nexport const LifespanField = () => {\n const { t } = useTranslation();\n\n return (\n \n );\n};\n","import type { RequiredActionAlias } from \"@keycloak/keycloak-admin-client/lib/defs/requiredActionProviderRepresentation\";\nimport { AlertVariant, Form, ModalVariant } from \"@patternfly/react-core\";\nimport { isEmpty } from \"lodash-es\";\nimport { FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { ConfirmDialogModal } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { LifespanField } from \"./LifespanField\";\nimport { RequiredActionMultiSelect } from \"./RequiredActionMultiSelect\";\n\ntype ResetCredentialDialogProps = {\n userId: string;\n onClose: () => void;\n};\n\ntype CredentialResetForm = {\n actions: RequiredActionAlias[];\n lifespan: number;\n};\n\nexport const credResetFormDefaultValues: CredentialResetForm = {\n actions: [],\n lifespan: 43200, // 12 hours\n};\n\nexport const ResetCredentialDialog = ({\n userId,\n onClose,\n}: ResetCredentialDialogProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const form = useForm({\n defaultValues: credResetFormDefaultValues,\n });\n const { handleSubmit, control } = form;\n\n const resetActionWatcher = useWatch({\n control,\n name: \"actions\",\n });\n const resetIsNotDisabled = !isEmpty(resetActionWatcher);\n\n const { addAlert, addError } = useAlerts();\n\n const sendCredentialsResetEmail = async ({\n actions,\n lifespan,\n }: CredentialResetForm) => {\n if (isEmpty(actions)) {\n return;\n }\n\n try {\n await adminClient.users.executeActionsEmail({\n id: userId,\n actions,\n lifespan,\n });\n addAlert(t(\"credentialResetEmailSuccess\"), AlertVariant.success);\n onClose();\n } catch (error) {\n addError(\"credentialResetEmailError\", error);\n }\n };\n\n return (\n {\n handleSubmit(sendCredentialsResetEmail)();\n }}\n confirmButtonDisabled={!resetIsNotDisabled}\n >\n \n \n \n \n \n \n \n );\n};\n","import { RequiredActionAlias } from \"@keycloak/keycloak-admin-client/lib/defs/requiredActionProviderRepresentation\";\nimport type UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport {\n AlertVariant,\n ButtonVariant,\n Form,\n FormGroup,\n} from \"@patternfly/react-core\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { FormErrorText, PasswordInput } from \"@keycloak/keycloak-ui-shared\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport {\n ConfirmDialogModal,\n useConfirmDialog,\n} from \"../../components/confirm-dialog/ConfirmDialog\";\nimport useToggle from \"../../utils/useToggle\";\n\ntype ResetPasswordDialogProps = {\n user: UserRepresentation;\n isResetPassword: boolean;\n onAddRequiredActions?: (requiredActions: string[]) => void;\n refresh: () => void;\n onClose: () => void;\n};\n\nexport type CredentialsForm = {\n password: string;\n passwordConfirmation: string;\n temporaryPassword: boolean;\n};\n\nconst credFormDefaultValues: CredentialsForm = {\n password: \"\",\n passwordConfirmation: \"\",\n temporaryPassword: true,\n};\n\nexport const ResetPasswordDialog = ({\n user,\n isResetPassword,\n onAddRequiredActions,\n refresh,\n onClose,\n}: ResetPasswordDialogProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const form = useForm({\n defaultValues: credFormDefaultValues,\n mode: \"onChange\",\n });\n const {\n register,\n formState: { isValid, errors },\n watch,\n handleSubmit,\n clearErrors,\n setError,\n } = form;\n\n const [confirm, toggle] = useToggle(true);\n const password = watch(\"password\", \"\");\n const passwordConfirmation = watch(\"passwordConfirmation\", \"\");\n\n const { addAlert, addError } = useAlerts();\n\n const [toggleConfirmSaveModal, ConfirmSaveModal] = useConfirmDialog({\n titleKey: isResetPassword ? \"resetPasswordConfirm\" : \"setPasswordConfirm\",\n messageKey: isResetPassword\n ? t(\"resetPasswordConfirmText\", { username: user.username })\n : t(\"setPasswordConfirmText\", { username: user.username }),\n continueButtonLabel: isResetPassword ? \"resetPassword\" : \"savePassword\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: () => handleSubmit(saveUserPassword)(),\n });\n\n const saveUserPassword = async ({\n password,\n temporaryPassword,\n }: CredentialsForm) => {\n try {\n await adminClient.users.resetPassword({\n id: user.id!,\n credential: {\n temporary: temporaryPassword,\n type: \"password\",\n value: password,\n },\n });\n if (temporaryPassword) {\n onAddRequiredActions?.([RequiredActionAlias.UPDATE_PASSWORD]);\n }\n const credentials = await adminClient.users.getCredentials({\n id: user.id!,\n });\n const credentialLabel = credentials.find((c) => c.type === \"password\");\n if (credentialLabel) {\n await adminClient.users.updateCredentialLabel(\n {\n id: user.id!,\n credentialId: credentialLabel.id!,\n },\n t(\"defaultPasswordLabel\"),\n );\n }\n addAlert(\n isResetPassword\n ? t(\"resetCredentialsSuccess\")\n : t(\"savePasswordSuccess\"),\n AlertVariant.success,\n );\n refresh();\n } catch (error) {\n addError(\n isResetPassword ? \"resetPasswordError\" : \"savePasswordError\",\n error,\n );\n }\n\n onClose();\n };\n\n const { onChange, ...rest } = register(\"password\", { required: true });\n return (\n <>\n \n \n \n \n {\n onChange(e);\n if (passwordConfirmation !== e.currentTarget.value) {\n setError(\"passwordConfirmation\", {\n message: t(\"confirmPasswordDoesNotMatch\").toString(),\n });\n } else {\n clearErrors(\"passwordConfirmation\");\n }\n }}\n {...rest}\n />\n {errors.password && }\n \n \n \n value === password ||\n t(\"confirmPasswordDoesNotMatch\").toString(),\n })}\n />\n {errors.passwordConfirmation && (\n \n )}\n \n \n \n \n \n \n \n );\n};\n","import type CredentialRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/credentialRepresentation\";\nimport type UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport {\n AlertVariant,\n Button,\n ButtonVariant,\n Divider,\n PageSection,\n PageSectionVariants,\n} from \"@patternfly/react-core\";\nimport styles from \"@patternfly/react-styles/css/components/Table/table\";\nimport { Table, Tbody, Td, Th, Thead, Tr } from \"@patternfly/react-table\";\nimport {\n Fragment,\n DragEvent as ReactDragEvent,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { HelpItem } from \"@keycloak/keycloak-ui-shared\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { KeycloakSpinner } from \"../components/keycloak-spinner/KeycloakSpinner\";\nimport { ListEmptyState } from \"../components/list-empty-state/ListEmptyState\";\nimport { toUpperCase } from \"../util\";\nimport { useFetch } from \"../utils/useFetch\";\nimport { FederatedUserLink } from \"./FederatedUserLink\";\nimport { CredentialRow } from \"./user-credentials/CredentialRow\";\nimport { InlineLabelEdit } from \"./user-credentials/InlineLabelEdit\";\nimport { ResetCredentialDialog } from \"./user-credentials/ResetCredentialDialog\";\nimport { ResetPasswordDialog } from \"./user-credentials/ResetPasswordDialog\";\n\nimport \"./user-credentials.css\";\n\ntype UserCredentialsProps = {\n user: UserRepresentation;\n setUser: (user: UserRepresentation) => void;\n};\n\ntype ExpandableCredentialRepresentation = {\n key: string;\n value: CredentialRepresentation[];\n isExpanded: boolean;\n};\n\ntype UserLabelEdit = {\n status: boolean;\n rowKey: string;\n};\n\ntype UserCredentialsRowProps = {\n credential: CredentialRepresentation;\n userId: string;\n toggleDelete: (credential: CredentialRepresentation) => void;\n resetPassword: () => void;\n isUserLabelEdit?: UserLabelEdit;\n setIsUserLabelEdit: (isUserLabelEdit: UserLabelEdit) => void;\n refresh: () => void;\n};\n\nconst UserCredentialsRow = ({\n credential,\n userId,\n toggleDelete,\n resetPassword,\n isUserLabelEdit,\n setIsUserLabelEdit,\n refresh,\n}: UserCredentialsRowProps) => (\n toggleDelete(credential)}\n resetPassword={resetPassword}\n >\n {\n setIsUserLabelEdit({\n status: !isUserLabelEdit?.status,\n rowKey: credential.id!,\n });\n if (isUserLabelEdit?.status) {\n refresh();\n }\n }}\n />\n \n);\n\nexport const UserCredentials = ({ user, setUser }: UserCredentialsProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { addAlert, addError } = useAlerts();\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n const [isOpen, setIsOpen] = useState(false);\n const [openCredentialReset, setOpenCredentialReset] = useState(false);\n const [userCredentials, setUserCredentials] = useState<\n CredentialRepresentation[]\n >([]);\n const [groupedUserCredentials, setGroupedUserCredentials] = useState<\n ExpandableCredentialRepresentation[]\n >([]);\n const [selectedCredential, setSelectedCredential] =\n useState({});\n const [isResetPassword, setIsResetPassword] = useState(false);\n const [isUserLabelEdit, setIsUserLabelEdit] = useState();\n\n const bodyRef = useRef(null);\n const [state, setState] = useState({\n draggedItemId: \"\",\n draggingToItemIndex: -1,\n dragging: false,\n tempItemOrder: [\"\"],\n });\n\n useFetch(\n () => adminClient.users.getCredentials({ id: user.id! }),\n (credentials) => {\n setUserCredentials(credentials);\n\n const groupedCredentials = credentials.reduce((r, a) => {\n r[a.type!] = r[a.type!] || [];\n r[a.type!].push(a);\n return r;\n }, Object.create(null));\n\n const groupedCredentialsArray = Object.keys(groupedCredentials).map(\n (key) => ({ key, value: groupedCredentials[key] }),\n );\n\n setGroupedUserCredentials(\n groupedCredentialsArray.map((groupedCredential) => ({\n ...groupedCredential,\n isExpanded: false,\n })),\n );\n },\n [key],\n );\n\n const passwordTypeFinder = userCredentials.find(\n (credential) => credential.type === \"password\",\n );\n\n const toggleModal = () => setIsOpen(!isOpen);\n\n const toggleCredentialsResetModal = () => {\n setOpenCredentialReset(!openCredentialReset);\n };\n\n const resetPassword = () => {\n setIsResetPassword(true);\n toggleModal();\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteCredentialsConfirmTitle\"),\n messageKey: t(\"deleteCredentialsConfirm\"),\n continueButtonLabel: t(\"delete\"),\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await adminClient.users.deleteCredential({\n id: user.id!,\n credentialId: selectedCredential.id!,\n });\n addAlert(t(\"deleteCredentialsSuccess\"), AlertVariant.success);\n setKey((key) => key + 1);\n } catch (error) {\n addError(\"deleteCredentialsError\", error);\n }\n },\n });\n\n const itemOrder = useMemo(\n () =>\n groupedUserCredentials.flatMap((groupedCredential) => [\n groupedCredential.value.map(({ id }) => id).toString(),\n ...(groupedCredential.isExpanded\n ? groupedCredential.value.map((c) => c.id!)\n : []),\n ]),\n [groupedUserCredentials],\n );\n\n const onDragStart = (evt: ReactDragEvent) => {\n evt.dataTransfer.effectAllowed = \"move\";\n evt.dataTransfer.setData(\"text/plain\", evt.currentTarget.id);\n const draggedItemId = evt.currentTarget.id;\n evt.currentTarget.classList.add(styles.modifiers.ghostRow);\n evt.currentTarget.setAttribute(\"aria-pressed\", \"true\");\n setState({ ...state, draggedItemId, dragging: true });\n };\n\n const moveItem = (items: string[], targetItem: string, toIndex: number) => {\n const fromIndex = items.indexOf(targetItem);\n if (fromIndex === toIndex) {\n return items;\n }\n const result = [...items];\n result.splice(toIndex, 0, result.splice(fromIndex, 1)[0]);\n return result;\n };\n\n const move = (itemOrder: string[]) => {\n if (!bodyRef.current) return;\n const ulNode = bodyRef.current;\n const nodes = Array.from(ulNode.children);\n if (nodes.every(({ id }, i) => id === itemOrder[i])) {\n return;\n }\n ulNode.replaceChildren();\n itemOrder.forEach((itemId) => {\n ulNode.appendChild(nodes.find(({ id }) => id === itemId)!);\n });\n };\n\n const onDragCancel = () => {\n if (!bodyRef.current) return;\n Array.from(bodyRef.current.children).forEach((el) => {\n el.classList.remove(styles.modifiers.ghostRow);\n el.setAttribute(\"aria-pressed\", \"false\");\n });\n setState({\n ...state,\n draggedItemId: \"\",\n draggingToItemIndex: -1,\n dragging: false,\n });\n };\n\n const onDragLeave = (evt: ReactDragEvent) => {\n if (!isValidDrop(evt)) {\n move(itemOrder);\n setState({ ...state, draggingToItemIndex: -1 });\n }\n };\n\n const isValidDrop = (evt: ReactDragEvent) => {\n if (!bodyRef.current) return false;\n const ulRect = bodyRef.current.getBoundingClientRect();\n return (\n evt.clientX > ulRect.x &&\n evt.clientX < ulRect.x + ulRect.width &&\n evt.clientY > ulRect.y &&\n evt.clientY < ulRect.y + ulRect.height\n );\n };\n\n const onDrop = (evt: ReactDragEvent) => {\n if (isValidDrop(evt)) {\n onDragFinish(state.draggedItemId, state.tempItemOrder);\n } else {\n onDragCancel();\n }\n };\n\n const onDragOver = (evt: ReactDragEvent) => {\n evt.preventDefault();\n const td = evt.target as HTMLTableCellElement;\n const curListItem = td.closest(\"tr\");\n if (\n !curListItem ||\n (bodyRef.current && !bodyRef.current.contains(curListItem)) ||\n curListItem.id === state.draggedItemId\n ) {\n return;\n } else {\n const dragId = curListItem.id;\n const draggingToItemIndex = Array.from(\n bodyRef.current?.children || [],\n ).findIndex((item) => item.id === dragId);\n if (draggingToItemIndex === state.draggingToItemIndex) {\n return;\n }\n const tempItemOrder = moveItem(\n itemOrder,\n state.draggedItemId,\n draggingToItemIndex,\n );\n move(tempItemOrder);\n setState({\n ...state,\n draggingToItemIndex,\n tempItemOrder,\n });\n }\n };\n\n const onAddRequiredActions = (requiredActions: string[]) => {\n setUser({\n ...user,\n requiredActions: [...(user.requiredActions ?? []), ...requiredActions],\n });\n };\n\n const onDragEnd = ({ target }: ReactDragEvent) => {\n if (!(target instanceof HTMLTableRowElement)) {\n return;\n }\n target.classList.remove(styles.modifiers.ghostRow);\n target.setAttribute(\"aria-pressed\", \"false\");\n setState({\n ...state,\n draggedItemId: \"\",\n draggingToItemIndex: -1,\n dragging: false,\n });\n };\n\n const onDragFinish = async (dragged: string, newOrder: string[]) => {\n const oldIndex = itemOrder.findIndex((key) => key === dragged);\n const newIndex = newOrder.findIndex((key) => key === dragged);\n const times = newIndex - oldIndex;\n\n const ids = dragged.split(\",\");\n\n try {\n for (const id of ids)\n for (let index = 0; index < Math.abs(times); index++) {\n if (times > 0) {\n await adminClient.users.moveCredentialPositionDown({\n id: user.id!,\n credentialId: id,\n newPreviousCredentialId: itemOrder[newIndex],\n });\n } else {\n await adminClient.users.moveCredentialPositionUp({\n id: user.id!,\n credentialId: id,\n });\n }\n }\n\n refresh();\n addAlert(t(\"updatedCredentialMoveSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"updatedCredentialMoveError\", error);\n }\n };\n\n const onToggleDelete = (credential: CredentialRepresentation) => {\n setSelectedCredential(credential);\n toggleDeleteDialog();\n };\n\n const useFederatedCredentials = user.federationLink || user.origin;\n const [credentialTypes, setCredentialTypes] = useState([]);\n\n useFetch(\n () => adminClient.users.getUserStorageCredentialTypes({ id: user.id! }),\n setCredentialTypes,\n [],\n );\n\n if (!credentialTypes) {\n return ;\n }\n\n const hasCredentialTypes = credentialTypes.length > 0;\n const noCredentials = groupedUserCredentials.length === 0;\n const noFederatedCredentials =\n !user.credentials || user.credentials.length === 0;\n const emptyState =\n noCredentials && noFederatedCredentials && !hasCredentialTypes;\n\n return (\n <>\n {isOpen && (\n setIsOpen(false)}\n />\n )}\n {openCredentialReset && (\n setOpenCredentialReset(false)}\n />\n )}\n \n {user.email && !emptyState && (\n setOpenCredentialReset(true)}\n >\n {t(\"credentialResetBtn\")}\n \n )}\n {userCredentials.length !== 0 && passwordTypeFinder === undefined && (\n <>\n {\n setIsOpen(true);\n }}\n >\n {t(\"setPassword\")}\n \n \n \n )}\n {groupedUserCredentials.length !== 0 && (\n \n \n \n \n \n \n \n \n \n \n \n \n {groupedUserCredentials.map((groupedCredential, rowIndex) => (\n \n id).toString()}\n draggable={groupedUserCredentials.length > 1}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n onDragStart={onDragStart}\n >\n id,\n )}`,\n }}\n />\n {groupedCredential.value.length > 1 ? (\n {\n const rows = groupedUserCredentials.map(\n (credential, index) =>\n index === rowIndex\n ? {\n ...credential,\n isExpanded: !credential.isExpanded,\n }\n : credential,\n );\n setGroupedUserCredentials(rows);\n },\n }}\n />\n ) : (\n \n {groupedCredential.value.length <= 1 &&\n groupedCredential.value.map((credential) => (\n \n ))}\n \n {groupedCredential.isExpanded &&\n groupedCredential.value.map((credential) => (\n \n \n \n \n ))}\n \n ))}\n \n
\n \n \n {t(\"type\")}{t(\"userLabel\")}{t(\"createdAt\")}{t(\"data\")}\n \n
\n )}\n \n {toUpperCase(groupedCredential.key)}\n
\n id,\n )}`,\n }}\n />\n \n {toUpperCase(credential.type!)}\n
\n
\n )}\n {useFederatedCredentials && hasCredentialTypes && (\n \n \n \n \n \n \n \n \n \n {credentialTypes.map((credential) => (\n \n \n \n {credential === \"password\" && (\n \n )}\n \n ))}\n \n
{t(\"type\")}{t(\"providedBy\")}\n
\n {credential}\n \n \n \n \n
\n
\n )}\n {emptyState && (\n \n )}\n \n );\n};\n","import type GroupRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/groupRepresentation\";\nimport type UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport { useHelp } from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n Button,\n ButtonVariant,\n Checkbox,\n Popover,\n} from \"@patternfly/react-core\";\nimport { QuestionCircleIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { intersectionBy, sortBy, uniqBy } from \"lodash-es\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { GroupPath } from \"../components/group/GroupPath\";\nimport { GroupPickerDialog } from \"../components/group/GroupPickerDialog\";\nimport { ListEmptyState } from \"../components/list-empty-state/ListEmptyState\";\nimport { KeycloakDataTable } from \"../components/table-toolbar/KeycloakDataTable\";\nimport { useAccess } from \"../context/access/Access\";\n\ntype UserGroupsProps = {\n user: UserRepresentation;\n};\n\nexport const UserGroups = ({ user }: UserGroupsProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { addAlert, addError } = useAlerts();\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const [selectedGroups, setSelectedGroups] = useState(\n [],\n );\n\n const [isDirectMembership, setDirectMembership] = useState(true);\n const [directMembershipList, setDirectMembershipList] = useState<\n GroupRepresentation[]\n >([]);\n const [open, setOpen] = useState(false);\n\n const { enabled } = useHelp();\n\n const { hasAccess } = useAccess();\n const isManager = hasAccess(\"manage-users\");\n\n const alphabetize = (groupsList: GroupRepresentation[]) => {\n return sortBy(groupsList, (group) => group.path?.toUpperCase());\n };\n\n const loader = async (first?: number, max?: number, search?: string) => {\n const params: { [name: string]: string | number } = {\n first: first!,\n max: max!,\n };\n\n const searchParam = search || \"\";\n if (searchParam) {\n params.search = searchParam;\n }\n\n const joinedUserGroups = await adminClient.users.listGroups({\n ...params,\n id: user.id!,\n });\n\n setDirectMembershipList([...joinedUserGroups]);\n\n const indirect: GroupRepresentation[] = [];\n if (!isDirectMembership)\n joinedUserGroups.forEach((g) => {\n const paths = (\n g.path?.substring(1).match(/((~\\/)|[^/])+/g) || []\n ).slice(0, -1);\n\n indirect.push(\n ...paths.map((p) => ({\n name: p,\n path: g.path?.substring(0, g.path.indexOf(p) + p.length),\n })),\n );\n });\n\n return alphabetize(uniqBy([...joinedUserGroups, ...indirect], \"path\"));\n };\n\n const toggleModal = () => {\n setOpen(!open);\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"leaveGroup\", {\n count: selectedGroups.length,\n name: selectedGroups[0]?.name,\n }),\n messageKey: t(\"leaveGroupConfirmDialog\", {\n count: selectedGroups.length,\n groupname: selectedGroups[0]?.name,\n username: user.username,\n }),\n continueButtonLabel: \"leave\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await Promise.all(\n selectedGroups.map((group) =>\n adminClient.users.delFromGroup({\n id: user.id!,\n groupId: group.id!,\n }),\n ),\n );\n\n setSelectedGroups([]);\n addAlert(t(\"removedGroupMembership\"), AlertVariant.success);\n } catch (error) {\n addError(\"removedGroupMembershipError\", error);\n }\n refresh();\n },\n });\n\n const leave = (group: GroupRepresentation[]) => {\n setSelectedGroups(group);\n toggleDeleteDialog();\n };\n\n const addGroups = async (groups: GroupRepresentation[]): Promise => {\n try {\n await Promise.all(\n groups.map((group) =>\n adminClient.users.addToGroup({\n id: user.id!,\n groupId: group.id!,\n }),\n ),\n );\n\n addAlert(t(\"addedGroupMembership\"), AlertVariant.success);\n } catch (error) {\n addError(\"addedGroupMembershipError\", error);\n }\n refresh();\n };\n\n return (\n <>\n \n {open && (\n setOpen(false)}\n onConfirm={async (groups = []) => {\n await addGroups(groups);\n setOpen(false);\n }}\n />\n )}\n \n isDirectMembership\n ? setSelectedGroups(groups)\n : setSelectedGroups(\n intersectionBy(groups, directMembershipList, \"id\"),\n )\n }\n isRowDisabled={(group) =>\n !isDirectMembership &&\n directMembershipList.every((item) => item.id !== group.id)\n }\n toolbarItem={\n <>\n \n {t(\"joinGroup\")}\n \n {\n setDirectMembership(!isDirectMembership);\n refresh();\n }}\n isChecked={isDirectMembership}\n className=\"direct-membership-check\"\n />\n leave(selectedGroups)}\n data-testid=\"leave-group-button\"\n variant=\"link\"\n isDisabled={selectedGroups.length === 0}\n >\n {t(\"leave\")}\n \n\n {enabled && (\n {t(\"whoWillAppearPopoverTextUsers\")}
}\n >\n }\n >\n {t(\"whoWillAppearLinkTextUsers\")}\n \n \n )}\n \n }\n columns={[\n {\n name: \"groupMembership\",\n displayKey: \"groupMembership\",\n cellRenderer: (group: GroupRepresentation) => group.name || \"-\",\n transforms: [cellWidth(40)],\n },\n {\n name: \"path\",\n displayKey: \"path\",\n cellRenderer: (group: GroupRepresentation) => (\n \n ),\n transforms: [cellWidth(45)],\n },\n\n {\n name: \"\",\n cellRenderer: (group: GroupRepresentation) => {\n const canLeaveGroup =\n directMembershipList.some((item) => item.id === group.id) ||\n directMembershipList.length === 0 ||\n isDirectMembership;\n return canLeaveGroup ? (\n leave([group])}\n variant=\"link\"\n isDisabled={!user.access?.manageGroupMembership}\n >\n {t(\"leave\")}\n \n ) : (\n \"-\"\n );\n },\n transforms: [cellWidth(20)],\n },\n ]}\n emptyState={\n \n }\n />\n \n );\n};\n","import type FederatedIdentityRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/federatedIdentityRepresentation\";\nimport {\n AlertVariant,\n Button,\n ButtonVariant,\n Form,\n FormGroup,\n Modal,\n ModalVariant,\n TextInput,\n} from \"@patternfly/react-core\";\nimport { capitalize } from \"lodash-es\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { TextControl } from \"@keycloak/keycloak-ui-shared\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\n\ntype UserIdpModalProps = {\n userId: string;\n federatedId: string;\n onClose: () => void;\n onRefresh: () => void;\n};\n\nexport const UserIdpModal = ({\n userId,\n federatedId,\n onClose,\n onRefresh,\n}: UserIdpModalProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { addAlert, addError } = useAlerts();\n const form = useForm({\n mode: \"onChange\",\n });\n const {\n handleSubmit,\n formState: { isValid },\n } = form;\n\n const onSubmit = async (\n federatedIdentity: FederatedIdentityRepresentation,\n ) => {\n try {\n await adminClient.users.addToFederatedIdentity({\n id: userId,\n federatedIdentityId: federatedId,\n federatedIdentity,\n });\n addAlert(t(\"idpLinkSuccess\"), AlertVariant.success);\n onClose();\n onRefresh();\n } catch (error) {\n addError(\"couldNotLinkIdP\", error);\n }\n };\n\n return (\n \n {t(\"link\")}\n ,\n \n {t(\"cancel\")}\n ,\n ]}\n isOpen\n >\n
\n \n \n \n \n \n \n \n
\n \n );\n};\n","import type FederatedIdentityRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/federatedIdentityRepresentation\";\nimport type IdentityProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/identityProviderRepresentation\";\nimport {\n AlertVariant,\n Button,\n ButtonVariant,\n Label,\n PageSection,\n Text,\n TextContent,\n} from \"@patternfly/react-core\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { capitalize } from \"lodash-es\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link } from \"react-router-dom\";\nimport { FormPanel } from \"@keycloak/keycloak-ui-shared\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { KeycloakDataTable } from \"../components/table-toolbar/KeycloakDataTable\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useServerInfo } from \"../context/server-info/ServerInfoProvider\";\nimport { toIdentityProvider } from \"../identity-providers/routes/IdentityProvider\";\nimport { emptyFormatter, upperCaseFormatter } from \"../util\";\nimport { UserIdpModal } from \"./UserIdPModal\";\nimport { useAccess } from \"../context/access/Access\";\n\ntype UserIdentityProviderLinksProps = {\n userId: string;\n};\n\nexport const UserIdentityProviderLinks = ({\n userId,\n}: UserIdentityProviderLinksProps) => {\n const { adminClient } = useAdminClient();\n\n const [key, setKey] = useState(0);\n const [federatedId, setFederatedId] = useState(\"\");\n const [isLinkIdPModalOpen, setIsLinkIdPModalOpen] = useState(false);\n\n const { realm, realmRepresentation } = useRealm();\n const { addAlert, addError } = useAlerts();\n const { t } = useTranslation();\n const { hasAccess, hasSomeAccess } = useAccess();\n\n const canQueryIDPDetails = hasSomeAccess(\n \"manage-identity-providers\",\n \"view-identity-providers\",\n );\n\n const refresh = () => setKey(new Date().getTime());\n\n type WithProviderId = FederatedIdentityRepresentation & {\n providerId: string;\n };\n\n const identityProviders = useServerInfo().identityProviders;\n\n const getFederatedIdentities = async () => {\n const allFedIds = (await adminClient.users.listFederatedIdentities({\n id: userId,\n })) as WithProviderId[];\n\n if (canQueryIDPDetails) {\n const allProviders = await adminClient.identityProviders.find();\n for (const element of allFedIds) {\n element.providerId = allProviders.find(\n (item) => item.alias === element.identityProvider,\n )?.providerId!;\n }\n }\n\n return allFedIds;\n };\n\n const getAvailableIdPs = () => {\n return realmRepresentation?.identityProviders;\n };\n\n const linkedIdPsLoader = async () => {\n return getFederatedIdentities();\n };\n\n const availableIdPsLoader = async () => {\n const linkedNames = (await getFederatedIdentities()).map(\n (x) => x.identityProvider,\n );\n\n return getAvailableIdPs()?.filter(\n (item) => !linkedNames.includes(item.alias),\n )!;\n };\n\n const [toggleUnlinkDialog, UnlinkConfirm] = useConfirmDialog({\n titleKey: t(\"unlinkAccountTitle\", {\n provider: capitalize(federatedId),\n }),\n messageKey: t(\"unlinkAccountConfirm\", {\n provider: capitalize(federatedId),\n }),\n continueButtonLabel: \"unlink\",\n continueButtonVariant: ButtonVariant.primary,\n onConfirm: async () => {\n try {\n await adminClient.users.delFromFederatedIdentity({\n id: userId,\n federatedIdentityId: federatedId,\n });\n addAlert(t(\"idpUnlinkSuccess\"), AlertVariant.success);\n refresh();\n } catch (error) {\n addError(\"mappingDeletedError\", error);\n }\n },\n });\n\n const idpLinkRenderer = (idp: WithProviderId) => {\n if (!canQueryIDPDetails)\n return {capitalize(idp.identityProvider)};\n\n return (\n \n {capitalize(idp.identityProvider)}\n \n );\n };\n\n const badgeRenderer1 = (idp: FederatedIdentityRepresentation) => {\n const groupName = identityProviders?.find(\n (provider) => provider[\"id\"] === idp.identityProvider,\n )?.groupName!;\n return (\n \n );\n };\n\n const badgeRenderer2 = (idp: IdentityProviderRepresentation) => {\n const groupName = identityProviders?.find(\n (provider) => provider[\"id\"] === idp.providerId,\n )?.groupName!;\n return (\n \n );\n };\n\n const unlinkRenderer = (fedIdentity: FederatedIdentityRepresentation) => {\n if (!hasAccess(\"manage-users\")) return ;\n\n return (\n {\n setFederatedId(fedIdentity.identityProvider!);\n toggleUnlinkDialog();\n }}\n >\n {t(\"unlinkAccount\")}\n \n );\n };\n\n const linkRenderer = (idp: IdentityProviderRepresentation) => {\n return (\n {\n setFederatedId(idp.alias!);\n setIsLinkIdPModalOpen(true);\n }}\n >\n {t(\"linkAccount\")}\n \n );\n };\n\n const linkedIdpColumns = () => {\n const columns = [\n {\n name: \"identityProvider\",\n displayKey: \"name\",\n cellRenderer: idpLinkRenderer,\n transforms: [cellWidth(20)],\n },\n\n {\n name: \"userId\",\n displayKey: \"userID\",\n cellFormatters: [emptyFormatter()],\n transforms: [cellWidth(30)],\n },\n {\n name: \"userName\",\n displayKey: \"username\",\n cellFormatters: [emptyFormatter()],\n transforms: [cellWidth(20)],\n },\n {\n name: \"\",\n cellRenderer: unlinkRenderer,\n transforms: [cellWidth(20)],\n },\n ];\n\n if (canQueryIDPDetails)\n columns.splice(1, 0, {\n name: \"type\",\n displayKey: \"type\",\n cellRenderer: badgeRenderer1,\n transforms: [cellWidth(10)],\n });\n\n return columns;\n };\n\n return (\n <>\n {isLinkIdPModalOpen && (\n setIsLinkIdPModalOpen(false)}\n onRefresh={refresh}\n />\n )}\n \n \n \n \n \n {t(\"linkedIdPsText\")}\n \n \n \n {t(\"noProvidersLinked\")}\n \n }\n />\n \n {hasAccess(\"manage-users\") && canQueryIDPDetails && (\n \n \n \n {t(\"availableIdPsText\")}\n \n \n \n {t(\"noAvailableIdentityProviders\")}\n \n }\n />\n \n )}\n \n \n );\n};\n","import type { RoleMappingPayload } from \"@keycloak/keycloak-admin-client/lib/defs/roleRepresentation\";\nimport { AlertVariant } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { RoleMapping, Row } from \"../components/role-mapping/RoleMapping\";\n\ntype UserRoleMappingProps = {\n id: string;\n name: string;\n};\n\nexport const UserRoleMapping = ({ id, name }: UserRoleMappingProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { addAlert, addError } = useAlerts();\n\n const assignRoles = async (rows: Row[]) => {\n try {\n const realmRoles = rows\n .filter((row) => row.client === undefined)\n .map((row) => row.role as RoleMappingPayload)\n .flat();\n await adminClient.users.addRealmRoleMappings({\n id,\n roles: realmRoles,\n });\n await Promise.all(\n rows\n .filter((row) => row.client !== undefined)\n .map((row) =>\n adminClient.users.addClientRoleMappings({\n id,\n clientUniqueId: row.client!.id!,\n roles: [row.role as RoleMappingPayload],\n }),\n ),\n );\n addAlert(t(\"userRoleMappingUpdatedSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"roleMappingUpdatedError\", error);\n }\n };\n\n return ;\n};\n","import { PageSection } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport SessionsTable from \"../sessions/SessionsTable\";\nimport { useParams } from \"../utils/useParams\";\nimport type { UserParams } from \"./routes/User\";\n\nexport const UserSessions = () => {\n const { adminClient } = useAdminClient();\n\n const { id } = useParams();\n const { realm } = useRealm();\n const { t } = useTranslation();\n\n const loader = () => adminClient.users.listSessions({ id, realm });\n\n return (\n \n \n \n );\n};\n","import type {\n UserProfileConfig,\n UserProfileMetadata,\n} from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\nimport {\n isUserProfileError,\n setUserProfileServerError,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n ButtonVariant,\n DropdownItem,\n Label,\n PageSection,\n Tab,\n TabTitleText,\n Tooltip,\n} from \"@patternfly/react-core\";\nimport { InfoCircleIcon } from \"@patternfly/react-icons\";\nimport { TFunction } from \"i18next\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { KeyValueType } from \"../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"../components/keycloak-spinner/KeycloakSpinner\";\nimport {\n RoutableTabs,\n useRoutableTab,\n} from \"../components/routable-tabs/RoutableTabs\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useAccess } from \"../context/access/Access\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { UserProfileProvider } from \"../realm-settings/user-profile/UserProfileContext\";\nimport { useFetch } from \"../utils/useFetch\";\nimport { useParams } from \"../utils/useParams\";\nimport { UserAttributes } from \"./UserAttributes\";\nimport { UserConsents } from \"./UserConsents\";\nimport { UserCredentials } from \"./UserCredentials\";\nimport { BruteForced, UserForm } from \"./UserForm\";\nimport { UserGroups } from \"./UserGroups\";\nimport { UserIdentityProviderLinks } from \"./UserIdentityProviderLinks\";\nimport { UserRoleMapping } from \"./UserRoleMapping\";\nimport { UserSessions } from \"./UserSessions\";\nimport {\n UIUserRepresentation,\n UserFormFields,\n filterManagedAttributes,\n toUserFormFields,\n toUserRepresentation,\n} from \"./form-state\";\nimport { UserParams, UserTab, toUser } from \"./routes/User\";\nimport { toUsers } from \"./routes/Users\";\nimport { isLightweightUser } from \"./utils\";\n\nimport \"./user-section.css\";\n\nexport default function EditUser() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { addAlert, addError } = useAlerts();\n const navigate = useNavigate();\n const { hasAccess } = useAccess();\n const { id } = useParams();\n const { realm: realmName, realmRepresentation: realm } = useRealm();\n // Validation of form fields is performed on server, thus we need to clear all errors before submit\n const clearAllErrorsBeforeSubmit = async (values: UserFormFields) => ({\n values,\n errors: {},\n });\n const form = useForm({\n mode: \"onChange\",\n resolver: clearAllErrorsBeforeSubmit,\n });\n const [user, setUser] = useState();\n const [bruteForced, setBruteForced] = useState();\n const [isUnmanagedAttributesEnabled, setUnmanagedAttributesEnabled] =\n useState();\n const [userProfileMetadata, setUserProfileMetadata] =\n useState();\n const [refreshCount, setRefreshCount] = useState(0);\n const refresh = () => setRefreshCount((count) => count + 1);\n const lightweightUser = isLightweightUser(user?.id);\n const [upConfig, setUpConfig] = useState();\n\n const toTab = (tab: UserTab) =>\n toUser({\n realm: realmName,\n id: user?.id || \"\",\n tab,\n });\n\n const useTab = (tab: UserTab) => useRoutableTab(toTab(tab));\n\n const settingsTab = useTab(\"settings\");\n const attributesTab = useTab(\"attributes\");\n const credentialsTab = useTab(\"credentials\");\n const roleMappingTab = useTab(\"role-mapping\");\n const groupsTab = useTab(\"groups\");\n const consentsTab = useTab(\"consents\");\n const identityProviderLinksTab = useTab(\"identity-provider-links\");\n const sessionsTab = useTab(\"sessions\");\n\n useFetch(\n async () =>\n Promise.all([\n adminClient.users.findOne({\n id: id!,\n userProfileMetadata: true,\n }) as UIUserRepresentation | undefined,\n adminClient.attackDetection.findOne({ id: id! }),\n adminClient.users.getUnmanagedAttributes({ id: id! }),\n adminClient.users.getProfile({ realm: realmName }),\n ]),\n ([userData, attackDetection, unmanagedAttributes, upConfig]) => {\n if (!userData || !realm || !attackDetection) {\n throw new Error(t(\"notFound\"));\n }\n\n const { userProfileMetadata, ...user } = userData;\n setUserProfileMetadata(userProfileMetadata);\n user.unmanagedAttributes = unmanagedAttributes;\n user.attributes = filterManagedAttributes(\n user.attributes,\n unmanagedAttributes,\n );\n\n if (upConfig.unmanagedAttributePolicy !== undefined) {\n setUnmanagedAttributesEnabled(true);\n }\n\n setUser(user);\n setUpConfig(upConfig);\n\n const isBruteForceProtected = realm.bruteForceProtected;\n const isLocked = isBruteForceProtected && attackDetection.disabled;\n\n setBruteForced({ isBruteForceProtected, isLocked });\n\n form.reset(toUserFormFields(user));\n },\n [refreshCount],\n );\n\n const save = async (data: UserFormFields) => {\n try {\n await adminClient.users.update(\n { id: user!.id! },\n toUserRepresentation(data),\n );\n addAlert(t(\"userSaved\"), AlertVariant.success);\n refresh();\n } catch (error) {\n if (isUserProfileError(error)) {\n if (\n isUnmanagedAttributesEnabled &&\n Array.isArray(data.unmanagedAttributes)\n ) {\n const unmanagedAttributeErrors: object[] = new Array(\n data.unmanagedAttributes.length,\n );\n let someUnmanagedAttributeError = false;\n setUserProfileServerError(\n error,\n (field, params) => {\n if (field.startsWith(\"attributes.\")) {\n const attributeName = field.substring(\"attributes.\".length);\n (data.unmanagedAttributes as KeyValueType[]).forEach(\n (attr, index) => {\n if (attr.key === attributeName) {\n unmanagedAttributeErrors[index] = params;\n someUnmanagedAttributeError = true;\n }\n },\n );\n } else {\n form.setError(field, params);\n }\n },\n ((key, param) => t(key as string, param as any)) as TFunction,\n );\n if (someUnmanagedAttributeError) {\n form.setError(\n \"unmanagedAttributes\",\n unmanagedAttributeErrors as any,\n );\n }\n } else {\n setUserProfileServerError(error, form.setError, ((\n key,\n param,\n ) => t(key as string, param as any)) as TFunction);\n }\n addError(\"userNotSaved\", \"\");\n } else {\n addError(\"userCreateError\", error);\n }\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteConfirm\",\n messageKey: \"deleteConfirmCurrentUser\",\n continueButtonLabel: \"delete\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n if (lightweightUser) {\n await adminClient.users.logout({ id: user!.id! });\n } else {\n await adminClient.users.del({ id: user!.id! });\n }\n addAlert(t(\"userDeletedSuccess\"), AlertVariant.success);\n navigate(toUsers({ realm: realmName }));\n } catch (error) {\n addError(\"userDeletedError\", error);\n }\n },\n });\n\n const [toggleImpersonateDialog, ImpersonateConfirm] = useConfirmDialog({\n titleKey: \"impersonateConfirm\",\n messageKey: \"impersonateConfirmDialog\",\n continueButtonLabel: \"impersonate\",\n onConfirm: async () => {\n try {\n const data = await adminClient.users.impersonation(\n { id: user!.id! },\n { user: user!.id!, realm: realmName },\n );\n if (data.sameRealm) {\n window.location = data.redirect;\n } else {\n window.open(data.redirect, \"_blank\");\n }\n } catch (error) {\n addError(\"impersonateError\", error);\n }\n },\n });\n\n if (!user || !bruteForced) {\n return ;\n }\n\n return (\n <>\n \n \n \n }\n >\n {t(\"transientUser\")}\n \n \n ),\n },\n ]\n : []\n }\n dropdownItems={[\n toggleImpersonateDialog()}\n >\n {t(\"impersonate\")}\n ,\n toggleDeleteDialog()}\n >\n {t(\"delete\")}\n ,\n ]}\n onToggle={(value) =>\n save({\n ...toUserFormFields(user),\n enabled: value,\n })\n }\n isEnabled={user.enabled}\n />\n\n \n \n \n \n {t(\"details\")}}\n {...settingsTab}\n >\n \n \n \n \n {isUnmanagedAttributesEnabled && (\n {t(\"attributes\")}}\n {...attributesTab}\n >\n \n \n )}\n {t(\"credentials\")}}\n {...credentialsTab}\n >\n \n \n {t(\"roleMapping\")}}\n {...roleMappingTab}\n >\n \n \n {hasAccess(\"query-groups\") && (\n {t(\"groups\")}}\n {...groupsTab}\n >\n \n \n )}\n {t(\"consents\")}}\n {...consentsTab}\n >\n \n \n {t(\"identityProviderLinks\")}\n }\n {...identityProviderLinksTab}\n >\n \n \n {t(\"sessions\")}}\n {...sessionsTab}\n >\n \n \n \n \n \n \n \n );\n}\n"],"names":["nativeMin","baseIntersection","arrays","iteratee","comparator","includes","arrayIncludes","length","othLength","othIndex","caches","maxLength","result","array","arrayMap","baseUnary","SetCache","index","seen","outer","value","computed","cacheHas","cache","castArrayLikeObject","isArrayLikeObject","intersectionBy","baseRest","last","mapped","baseIteratee","mapTag","setTag","objectProto","hasOwnProperty","isEmpty","isArrayLike","isArray","isBuffer","isTypedArray","isArguments","tag","getTag","isPrototype","baseKeys","key","UserAttributes","user","save","upConfig","form","useFormContext","jsx","PageSection","PageSectionVariants","AttributesForm","toUserFormFields","UnmanagedAttributePolicy","UserConsents","adminClient","useAdminClient","selectedClient","setSelectedClient","useState","t","useTranslation","addAlert","addError","useAlerts","formatDate","useFormatDate","setKey","id","useParams","alphabetize","consentsList","sortBy","client","refresh","loader","getConsents","clientScopesRenderer","grantedClientScopes","ChipGroup","currentChip","Chip","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","AlertVariant","error","jsxs","Fragment","KeycloakDataTable","emptyFormatter","cellWidth","createDate","lastUpdatedDate","ListEmptyState","CubesIcon","CredentialDataDialog","credentialData","onClose","Modal","ModalVariant","Table","TableVariant","Thead","Tr","Th","Tbody","cred","Td","CredentialRow","credential","resetPassword","toggleDelete","children","showData","toggleShow","useToggle","kebabOpen","toggleKebab","localeSort","useLocaleSort","rows","useMemo","Button","Dropdown","ref","MenuToggle","EllipsisVIcon","DropdownList","DropdownItem","InlineLabelEdit","userId","isEditable","toggle","register","handleSubmit","useForm","Form","userLabel","FormGroup","TextInput","CheckIcon","TimesIcon","PencilAltIcon","LifespanField","TimeSelectorControl","credResetFormDefaultValues","ResetCredentialDialog","control","resetActionWatcher","useWatch","resetIsNotDisabled","sendCredentialsResetEmail","actions","lifespan","ConfirmDialogModal","FormProvider","RequiredActionMultiSelect","credFormDefaultValues","ResetPasswordDialog","isResetPassword","onAddRequiredActions","isValid","errors","watch","clearErrors","setError","confirm","password","passwordConfirmation","toggleConfirmSaveModal","ConfirmSaveModal","saveUserPassword","temporaryPassword","RequiredActionAlias","credentialLabel","c","onChange","rest","PasswordInput","e","FormErrorText","DefaultSwitchControl","UserCredentialsRow","isUserLabelEdit","setIsUserLabelEdit","UserCredentials","setUser","isOpen","setIsOpen","openCredentialReset","setOpenCredentialReset","userCredentials","setUserCredentials","groupedUserCredentials","setGroupedUserCredentials","selectedCredential","setSelectedCredential","setIsResetPassword","bodyRef","useRef","state","setState","useFetch","credentials","groupedCredentials","r","a","groupedCredentialsArray","groupedCredential","passwordTypeFinder","toggleModal","toggleCredentialsResetModal","itemOrder","onDragStart","evt","draggedItemId","styles","moveItem","items","targetItem","toIndex","fromIndex","move","ulNode","nodes","i","itemId","onDragCancel","el","onDragLeave","isValidDrop","ulRect","onDrop","onDragFinish","onDragOver","curListItem","dragId","draggingToItemIndex","item","tempItemOrder","requiredActions","onDragEnd","target","dragged","newOrder","oldIndex","newIndex","times","ids","onToggleDelete","useFederatedCredentials","credentialTypes","setCredentialTypes","KeycloakSpinner","hasCredentialTypes","noCredentials","noFederatedCredentials","emptyState","Divider","HelpItem","rowIndex","_","toUpperCase","FederatedUserLink","UserGroups","selectedGroups","setSelectedGroups","isDirectMembership","setDirectMembership","directMembershipList","setDirectMembershipList","open","setOpen","enabled","useHelp","hasAccess","useAccess","isManager","groupsList","group","first","max","search","params","searchParam","joinedUserGroups","indirect","g","paths","p","uniqBy","leave","addGroups","groups","GroupPickerDialog","Checkbox","Popover","QuestionCircleIcon","GroupPath","UserIdpModal","federatedId","onRefresh","onSubmit","federatedIdentity","capitalize","TextControl","UserIdentityProviderLinks","setFederatedId","isLinkIdPModalOpen","setIsLinkIdPModalOpen","realm","realmRepresentation","useRealm","hasSomeAccess","canQueryIDPDetails","identityProviders","useServerInfo","getFederatedIdentities","allFedIds","allProviders","element","getAvailableIdPs","linkedIdPsLoader","availableIdPsLoader","linkedNames","x","toggleUnlinkDialog","UnlinkConfirm","idpLinkRenderer","idp","Link","toIdentityProvider","badgeRenderer1","groupName","provider","Label","badgeRenderer2","unlinkRenderer","fedIdentity","linkRenderer","linkedIdpColumns","columns","FormPanel","TextContent","Text","upperCaseFormatter","UserRoleMapping","name","RoleMapping","realmRoles","row","UserSessions","SessionsTable","EditUser","navigate","useNavigate","realmName","values","bruteForced","setBruteForced","isUnmanagedAttributesEnabled","setUnmanagedAttributesEnabled","userProfileMetadata","setUserProfileMetadata","refreshCount","setRefreshCount","count","lightweightUser","isLightweightUser","setUpConfig","toTab","tab","toUser","useTab","useRoutableTab","settingsTab","attributesTab","credentialsTab","roleMappingTab","groupsTab","consentsTab","identityProviderLinksTab","sessionsTab","userData","attackDetection","unmanagedAttributes","filterManagedAttributes","isBruteForceProtected","isLocked","data","toUserRepresentation","isUserProfileError","unmanagedAttributeErrors","someUnmanagedAttributeError","setUserProfileServerError","field","attributeName","attr","param","toUsers","toggleImpersonateDialog","ImpersonateConfirm","ViewHeader","Tooltip","InfoCircleIcon","UserProfileProvider","RoutableTabs","Tab","TabTitleText","UserForm"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy