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

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

There is a newer version: 25.0.1
Show newest version
{"version":3,"file":"EditUser-c3171d23.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 { useFormContext } from \"react-hook-form\";\n\nimport { AttributesForm } from \"../components/key-value-form/AttributeForm\";\nimport { UserFormFields, toUserFormFields } from \"./form-state\";\n\ntype UserAttributesProps = {\n  user: UserRepresentation;\n  save: (user: UserFormFields) => void;\n};\n\nexport const UserAttributes = ({ user, save }: UserAttributesProps) => {\n  const form = useFormContext();\n\n  return (\n    \n      \n          form.reset({\n            ...form.getValues(),\n            attributes: toUserFormFields(user).attributes,\n          })\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\";\n\nimport { adminClient } 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 [selectedClient, setSelectedClient] =\n    useState();\n  const { t } = useTranslation(\"roles\");\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: \"users:revokeClientScopesTitle\",\n    messageKey: t(\"users:revokeClientScopes\", {\n      clientId: selectedClient?.clientId,\n    }),\n    continueButtonLabel: \"common: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(\"roles:deleteGrantsError\", error);\n      }\n    },\n  });\n\n  return (\n    <>\n      \n      \n              createDate ? formatDate(new Date(createDate)) : \"—\",\n          },\n          {\n            name: \"lastUpdatedDate\",\n            displayKey: \"clients:lastUpdated\",\n            transforms: [cellWidth(10)],\n            cellRenderer: ({ lastUpdatedDate }) =>\n              lastUpdatedDate ? formatDate(new Date(lastUpdatedDate)) : \"—\",\n          },\n        ]}\n        actions={[\n          {\n            title: t(\"users: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  TableBody,\n  TableHeader,\n  TableVariant,\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(\"users\");\n  return (\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  DropdownPosition,\n  KebabToggle,\n  DropdownItem,\n} from \"@patternfly/react-core\";\n\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\";\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 { t } = useTranslation(\"users\");\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      \n        \n          {t(\"showDataBtn\")}\n        \n      \n      {credential.type === \"password\" ? (\n        \n          \n            {t(\"resetPasswordBtn\")}\n          \n        \n      ) : (\n        \n      )}\n      \n        }\n          isOpen={kebabOpen}\n          dropdownItems={[\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 { AlertVariant, Button, Form, FormGroup } from \"@patternfly/react-core\";\nimport { CheckIcon, PencilAltIcon, TimesIcon } from \"@patternfly/react-icons\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { adminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { KeycloakTextInput } from \"../../components/keycloak-text-input/KeycloakTextInput\";\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 { t } = useTranslation(\"users\");\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(\"users: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 { FormGroup } from \"@patternfly/react-core\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { HelpItem } from \"ui-shared\";\nimport { TimeSelector } from \"../../components/time-selector/TimeSelector\";\nimport { credResetFormDefaultValues } from \"./ResetCredentialDialog\";\n\nexport const LifespanField = () => {\n const { t } = useTranslation(\"users\");\n const { control } = useFormContext();\n\n return (\n \n }\n >\n (\n \n )}\n />\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\";\n\nimport { adminClient } 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 { t } = useTranslation(\"users\");\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(\"users: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 type UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport {\n AlertVariant,\n ButtonVariant,\n Form,\n FormGroup,\n Switch,\n ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { HelpItem } from \"ui-shared\";\n\nimport { adminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport {\n ConfirmDialogModal,\n useConfirmDialog,\n} from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { PasswordInput } from \"../../components/password-input/PasswordInput\";\nimport useToggle from \"../../utils/useToggle\";\n\ntype ResetPasswordDialogProps = {\n user: UserRepresentation;\n isResetPassword: boolean;\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 refresh,\n onClose,\n}: ResetPasswordDialogProps) => {\n const { t } = useTranslation(\"users\");\n const {\n register,\n control,\n formState: { isValid, errors },\n watch,\n handleSubmit,\n clearErrors,\n setError,\n } = useForm({\n defaultValues: credFormDefaultValues,\n mode: \"onChange\",\n });\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\n ? \"users:resetPasswordConfirm\"\n : \"users:setPasswordConfirm\",\n messageKey: isResetPassword\n ? t(\"resetPasswordConfirmText\", { username: user.username })\n : t(\"setPasswordConfirmText\", { username: user.username }),\n continueButtonLabel: isResetPassword\n ? \"users:resetPassword\"\n : \"users: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 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\n ? \"users:resetPasswordError\"\n : \"users: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 \n \n \n value === password ||\n t(\"confirmPasswordDoesNotMatch\").toString(),\n })}\n />\n \n \n }\n fieldId=\"kc-temporaryPassword\"\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 {\n TableComposable,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n} 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 \"ui-shared\";\n\nimport { adminClient } 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};\n\ntype ExpandableCredentialRepresentation = {\n key: string;\n value: CredentialRepresentation[];\n isExpanded: boolean;\n};\n\nexport const UserCredentials = ({ user }: UserCredentialsProps) => {\n const { t } = useTranslation(\"users\");\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 status: boolean;\n rowKey: string;\n }>();\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(\"common: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(\"users:deleteCredentialsError\", error);\n }\n },\n });\n\n const Row = ({ credential }: { credential: CredentialRepresentation }) => (\n {\n setSelectedCredential(credential);\n toggleDeleteDialog();\n }}\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\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 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(\"users:updatedCredentialMoveSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"users:updatedCredentialMoveError\", error);\n }\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 {t(\"type\")}\n {t(\"userLabel\")}\n {t(\"data\")}\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 )}\n \n {toUpperCase(groupedCredential.key)}\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 id,\n )}`,\n }}\n />\n \n {toUpperCase(credential.type!)}\n \n \n \n ))}\n \n ))}\n \n \n \n )}\n {useFederatedCredentials && hasCredentialTypes && (\n \n \n \n \n {t(\"type\")}\n {t(\"providedBy\")}\n \n \n \n \n {credentialTypes.map((credential) => (\n \n \n {credential}\n \n \n \n \n {credential === \"password\" && (\n \n \n \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 {\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 { useHelp } from \"ui-shared\";\n\nimport { adminClient } 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\";\nimport { emptyFormatter } from \"../util\";\n\ntype UserGroupsProps = {\n user: UserRepresentation;\n};\n\nexport const UserGroups = ({ user }: UserGroupsProps) => {\n const { t } = useTranslation(\"users\");\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 = g.path?.substring(1).split(\"/\").slice(0, -1) || [];\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 addAlert(t(\"removedGroupMembership\"), AlertVariant.success);\n } catch (error) {\n addError(\"users: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(\"users: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(\"whoWillAppearPopoverText\")}
}\n >\n }\n >\n {t(\"whoWillAppearLinkText\")}\n \n \n )}\n \n }\n columns={[\n {\n name: \"groupMembership\",\n displayKey: \"users:groupMembership\",\n cellRenderer: (group: GroupRepresentation) => group.name || \"\",\n cellFormatters: [emptyFormatter()],\n transforms: [cellWidth(40)],\n },\n {\n name: \"path\",\n displayKey: \"users: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 cellFormatters: [emptyFormatter()],\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 ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport { capitalize } from \"lodash-es\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { adminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { KeycloakTextInput } from \"../components/keycloak-text-input/KeycloakTextInput\";\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 { t } = useTranslation(\"users\");\n const { addAlert, addError } = useAlerts();\n const {\n register,\n handleSubmit,\n formState: { isValid, errors },\n } = useForm({\n mode: \"onChange\",\n });\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(\"users:idpLinkSuccess\"), AlertVariant.success);\n onClose();\n onRefresh();\n } catch (error) {\n addError(\"users:couldNotLinkIdP\", error);\n }\n };\n\n return (\n \n {t(\"link\")}\n ,\n \n {t(\"common:cancel\")}\n ,\n ]}\n isOpen\n >\n
\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\";\n\nimport { adminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { FormPanel } from \"../components/scroll-form/FormPanel\";\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\";\n\ntype UserIdentityProviderLinksProps = {\n userId: string;\n};\n\nexport const UserIdentityProviderLinks = ({\n userId,\n}: UserIdentityProviderLinksProps) => {\n const [key, setKey] = useState(0);\n const [federatedId, setFederatedId] = useState(\"\");\n const [isLinkIdPModalOpen, setIsLinkIdPModalOpen] = useState(false);\n\n const { realm } = useRealm();\n const { addAlert, addError } = useAlerts();\n const { t } = useTranslation(\"users\");\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 allProviders = await adminClient.identityProviders.find();\n\n const allFedIds = (await adminClient.users.listFederatedIdentities({\n id: userId,\n })) as WithProviderId[];\n for (const element of allFedIds) {\n element.providerId = allProviders.find(\n (item) => item.alias === element.identityProvider,\n )?.providerId!;\n }\n\n return allFedIds;\n };\n\n const getAvailableIdPs = async () => {\n return (await adminClient.realms.findOne({ realm }))!.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 (await getAvailableIdPs())?.filter(\n (item) => !linkedNames.includes(item.alias),\n )!;\n };\n\n const [toggleUnlinkDialog, UnlinkConfirm] = useConfirmDialog({\n titleKey: t(\"users:unlinkAccountTitle\", {\n provider: capitalize(federatedId),\n }),\n messageKey: t(\"users:unlinkAccountConfirm\", {\n provider: capitalize(federatedId),\n }),\n continueButtonLabel: \"users: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(\"users:idpUnlinkSuccess\"), AlertVariant.success);\n refresh();\n } catch (error) {\n addError(\"common:mappingDeletedError\", error);\n }\n },\n });\n\n const idpLinkRenderer = (idp: WithProviderId) => {\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 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 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(\"users:noProvidersLinked\")}\n \n }\n />\n \n \n \n \n {t(\"availableIdPsText\")}\n \n \n \n {t(\"users:noAvailableIdentityProviders\")}\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\";\n\nimport { adminClient } 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 { t } = useTranslation(\"users\");\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(\"roleMappingUpdatedSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"clients:roleMappingUpdatedError\", error);\n }\n };\n\n return ;\n};\n","import { PageSection } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { adminClient } 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 { id } = useParams();\n const { realm } = useRealm();\n const { t } = useTranslation(\"sessions\");\n\n const loader = () => adminClient.users.listSessions({ id, realm });\n\n return (\n \n \n \n );\n};\n","import RealmRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/realmRepresentation\";\nimport type UserRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/userRepresentation\";\nimport {\n AlertVariant,\n ButtonVariant,\n DropdownItem,\n PageSection,\n Tab,\n TabTitleText,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigate } from \"react-router-dom\";\nimport { adminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\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 useIsFeatureEnabled, { Feature } from \"../utils/useIsFeatureEnabled\";\nimport { useParams } from \"../utils/useParams\";\nimport { useUpdateEffect } from \"../utils/useUpdateEffect\";\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 {\n isUserProfileError,\n userProfileErrorToString,\n} from \"./UserProfileFields\";\nimport { UserRoleMapping } from \"./UserRoleMapping\";\nimport { UserSessions } from \"./UserSessions\";\nimport {\n UserFormFields,\n toUserFormFields,\n toUserRepresentation,\n} from \"./form-state\";\nimport { UserParams, UserTab, toUser } from \"./routes/User\";\nimport { toUsers } from \"./routes/Users\";\n\nimport \"./user-section.css\";\n\nexport default function EditUser() {\n const { realm } = useRealm();\n const { id } = useParams();\n const { t } = useTranslation(\"users\");\n const [user, setUser] = useState();\n const [bruteForced, setBruteForced] = useState();\n const [refreshCount, setRefreshCount] = useState(0);\n const refresh = () => setRefreshCount((count) => count + 1);\n\n useFetch(\n async () => {\n const [user, currentRealm, attackDetection] = await Promise.all([\n adminClient.users.findOne({ id: id!, userProfileMetadata: true }),\n adminClient.realms.findOne({ realm }),\n adminClient.attackDetection.findOne({ id: id! }),\n ]);\n\n if (!user || !currentRealm || !attackDetection) {\n throw new Error(t(\"common:notFound\"));\n }\n\n const isBruteForceProtected = currentRealm.bruteForceProtected;\n const isLocked = isBruteForceProtected && attackDetection.disabled;\n\n return { user, bruteForced: { isBruteForceProtected, isLocked } };\n },\n ({ user, bruteForced }) => {\n setUser(user);\n setBruteForced(bruteForced);\n },\n [refreshCount],\n );\n\n if (!user || !bruteForced) {\n return ;\n }\n\n return (\n \n );\n}\n\ntype EditUserFormProps = {\n user: UserRepresentation;\n bruteForced: BruteForced;\n refresh: () => void;\n};\n\nconst EditUserForm = ({ user, bruteForced, refresh }: EditUserFormProps) => {\n const { t } = useTranslation(\"users\");\n const { realm } = useRealm();\n const { addAlert, addError } = useAlerts();\n const navigate = useNavigate();\n const { hasAccess } = useAccess();\n const userForm = useForm({\n mode: \"onChange\",\n defaultValues: toUserFormFields(user),\n });\n\n const [realmRepresentation, setRealmRepresentattion] =\n useState();\n\n useFetch(\n () => adminClient.realms.findOne({ realm }),\n (realm) => {\n if (!realm) {\n throw new Error(t(\"common:notFound\"));\n }\n setRealmRepresentattion(realm);\n },\n [],\n );\n\n const isFeatureEnabled = useIsFeatureEnabled();\n const isUserProfileEnabled =\n isFeatureEnabled(Feature.DeclarativeUserProfile) &&\n realmRepresentation?.attributes?.userProfileEnabled === \"true\";\n\n const toTab = (tab: UserTab) =>\n toUser({\n realm,\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 // Ensure the form remains up-to-date when the user is updated.\n useUpdateEffect(() => userForm.reset(toUserFormFields(user)), [user]);\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 addError(userProfileErrorToString(error), error);\n } else {\n addError(\"users:userCreateError\", error);\n }\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"users:deleteConfirm\",\n messageKey: \"users:deleteConfirmCurrentUser\",\n continueButtonLabel: \"common:delete\",\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n try {\n await adminClient.users.del({ id: user.id! });\n addAlert(t(\"userDeletedSuccess\"), AlertVariant.success);\n navigate(toUsers({ realm }));\n } catch (error) {\n addError(\"users:userDeletedError\", error);\n }\n },\n });\n\n const [toggleImpersonateDialog, ImpersonateConfirm] = useConfirmDialog({\n titleKey: \"users:impersonateConfirm\",\n messageKey: \"users:impersonateConfirmDialog\",\n continueButtonLabel: \"users:impersonate\",\n onConfirm: async () => {\n try {\n const data = await adminClient.users.impersonation(\n { id: user.id! },\n { user: user.id!, realm },\n );\n if (data.sameRealm) {\n window.location = data.redirect;\n } else {\n window.open(data.redirect, \"_blank\");\n }\n } catch (error) {\n addError(\"users:impersonateError\", error);\n }\n },\n });\n\n return (\n <>\n \n \n toggleImpersonateDialog()}\n >\n {t(\"impersonate\")}\n ,\n toggleDeleteDialog()}\n >\n {t(\"common:delete\")}\n ,\n ]}\n onToggle={(value) =>\n save({ ...toUserFormFields(user), enabled: value })\n }\n isEnabled={user.enabled}\n />\n\n \n \n \n \n {t(\"common:details\")}}\n {...settingsTab}\n >\n \n \n \n \n {!isUserProfileEnabled && (\n {t(\"common:attributes\")}}\n {...attributesTab}\n >\n \n \n )}\n {t(\"common:credentials\")}}\n {...credentialsTab}\n >\n \n \n {t(\"roleMapping\")}}\n {...roleMappingTab}\n >\n \n \n {hasAccess(\"query-groups\") && (\n {t(\"common:groups\")}}\n {...groupsTab}\n >\n \n \n )}\n {t(\"consents\")}}\n {...consentsTab}\n >\n \n \n {hasAccess(\"view-identity-providers\") && (\n {t(\"identityProviderLinks\")}\n }\n {...identityProviderLinksTab}\n >\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","arrayIncludesWith","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","intersectionBy$1","mapTag","setTag","objectProto","hasOwnProperty","isEmpty","isArrayLike","isArray","isBuffer","isTypedArray","isArguments","tag","getTag","isPrototype","baseKeys","key","UserAttributes","user","save","form","useFormContext","jsx","PageSection","PageSectionVariants","AttributesForm","toUserFormFields","UserConsents","selectedClient","setSelectedClient","useState","t","useTranslation","addAlert","addError","useAlerts","formatDate","useFormatDate","setKey","id","useParams","alphabetize","consentsList","sortBy","client","refresh","loader","getConsents","adminClient","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","TableHeader","TableBody","CredentialRow","credential","resetPassword","toggleDelete","children","showData","toggleShow","useToggle","kebabOpen","toggleKebab","localeSort","useLocaleSort","rows","useMemo","Td","Button","Dropdown","DropdownPosition","KebabToggle","DropdownItem","InlineLabelEdit","userId","isEditable","toggle","register","handleSubmit","useForm","saveUserLabel","userLabel","Form","FormGroup","KeycloakTextInput","CheckIcon","TimesIcon","PencilAltIcon","LifespanField","control","HelpItem","Controller","credResetFormDefaultValues","field","TimeSelector","ResetCredentialDialog","resetActionWatcher","useWatch","resetIsNotDisabled","sendCredentialsResetEmail","actions","lifespan","ConfirmDialogModal","FormProvider","RequiredActionMultiSelect","credFormDefaultValues","ResetPasswordDialog","isResetPassword","isValid","errors","watch","clearErrors","setError","confirm","password","passwordConfirmation","toggleConfirmSaveModal","ConfirmSaveModal","saveUserPassword","temporaryPassword","credentialLabel","c","onChange","rest","ValidatedOptions","PasswordInput","e","Switch","UserCredentials","isOpen","setIsOpen","openCredentialReset","setOpenCredentialReset","userCredentials","setUserCredentials","groupedUserCredentials","setGroupedUserCredentials","selectedCredential","setSelectedCredential","setIsResetPassword","isUserLabelEdit","setIsUserLabelEdit","bodyRef","useRef","state","setState","useFetch","credentials","groupedCredentials","r","a","groupedCredentialsArray","groupedCredential","passwordTypeFinder","toggleModal","toggleCredentialsResetModal","Row","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","onDragEnd","target","dragged","newOrder","oldIndex","newIndex","times","ids","useFederatedCredentials","credentialTypes","setCredentialTypes","KeycloakSpinner","hasCredentialTypes","noCredentials","noFederatedCredentials","emptyState","Divider","TableComposable","Thead","Tr","Th","Tbody","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","UserIdentityProviderLinks","setFederatedId","isLinkIdPModalOpen","setIsLinkIdPModalOpen","realm","useRealm","identityProviders","useServerInfo","getFederatedIdentities","allProviders","allFedIds","element","getAvailableIdPs","linkedIdPsLoader","availableIdPsLoader","linkedNames","x","toggleUnlinkDialog","UnlinkConfirm","idpLinkRenderer","idp","Link","toIdentityProvider","badgeRenderer1","groupName","provider","Label","badgeRenderer2","unlinkRenderer","fedIdentity","linkRenderer","FormPanel","TextContent","Text","upperCaseFormatter","UserRoleMapping","name","assignRoles","realmRoles","row","RoleMapping","UserSessions","SessionsTable","EditUser","setUser","bruteForced","setBruteForced","refreshCount","setRefreshCount","count","currentRealm","attackDetection","isBruteForceProtected","isLocked","EditUserForm","navigate","useNavigate","userForm","realmRepresentation","setRealmRepresentattion","isUserProfileEnabled","useIsFeatureEnabled","Feature","toTab","tab","toUser","useTab","useRoutableTab","settingsTab","attributesTab","credentialsTab","roleMappingTab","groupsTab","consentsTab","identityProviderLinksTab","sessionsTab","useUpdateEffect","data","toUserRepresentation","isUserProfileError","userProfileErrorToString","toUsers","toggleImpersonateDialog","ImpersonateConfirm","ViewHeader","UserProfileProvider","RoutableTabs","Tab","TabTitleText","UserForm"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy