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

theme.keycloak.v2.admin.resources.assets.ClientsSection-21sxv367.js.map Maven / Gradle / Ivy

There is a newer version: 26.0.7
Show newest version
{"version":3,"file":"ClientsSection-21sxv367.js","sources":["../../../../../node_modules/.pnpm/@[email protected][email protected][email protected][email protected]/node_modules/@patternfly/react-table/dist/esm/components/Table/utils/decorators/wrappable.js","../../src/utils/client-url.ts","../../src/clients/initial-access/InitialAccessTokenList.tsx","../../src/clients/registration/AddProviderDialog.tsx","../../src/clients/registration/ClientRegistrationList.tsx","../../src/clients/registration/ClientRegistration.tsx","../../src/clients/ClientsSection.tsx"],"sourcesContent":["import styles from '@patternfly/react-styles/css/components/Table/table.mjs';\nexport const breakWord = () => ({\n    className: styles.modifiers.breakWord\n});\nexport const fitContent = () => ({\n    className: styles.modifiers.fitContent\n});\nexport const nowrap = () => ({\n    className: styles.modifiers.nowrap\n});\nexport const truncate = () => ({\n    className: styles.modifiers.truncate\n});\nexport const wrappable = () => ({\n    className: styles.modifiers.wrap\n});\n//# sourceMappingURL=wrappable.js.map","import ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type { Environment } from \"../environment\";\nimport { joinPath } from \"./joinPath\";\n\nexport const convertClientToUrl = (\n  { rootUrl, baseUrl }: ClientRepresentation,\n  environment: Environment,\n) => {\n  // absolute base url configured, use base url is\n  if (baseUrl?.startsWith(\"http\")) {\n    return baseUrl;\n  }\n\n  if (rootUrl === \"${authAdminUrl}\") {\n    return rootUrl.replace(/\\$\\{(authAdminUrl)\\}/, environment.adminBaseUrl);\n  }\n\n  if (rootUrl === \"${authBaseUrl}\") {\n    return rootUrl.replace(/\\$\\{(authBaseUrl)\\}/, environment.serverBaseUrl);\n  }\n\n  if (rootUrl?.startsWith(\"http\")) {\n    if (baseUrl) {\n      return joinPath(rootUrl, baseUrl);\n    }\n    return rootUrl;\n  }\n\n  return baseUrl;\n};\n","import type ClientInitialAccessPresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientInitialAccessPresentation\";\nimport { AlertVariant, Button, ButtonVariant } from \"@patternfly/react-core\";\nimport { wrappable } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\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 { useRealm } from \"../../context/realm-context/RealmContext\";\nimport useFormatDate, { FORMAT_DATE_AND_TIME } from \"../../utils/useFormatDate\";\nimport { toCreateInitialAccessToken } from \"../routes/CreateInitialAccessToken\";\n\nexport const InitialAccessTokenList = () => {\n  const { adminClient } = useAdminClient();\n\n  const { t } = useTranslation();\n\n  const { addAlert, addError } = useAlerts();\n  const { realm } = useRealm();\n  const formatDate = useFormatDate();\n\n  const navigate = useNavigate();\n\n  const [token, setToken] = useState();\n\n  const loader = async () => {\n    try {\n      return await adminClient.realms.getClientsInitialAccess({ realm });\n    } catch (error) {\n      return [];\n    }\n  };\n\n  const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n    titleKey: \"tokenDeleteConfirmTitle\",\n    messageKey: t(\"tokenDeleteConfirm\", { id: token?.id }),\n    continueButtonLabel: \"delete\",\n    continueButtonVariant: ButtonVariant.danger,\n    onConfirm: async () => {\n      try {\n        await adminClient.realms.delClientsInitialAccess({\n          realm,\n          id: token!.id!,\n        });\n        addAlert(t(\"tokenDeleteSuccess\"), AlertVariant.success);\n        setToken(undefined);\n      } catch (error) {\n        addError(\"tokenDeleteError\", error);\n      }\n    },\n  });\n\n  return (\n    <>\n      \n       (\n              \n            )}\n          >\n            {t(\"create\")}\n          \n        }\n        actions={[\n          {\n            title: t(\"delete\"),\n            onRowClick: (token) => {\n              setToken(token);\n              toggleDeleteDialog();\n            },\n          } as Action,\n        ]}\n        columns={[\n          {\n            name: \"id\",\n            displayKey: \"id\",\n          },\n          {\n            name: \"timestamp\",\n            displayKey: \"timestamp\",\n            cellRenderer: (row) =>\n              formatDate(new Date(row.timestamp! * 1000), FORMAT_DATE_AND_TIME),\n          },\n          {\n            name: \"expiration\",\n            displayKey: \"expires\",\n            cellRenderer: (row) =>\n              formatDate(\n                new Date(row.timestamp! * 1000 + row.expiration! * 1000),\n                FORMAT_DATE_AND_TIME,\n              ),\n          },\n          {\n            name: \"count\",\n            displayKey: \"count\",\n          },\n          {\n            name: \"remainingCount\",\n            displayKey: \"remainingCount\",\n            transforms: [wrappable],\n          },\n        ]}\n        emptyState={\n          \n              navigate(toCreateInitialAccessToken({ realm }))\n            }\n          />\n        }\n      />\n    \n  );\n};\n","import {\n  DataList,\n  DataListCell,\n  DataListItem,\n  DataListItemCells,\n  DataListItemRow,\n  Modal,\n  ModalVariant,\n} from \"@patternfly/react-core\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useServerInfo } from \"../../context/server-info/ServerInfoProvider\";\nimport useLocaleSort, { mapByKey } from \"../../utils/useLocaleSort\";\n\ntype AddProviderDialogProps = {\n  onConfirm: (providerId: string) => void;\n  toggleDialog: () => void;\n};\n\nexport const AddProviderDialog = ({\n  onConfirm,\n  toggleDialog,\n}: AddProviderDialogProps) => {\n  const { t } = useTranslation();\n  const serverInfo = useServerInfo();\n  const providers = Object.keys(\n    serverInfo.providers?.[\"client-registration-policy\"].providers || [],\n  );\n\n  const descriptions =\n    serverInfo.componentTypes?.[\n      \"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy\"\n    ];\n  const localeSort = useLocaleSort();\n\n  const rows = useMemo(\n    () =>\n      localeSort(\n        descriptions?.filter((d) => providers.includes(d.id)) || [],\n        mapByKey(\"id\"),\n      ),\n    [providers, descriptions],\n  );\n  return (\n    \n       {\n          onConfirm(id);\n          toggleDialog();\n        }}\n        aria-label={t(\"addPredefinedMappers\")}\n        isCompact\n      >\n        \n          \n             (\n                \n                  {name}\n                \n              ))}\n            />\n          \n        \n        {rows.map((provider) => (\n          \n            \n              \n                    {provider.id}\n                  ,\n                  \n                    {provider.helpText}\n                  ,\n                ]}\n              />\n            \n          \n        ))}\n      \n    \n  );\n};\n","import ComponentRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/componentRepresentation\";\nimport { Button, ButtonVariant, ToolbarItem } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport {\n  Action,\n  KeycloakDataTable,\n} from \"../../components/table-toolbar/KeycloakDataTable\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { useFetch } from \"../../utils/useFetch\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toRegistrationProvider } from \"../routes/AddRegistrationProvider\";\nimport { ClientRegistrationParams } from \"../routes/ClientRegistration\";\nimport { AddProviderDialog } from \"./AddProviderDialog\";\n\ntype ClientRegistrationListProps = {\n  subType: \"anonymous\" | \"authenticated\";\n};\n\nconst DetailLink = (comp: ComponentRepresentation) => {\n  const { realm } = useRealm();\n  const { subTab } = useParams();\n\n  return (\n    \n      {comp.name}\n    \n  );\n};\n\nexport const ClientRegistrationList = ({\n  subType,\n}: ClientRegistrationListProps) => {\n  const { adminClient } = useAdminClient();\n\n  const { t } = useTranslation();\n  const { subTab } = useParams();\n  const navigate = useNavigate();\n\n  const { addAlert, addError } = useAlerts();\n  const { realm } = useRealm();\n  const [policies, setPolicies] = useState([]);\n  const [selectedPolicy, setSelectedPolicy] =\n    useState();\n  const [isAddDialogOpen, toggleAddDialog] = useToggle();\n\n  useFetch(\n    () =>\n      adminClient.components.find({\n        type: \"org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy\",\n      }),\n    (policies) => setPolicies(policies.filter((p) => p.subType === subType)),\n    [selectedPolicy],\n  );\n\n  const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n    titleKey: \"clientRegisterPolicyDeleteConfirmTitle\",\n    messageKey: t(\"clientRegisterPolicyDeleteConfirm\", {\n      name: selectedPolicy?.name,\n    }),\n    continueButtonLabel: \"delete\",\n    continueButtonVariant: ButtonVariant.danger,\n    onConfirm: async () => {\n      try {\n        await adminClient.components.del({\n          realm,\n          id: selectedPolicy?.id!,\n        });\n        addAlert(t(\"clientRegisterPolicyDeleteSuccess\"));\n        setSelectedPolicy(undefined);\n      } catch (error) {\n        addError(\"clientRegisterPolicyDeleteError\", error);\n      }\n    },\n  });\n\n  return (\n    <>\n      {isAddDialogOpen && (\n        \n            navigate(\n              toRegistrationProvider({\n                realm,\n                subTab: subTab || \"anonymous\",\n                providerId,\n              }),\n            )\n          }\n          toggleDialog={toggleAddDialog}\n        />\n      )}\n      \n      \n            \n              {t(\"createPolicy\")}\n            \n          \n        }\n        actions={[\n          {\n            title: t(\"delete\"),\n            onRowClick: (policy) => {\n              setSelectedPolicy(policy);\n              toggleDeleteDialog();\n            },\n          } as Action,\n        ]}\n        columns={[\n          {\n            name: \"name\",\n            displayKey: \"name\",\n            cellRenderer: DetailLink,\n          },\n          {\n            name: \"providerId\",\n            displayKey: \"providerId\",\n          },\n        ]}\n      />\n    \n  );\n};\n","import { Tab, TabTitleText } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\nimport { HelpItem } from \"@keycloak/keycloak-ui-shared\";\nimport {\n  RoutableTabs,\n  useRoutableTab,\n} from \"../../components/routable-tabs/RoutableTabs\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport {\n  ClientRegistrationTab,\n  toClientRegistration,\n} from \"../routes/ClientRegistration\";\nimport { ClientRegistrationList } from \"./ClientRegistrationList\";\n\nexport const ClientRegistration = () => {\n  const { t } = useTranslation();\n  const { realm } = useRealm();\n\n  const useTab = (subTab: ClientRegistrationTab) =>\n    useRoutableTab(toClientRegistration({ realm, subTab }));\n\n  const anonymousTab = useTab(\"anonymous\");\n  const authenticatedTab = useTab(\"authenticated\");\n\n  return (\n    \n      \n            {t(\"anonymousAccessPolicies\")}{\" \"}\n            \n          \n        }\n        {...anonymousTab}\n      >\n        \n      \n      \n            {t(\"authenticatedAccessPolicies\")}{\" \"}\n            \n          \n        }\n        {...authenticatedTab}\n      >\n        \n      \n    \n  );\n};\n","import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type { ClientQuery } from \"@keycloak/keycloak-admin-client/lib/resources/clients\";\nimport { useEnvironment } from \"@keycloak/keycloak-ui-shared\";\nimport {\n  AlertVariant,\n  Badge,\n  Button,\n  ButtonVariant,\n  PageSection,\n  Tab,\n  TabTitleText,\n  ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { IRowData, TableText, cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { FormattedLink } from \"../components/external-link/FormattedLink\";\nimport {\n  RoutableTabs,\n  useRoutableTab,\n} from \"../components/routable-tabs/RoutableTabs\";\nimport {\n  Action,\n  KeycloakDataTable,\n} from \"../components/table-toolbar/KeycloakDataTable\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useAccess } from \"../context/access/Access\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { Environment } from \"../environment\";\nimport helpUrls from \"../help-urls\";\nimport { emptyFormatter, exportClient } from \"../util\";\nimport { convertClientToUrl } from \"../utils/client-url\";\nimport { InitialAccessTokenList } from \"./initial-access/InitialAccessTokenList\";\nimport { ClientRegistration } from \"./registration/ClientRegistration\";\nimport { toAddClient } from \"./routes/AddClient\";\nimport { toClient } from \"./routes/Client\";\nimport { ClientsTab, toClients } from \"./routes/Clients\";\nimport { toImportClient } from \"./routes/ImportClient\";\nimport { getProtocolName, isRealmClient } from \"./utils\";\n\nconst ClientDetailLink = (client: ClientRepresentation) => {\n  const { t } = useTranslation();\n  const { realm } = useRealm();\n  return (\n    \n      \n        {client.clientId}\n        {!client.enabled && (\n          \n            {t(\"disabled\")}\n          \n        )}\n      \n    \n  );\n};\n\nconst ClientName = (client: ClientRepresentation) => (\n  \n    {emptyFormatter()(client.name) as string}\n  \n);\n\nconst ClientDescription = (client: ClientRepresentation) => (\n  \n    {emptyFormatter()(client.description) as string}\n  \n);\n\nconst ClientHomeLink = (client: ClientRepresentation) => {\n  const { environment } = useEnvironment();\n  const href = convertClientToUrl(client, environment);\n\n  if (!href) {\n    return \"—\";\n  }\n\n  return ;\n};\n\nconst ToolbarItems = () => {\n  const { t } = useTranslation();\n  const { realm } = useRealm();\n\n  const { hasAccess } = useAccess();\n  const isManager = hasAccess(\"manage-clients\");\n\n  if (!isManager) return ;\n\n  return (\n    <>\n      \n         }\n        >\n          {t(\"createClient\")}\n        \n      \n      \n         (\n            \n          )}\n          variant=\"link\"\n          data-testid=\"importClient\"\n        >\n          {t(\"importClient\")}\n        \n      \n    \n  );\n};\n\nexport default function ClientsSection() {\n  const { adminClient } = useAdminClient();\n\n  const { t } = useTranslation();\n  const { addAlert, addError } = useAlerts();\n  const { realm } = useRealm();\n\n  const [key, setKey] = useState(0);\n  const refresh = () => setKey(new Date().getTime());\n  const [selectedClient, setSelectedClient] = useState();\n\n  const { hasAccess } = useAccess();\n  const isManager = hasAccess(\"manage-clients\");\n\n  const loader = async (first?: number, max?: number, search?: string) => {\n    const params: ClientQuery = {\n      first: first!,\n      max: max!,\n    };\n    if (search) {\n      params.clientId = search;\n      params.search = true;\n    }\n    return await adminClient.clients.find({ ...params });\n  };\n\n  const useTab = (tab: ClientsTab) => useRoutableTab(toClients({ realm, tab }));\n\n  const listTab = useTab(\"list\");\n  const initialAccessTokenTab = useTab(\"initial-access-token\");\n  const clientRegistrationTab = useTab(\"client-registration\");\n\n  const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n    titleKey: t(\"clientDelete\", { clientId: selectedClient?.clientId }),\n    messageKey: \"clientDeleteConfirm\",\n    continueButtonLabel: \"delete\",\n    continueButtonVariant: ButtonVariant.danger,\n    onConfirm: async () => {\n      try {\n        await adminClient.clients.del({\n          id: selectedClient!.id!,\n        });\n        addAlert(t(\"clientDeletedSuccess\"), AlertVariant.success);\n        refresh();\n      } catch (error) {\n        addError(\"clientDeleteError\", error);\n      }\n    },\n  });\n\n  return (\n    <>\n      \n      \n        \n          {t(\"clientsList\")}}\n            {...listTab}\n          >\n            \n            }\n              actionResolver={(rowData: IRowData) => {\n                const client: ClientRepresentation = rowData.data;\n                const actions: Action[] = [\n                  {\n                    title: t(\"export\"),\n                    onClick() {\n                      exportClient(client);\n                    },\n                  },\n                ];\n\n                if (\n                  !isRealmClient(client) &&\n                  (isManager || client.access?.configure)\n                ) {\n                  actions.push({\n                    title: t(\"delete\"),\n                    onClick() {\n                      setSelectedClient(client);\n                      toggleDeleteDialog();\n                    },\n                  });\n                }\n\n                return actions;\n              }}\n              columns={[\n                {\n                  name: \"clientId\",\n                  displayKey: \"clientId\",\n                  transforms: [cellWidth(20)],\n                  cellRenderer: ClientDetailLink,\n                },\n                {\n                  name: \"clientName\",\n                  displayKey: \"clientName\",\n                  transforms: [cellWidth(20)],\n                  cellRenderer: ClientName,\n                },\n                {\n                  name: \"protocol\",\n                  displayKey: \"type\",\n                  transforms: [cellWidth(10)],\n                  cellRenderer: (client) =>\n                    getProtocolName(t, client.protocol ?? \"openid-connect\"),\n                },\n                {\n                  name: \"description\",\n                  displayKey: \"description\",\n                  transforms: [cellWidth(30)],\n                  cellRenderer: ClientDescription,\n                },\n                {\n                  name: \"baseUrl\",\n                  displayKey: \"homeURL\",\n                  transforms: [cellWidth(20)],\n                  cellRenderer: ClientHomeLink,\n                },\n              ]}\n            />\n          \n          {t(\"initialAccessToken\")}}\n            {...initialAccessTokenTab}\n          >\n            \n          \n          {t(\"clientRegistration\")}}\n            {...clientRegistrationTab}\n          >\n            \n          \n        \n      \n    \n  );\n}\n"],"names":["wrappable","styles","convertClientToUrl","rootUrl","baseUrl","environment","joinPath","InitialAccessTokenList","adminClient","useAdminClient","t","useTranslation","addAlert","addError","useAlerts","realm","useRealm","formatDate","useFormatDate","navigate","useNavigate","token","setToken","useState","loader","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","AlertVariant","error","jsxs","Fragment","jsx","KeycloakDataTable","Button","props","Link","toCreateInitialAccessToken","row","FORMAT_DATE_AND_TIME","ListEmptyState","AddProviderDialog","onConfirm","toggleDialog","serverInfo","useServerInfo","providers","descriptions","localeSort","useLocaleSort","rows","useMemo","d","mapByKey","Modal","ModalVariant","DataList","_event","id","DataListItem","DataListItemRow","DataListItemCells","name","DataListCell","provider","DetailLink","comp","subTab","useParams","toRegistrationProvider","ClientRegistrationList","subType","policies","setPolicies","selectedPolicy","setSelectedPolicy","isAddDialogOpen","toggleAddDialog","useToggle","useFetch","p","providerId","ToolbarItem","policy","ClientRegistration","useTab","useRoutableTab","toClientRegistration","anonymousTab","authenticatedTab","RoutableTabs","Tab","TabTitleText","HelpItem","ClientDetailLink","client","TableText","toClient","Badge","ClientName","emptyFormatter","ClientDescription","ClientHomeLink","useEnvironment","href","FormattedLink","ToolbarItems","hasAccess","useAccess","toAddClient","toImportClient","ClientsSection","key","setKey","refresh","selectedClient","setSelectedClient","isManager","first","max","search","params","tab","toClients","listTab","initialAccessTokenTab","clientRegistrationTab","ViewHeader","helpUrls","PageSection","rowData","actions","exportClient","isRealmClient","cellWidth","getProtocolName"],"mappings":"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","x_google_ignoreList":[0]}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy