/* eslint-disable */ // @ts-nocheck import type ComponentRepresentation from "@keycloak/keycloak-admin-client/lib/defs/componentRepresentation"; import type { KeyMetadataRepresentation } from "@keycloak/keycloak-admin-client/lib/defs/keyMetadataRepresentation"; import { KeycloakDataTable, KeycloakSelect, SelectVariant, useFetch, } from "../../../shared/keycloak-ui-shared"; import { Button, ButtonVariant, PageSection, SelectOption, } from "../../../shared/@patternfly/react-core"; import { FilterIcon } from "../../../shared/@patternfly/react-icons"; import { cellWidth } from "../../../shared/@patternfly/react-table"; import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { useAdminClient } from "../../admin-client"; import { useConfirmDialog } from "../../components/confirm-dialog/ConfirmDialog"; import { KeycloakSpinner } from "../../../shared/keycloak-ui-shared"; import { ListEmptyState } from "../../../shared/keycloak-ui-shared"; import { useRealm } from "../../context/realm-context/RealmContext"; import { emptyFormatter } from "../../util"; import useFormatDate from "../../utils/useFormatDate"; import useToggle from "../../utils/useToggle"; import { toKeysTab } from "../routes/KeysTab"; import "../realm-settings-section.css"; const FILTER_OPTIONS = ["ACTIVE", "PASSIVE", "DISABLED"] as const; type FilterType = (typeof FILTER_OPTIONS)[number]; type KeyData = KeyMetadataRepresentation & { provider?: string; }; type KeysListTabProps = { realmComponents: ComponentRepresentation[]; }; type SelectFilterProps = { onFilter: (filter: FilterType) => void; }; const SelectFilter = ({ onFilter }: SelectFilterProps) => { const { t } = useTranslation(); const [filterType, setFilterType] = useState(FILTER_OPTIONS[0]); const [filterDropdownOpen, toggleFilter] = useToggle(); return ( } onSelect={(value) => { const filter = FILTER_OPTIONS.find((o) => o === value.toString()) || FILTER_OPTIONS[0]; setFilterType(filter); onFilter(filter); toggleFilter(); }} selections={filterType} aria-label={t("selectFilterType")} > {FILTER_OPTIONS.map((option) => ( {t(`keysFilter.${option}`)} ))} ); }; export const KeysListTab = ({ realmComponents }: KeysListTabProps) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const navigate = useNavigate(); const formatDate = useFormatDate(); const [publicKey, setPublicKey] = useState(""); const [certificate, setCertificate] = useState(""); const { realm } = useRealm(); const [keyData, setKeyData] = useState(); const [filter, setFilter] = useState(FILTER_OPTIONS[0]); const filteredKeyData = useMemo( () => keyData?.filter(({ status }) => status === filter), [keyData, filter], ); useFetch( async () => { const keysMetaData = await adminClient.realms.getKeys({ realm }); return keysMetaData.keys?.map((key) => { const provider = realmComponents.find( (component: ComponentRepresentation) => component.id === key.providerId, ); return { ...key, provider: provider?.name } as KeyData; })!; }, setKeyData, [], ); const [togglePublicKeyDialog, PublicKeyDialog] = useConfirmDialog({ titleKey: t("publicKey"), messageKey: publicKey, continueButtonLabel: "close", continueButtonVariant: ButtonVariant.primary, onConfirm: () => Promise.resolve(), }); const [toggleCertificateDialog, CertificateDialog] = useConfirmDialog({ titleKey: t("certificate"), messageKey: certificate, continueButtonLabel: "close", continueButtonVariant: ButtonVariant.primary, onConfirm: () => Promise.resolve(), }); if (!keyData) { return ; } return ( setFilter(filterType)} /> } columns={[ { name: "algorithm", displayKey: "algorithm", cellFormatters: [emptyFormatter()], transforms: [cellWidth(15)], }, { name: "type", displayKey: "type", cellFormatters: [emptyFormatter()], transforms: [cellWidth(10)], }, { name: "kid", displayKey: "kid", cellFormatters: [emptyFormatter()], transforms: [cellWidth(10)], }, { name: "use", displayKey: "use", cellFormatters: [emptyFormatter()], transforms: [cellWidth(10)], }, { name: "provider", displayKey: "provider", cellRenderer: ({ provider }: KeyData) => provider || "-", transforms: [cellWidth(10)], }, { name: "validTo", displayKey: "validTo", cellRenderer: ({ validTo }: KeyData) => validTo ? formatDate(new Date(validTo)) : "-", transforms: [cellWidth(10)], }, { name: "publicKeys", displayKey: "publicKeys", cellRenderer: ({ publicKey, certificate }: KeyData) => { if (certificate) { return (
); } else if (publicKey) { return ( ); } else return ""; }, transforms: [cellWidth(20)], }, ]} isSearching={!!filteredKeyData} emptyState={ navigate(toKeysTab({ realm, tab: "providers" })) } /> } />
); };