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

theme.keycloak.v2.admin.resources.assets.ClientsSection-97dbf938.js.map Maven / Gradle / Ivy

There is a newer version: 25.0.1
Show newest version
{"version":3,"file":"ClientsSection-97dbf938.js","sources":["../../../../node_modules/.pnpm/@[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';\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 { joinPath } from \"./joinPath\";\n\nexport const convertClientToUrl = (\n  { rootUrl, baseUrl }: ClientRepresentation,\n  adminClientBaseUrl: string\n) => {\n  // absolute base url configured, use base url is\n  if (baseUrl?.startsWith(\"http\")) {\n    return baseUrl;\n  }\n\n  if (\n    (rootUrl === \"${authBaseUrl}\" || rootUrl === \"${authAdminUrl}\") &&\n    baseUrl\n  ) {\n    return rootUrl.replace(\n      /\\$\\{(authAdminUrl|authBaseUrl)\\}/,\n      joinPath(adminClientBaseUrl, baseUrl)\n    );\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\";\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 { 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 { t } = useTranslation(\"clients\");\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: \"clients:tokenDeleteConfirmTitle\",\n    messageKey: t(\"tokenDeleteConfirm\", { id: token?.id }),\n    continueButtonLabel: \"common: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(\"clients:tokenDeleteError\", error);\n      }\n    },\n  });\n\n  return (\n    <>\n      \n       (\n              \n            )}\n          >\n            {t(\"common:create\")}\n          \n        }\n        actions={[\n          {\n            title: t(\"common:delete\"),\n            onRowClick: (token) => {\n              setToken(token);\n              toggleDeleteDialog();\n            },\n          } as Action,\n        ]}\n        columns={[\n          {\n            name: \"id\",\n            displayKey: \"common:id\",\n          },\n          {\n            name: \"timestamp\",\n            displayKey: \"clients:timestamp\",\n            cellRenderer: (row) =>\n              formatDate(new Date(row.timestamp! * 1000), FORMAT_DATE_AND_TIME),\n          },\n          {\n            name: \"expiration\",\n            displayKey: \"clients: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: \"clients:count\",\n          },\n          {\n            name: \"remainingCount\",\n            displayKey: \"clients: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(\"clients\");\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        \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\";\n\nimport { adminClient } 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 { t } = useTranslation(\"clients\");\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: \"clients:clientRegisterPolicyDeleteConfirmTitle\",\n    messageKey: t(\"clientRegisterPolicyDeleteConfirm\", {\n      name: selectedPolicy?.name,\n    }),\n    continueButtonLabel: \"common: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(\"clients: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          \n        }\n        actions={[\n          {\n            title: t(\"common:delete\"),\n            onRowClick: (policy) => {\n              setSelectedPolicy(policy);\n              toggleDeleteDialog();\n            },\n          } as Action,\n        ]}\n        columns={[\n          {\n            name: \"name\",\n            displayKey: \"common:name\",\n            cellRenderer: DetailLink,\n          },\n          {\n            name: \"providerId\",\n            displayKey: \"clients:providerId\",\n          },\n        ]}\n      />\n    \n  );\n};\n","import { Tab, TabTitleText } from \"@patternfly/react-core\";\nimport { useTranslation } from \"react-i18next\";\nimport { HelpItem } from \"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(\"clients\");\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 {\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\";\n\nimport { adminClient } 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 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(\"clients\");\n  const { realm } = useRealm();\n  return (\n    \n      {client.clientId}\n      {!client.enabled && (\n        \n          {t(\"common:disabled\")}\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 href = convertClientToUrl(client, adminClient.baseUrl);\n\n  if (!href) {\n    return \"—\";\n  }\n\n  return ;\n};\n\nconst ToolbarItems = () => {\n  const { t } = useTranslation(\"clients\");\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 { t } = useTranslation(\"clients\");\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: \"clients:clientDeleteConfirm\",\n    continueButtonLabel: \"common: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(\"clients: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(\"common: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(\"common:delete\"),\n                    onClick() {\n                      setSelectedClient(client);\n                      toggleDeleteDialog();\n                    },\n                  });\n                }\n\n                return actions;\n              }}\n              columns={[\n                {\n                  name: \"clientId\",\n                  displayKey: \"common:clientId\",\n                  transforms: [cellWidth(20)],\n                  cellRenderer: ClientDetailLink,\n                },\n                {\n                  name: \"clientName\",\n                  displayKey: \"common:clientName\",\n                  transforms: [cellWidth(20)],\n                  cellRenderer: ClientName,\n                },\n                {\n                  name: \"protocol\",\n                  displayKey: \"common:type\",\n                  transforms: [cellWidth(10)],\n                  cellRenderer: (client) =>\n                    getProtocolName(t, client.protocol ?? \"openid-connect\"),\n                },\n                {\n                  name: \"description\",\n                  displayKey: \"common:description\",\n                  transforms: [cellWidth(30)],\n                  cellRenderer: ClientDescription,\n                },\n                {\n                  name: \"baseUrl\",\n                  displayKey: \"clients: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","adminClientBaseUrl","joinPath","InitialAccessTokenList","useTranslation","addAlert","addError","useAlerts","realm","useRealm","formatDate","useFormatDate","navigate","useNavigate","token","setToken","useState","loader","adminClient","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","AlertVariant","error","jsxs","Fragment","jsx","KeycloakDataTable","Button","props","Link","toCreateInitialAccessToken","row","FORMAT_DATE_AND_TIME","ListEmptyState","AddProviderDialog","onConfirm","toggleDialog","t","serverInfo","useServerInfo","providers","descriptions","localeSort","useLocaleSort","rows","useMemo","d","mapByKey","Modal","ModalVariant","DataList","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","toClient","Badge","ClientName","TableText","emptyFormatter","ClientDescription","ClientHomeLink","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 - 2024 Weber Informatics LLC | Privacy Policy