/* eslint-disable */ // @ts-nocheck import type ClientScopeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientScopeRepresentation"; import KeycloakAdminClient from "@keycloak/keycloak-admin-client"; import type { TFunction } from "i18next"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { toUpperCase } from "../../util"; import { DropdownItem, Label, MenuToggle, Select, SelectOption, SelectProps, } from "../../../shared/@patternfly/react-core"; export enum ClientScope { default = "default", optional = "optional", } export enum AllClientScopes { none = "none", } export type ClientScopeType = ClientScope; export type AllClientScopeType = ClientScope | AllClientScopes; const clientScopeTypes = Object.keys(ClientScope); export const allClientScopeTypes = Object.keys({ ...AllClientScopes, ...ClientScope, }) as AllClientScopeType[]; export const isParameterizedScope = (scope: ClientScopeRepresentation) => scope.attributes?.["is.parameterized.scope"] === "true"; export const ParameterizedScopeLabel = () => ( ); const filterDefaultForParameterized = ( types: string[], scopes: ClientScopeRepresentation[], ) => scopes.some(isParameterizedScope) ? types.filter((t) => t !== ClientScope.default) : types; export const clientScopeTypesSelectOptions = ( t: TFunction, scopeTypes: string[] | undefined = clientScopeTypes, scopes: ClientScopeRepresentation[] = [], ) => filterDefaultForParameterized(scopeTypes, scopes).map((type) => ( {t(`clientScopeType.${type}`)} )); export const clientScopeTypesDropdown = ( t: TFunction, onClick: (scope: ClientScopeType) => void, scopes: ClientScopeRepresentation[] = [], ) => filterDefaultForParameterized(clientScopeTypes, scopes).map((type) => ( onClick(type as ClientScopeType)}> {t(`clientScopeType.${type}`)} )); type CellDropdownProps = Omit & { clientScope: ClientScopeRepresentation; type: ClientScopeType | AllClientScopeType; all?: boolean; onSelect: (value: ClientScopeType | AllClientScopeType) => void; isDisabled?: boolean; }; export const CellDropdown = ({ clientScope, type, onSelect, all = false, isDisabled, ...props }: CellDropdownProps) => { const { t } = useTranslation(); const [open, setOpen] = useState(false); const types = all ? allClientScopeTypes : clientScopeTypes; const filteredTypes = filterDefaultForParameterized(types, [clientScope]); return ( ); }; export type ClientScopeDefaultOptionalType = ClientScopeRepresentation & { type: AllClientScopeType; }; export const changeScope = async ( adminClient: KeycloakAdminClient, clientScope: ClientScopeDefaultOptionalType, changeTo: AllClientScopeType, ) => { await removeScope(adminClient, clientScope); await addScope(adminClient, clientScope, changeTo); }; const castAdminClient = (adminClient: KeycloakAdminClient) => adminClient.clientScopes as unknown as { [index: string]: (params: { id: string }) => Promise; }; export const removeScope = async ( adminClient: KeycloakAdminClient, clientScope: ClientScopeDefaultOptionalType, ) => { if (clientScope.type !== AllClientScopes.none) await castAdminClient(adminClient)[ `delDefault${ clientScope.type === ClientScope.optional ? "Optional" : "" }ClientScope` ]({ id: clientScope.id!, }); }; const addScope = async ( adminClient: KeycloakAdminClient, clientScope: ClientScopeDefaultOptionalType, type: AllClientScopeType, ) => { if (type !== AllClientScopes.none) await castAdminClient(adminClient)[ `addDefault${type === ClientScope.optional ? "Optional" : ""}ClientScope` ]({ id: clientScope.id!, }); }; export const changeClientScope = async ( adminClient: KeycloakAdminClient, clientId: string, clientScope: ClientScopeRepresentation, type: AllClientScopeType, changeTo: ClientScopeType, ) => { if (type !== "none") { await removeClientScope(adminClient, clientId, clientScope, type); } await addClientScope(adminClient, clientId, clientScope, changeTo); }; export const removeClientScope = async ( adminClient: KeycloakAdminClient, clientId: string, clientScope: ClientScopeRepresentation, type: ClientScope, ) => { const methodName = `del${toUpperCase(type)}ClientScope` as const; await adminClient.clients[methodName]({ id: clientId, clientScopeId: clientScope.id!, }); }; export const addClientScope = async ( adminClient: KeycloakAdminClient, clientId: string, clientScope: ClientScopeRepresentation, type: ClientScopeType, ) => { const methodName = `add${toUpperCase(type)}ClientScope` as const; await adminClient.clients[methodName]({ id: clientId, clientScopeId: clientScope.id!, }); };