@keycloak/keycloak-admin-ui 26.2.4 → 26.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/.vite/manifest.json +42 -32
- package/lib/AddOAuth2-BdQ5f8j5.js +72 -0
- package/lib/AddOAuth2-BdQ5f8j5.js.map +1 -0
- package/lib/{CreateFlow-D4uM_8WC.js → CreateFlow-QW6oEhyd.js} +6 -6
- package/lib/{CreateFlow-D4uM_8WC.js.map → CreateFlow-QW6oEhyd.js.map} +1 -1
- package/lib/{DetailOrganization-COJeYoGE.js → DetailOrganization-BA1Z02u1.js} +46 -46
- package/lib/{DetailOrganization-COJeYoGE.js.map → DetailOrganization-BA1Z02u1.js.map} +1 -1
- package/lib/{ExecutorForm-BxTSytPh.js → ExecutorForm-BaJ7yk2s.js} +16 -16
- package/lib/{ExecutorForm-BxTSytPh.js.map → ExecutorForm-BaJ7yk2s.js.map} +1 -1
- package/lib/{FlowDetails-nR6R7QwB.js → FlowDetails-DBaoCEnX.js} +20 -17
- package/lib/{FlowDetails-nR6R7QwB.js.map → FlowDetails-DBaoCEnX.js.map} +1 -1
- package/lib/NewOrganization-Dz3NVBFR.js +36 -0
- package/lib/{NewOrganization-C8OgoMUL.js.map → NewOrganization-Dz3NVBFR.js.map} +1 -1
- package/lib/{PermissionConfigurationDetails-0hvEwSNW.js → PermissionConfigurationDetails-dIiFB9YL.js} +61 -61
- package/lib/{PermissionConfigurationDetails-0hvEwSNW.js.map → PermissionConfigurationDetails-dIiFB9YL.js.map} +1 -1
- package/lib/{PermissionDetails-ATEUBMrD.js → PermissionDetails-0JqG_vH7.js} +66 -66
- package/lib/{PermissionDetails-ATEUBMrD.js.map → PermissionDetails-0JqG_vH7.js.map} +1 -1
- package/lib/{RealmSection-DEj7Pofo.js → RealmSection-2ac_W3pw.js} +18 -18
- package/lib/{RealmSection-DEj7Pofo.js.map → RealmSection-2ac_W3pw.js.map} +1 -1
- package/lib/{ResourceDetails-C88S7tXu.js → ResourceDetails-CTjm-Bb1.js} +36 -36
- package/lib/{ResourceDetails-C88S7tXu.js.map → ResourceDetails-CTjm-Bb1.js.map} +1 -1
- package/lib/{ScopeDetails-BLW92hEw.js → ScopeDetails-BTzWF0ph.js} +12 -12
- package/lib/{ScopeDetails-BLW92hEw.js.map → ScopeDetails-BTzWF0ph.js.map} +1 -1
- package/lib/{ScopePicker-Cbywl8IC.js → ScopePicker-BOG72GXl.js} +15 -15
- package/lib/{ScopePicker-Cbywl8IC.js.map → ScopePicker-BOG72GXl.js.map} +1 -1
- package/lib/clients/keys/ImportKeyDialog.d.ts +1 -4
- package/lib/clients/keys/SamlImportKeyDialog.d.ts +2 -1
- package/lib/components/key-value-form/KeyValueInput.d.ts +11 -3
- package/lib/components/role-mapping/AddRoleMappingModal.d.ts +11 -1
- package/lib/context/realm-context/useHash.d.ts +1 -0
- package/lib/identity-providers/add/AddOAuth2.d.ts +1 -0
- package/lib/identity-providers/add/AdvancedSettings.d.ts +2 -1
- package/lib/identity-providers/add/DiscoverySettings.d.ts +2 -1
- package/lib/identity-providers/add/ExtendedOAuth2Settings.d.ts +1 -0
- package/lib/identity-providers/add/OAuth2UserProfileClaimsSettings.d.ts +1 -0
- package/lib/identity-providers/add/OpenIdConnectSettings.d.ts +5 -1
- package/lib/identity-providers/routes/IdentityProviderOAuth2.d.ts +2 -0
- package/lib/{index-Bd4uRM2j.js → index-Dcc2DpAw.js} +24573 -24379
- package/lib/{index-Bd4uRM2j.js.map → index-Dcc2DpAw.js.map} +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/keycloak-admin-ui.css +1 -1
- package/lib/keycloak-admin-ui.js +39 -39
- package/lib/realm-settings/event-config/EventsTypeTable.d.ts +2 -1
- package/lib/realm-settings/security-defences/Time.d.ts +2 -1
- package/lib/realm-settings/themes/FileNameDialog.d.ts +6 -0
- package/lib/realm-settings/themes/ThemesTab.d.ts +1 -0
- package/lib/realm-settings/themes/UploadJar.d.ts +6 -0
- package/lib/realm-settings/user-profile/attribute/AddTranslationsDialog.d.ts +2 -1
- package/lib/{components/key-value-form → realm-settings/user-profile/attribute}/KeySelect.d.ts +2 -2
- package/lib/realm-settings/user-profile/attribute/TranslatableField.d.ts +2 -1
- package/lib/realm-settings/user-profile/attribute/ValueSelect.d.ts +6 -0
- package/lib/user/user-credentials/CredentialDataDialog.d.ts +2 -1
- package/lib/utils/useIsFeatureEnabled.d.ts +2 -1
- package/package.json +19 -18
- package/lib/NewOrganization-C8OgoMUL.js +0 -36
- package/lib/components/key-value-form/ValueSelect.d.ts +0 -8
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PermissionConfigurationDetails-0hvEwSNW.js","sources":["../src/permissions-configuration/permission-configuration/NewPermissionPolicyDialog.tsx","../src/permissions-configuration/permission-configuration/ExistingPoliciesDialog.tsx","../src/permissions-configuration/permission-configuration/AssignedPolicies.tsx","../src/permissions-configuration/permission-configuration/PermissionConfigurationDetails.tsx"],"sourcesContent":["import PolicyRepresentation, {\n DecisionStrategy,\n Logic,\n} from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Modal,\n ModalVariant,\n TextContent,\n Text,\n TextVariants,\n ActionGroup,\n Button,\n Form,\n ButtonVariant,\n AlertVariant,\n} from \"@patternfly/react-core\";\nimport {\n SelectControl,\n TextControl,\n useAlerts,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { Client } from \"../../clients/authorization/policy/Client\";\nimport { User } from \"../../clients/authorization/policy/User\";\nimport {\n ClientScope,\n RequiredIdValue,\n} from \"../../clients/authorization/policy/ClientScope\";\nimport { Group, GroupValue } from \"../../clients/authorization/policy/Group\";\nimport { Regex } from \"../../clients/authorization/policy/Regex\";\nimport { Role } from \"../../clients/authorization/policy/Role\";\nimport { Time } from \"../../clients/authorization/policy/Time\";\nimport { JavaScript } from \"../../clients/authorization/policy/JavaScript\";\nimport { LogicSelector } from \"../../clients/authorization/policy/LogicSelector\";\nimport { Aggregate } from \"../../clients/authorization/policy/Aggregate\";\nimport { capitalize } from \"lodash-es\";\nimport { useEffect, type JSX } from \"react\";\n\ntype Policy = Omit<PolicyRepresentation, \"roles\"> & {\n groups?: GroupValue[];\n clientScopes?: RequiredIdValue[];\n roles?: RequiredIdValue[];\n clients?: [];\n};\n\ntype ComponentsProps = {\n isPermissionClient?: boolean;\n permissionClientId: string;\n};\n\nconst defaultValues: Policy = {\n name: \"\",\n description: \"\",\n type: \"group\",\n policies: [],\n decisionStrategy: DecisionStrategy.UNANIMOUS,\n logic: Logic.POSITIVE,\n};\n\nconst COMPONENTS: {\n [index: string]: ({\n isPermissionClient,\n permissionClientId,\n }: ComponentsProps) => JSX.Element;\n} = {\n aggregate: Aggregate,\n client: Client,\n user: User,\n \"client-scope\": ClientScope,\n group: Group,\n regex: Regex,\n role: Role,\n time: Time,\n js: JavaScript,\n default: Group,\n} as const;\n\nexport const isValidComponentType = (value: string) => value in COMPONENTS;\n\ntype NewPermissionConfigurationDialogProps = {\n permissionClientId: string;\n providers: PolicyProviderRepresentation[];\n policies: PolicyRepresentation[];\n resourceType: string;\n toggleDialog: () => void;\n onAssign: (newPolicy: PolicyRepresentation) => void;\n};\n\nexport const NewPermissionPolicyDialog = ({\n permissionClientId,\n providers,\n policies,\n toggleDialog,\n onAssign,\n}: NewPermissionConfigurationDialogProps) => {\n const { adminClient } = useAdminClient();\n const { realmRepresentation } = useRealm();\n const { t } = useTranslation();\n const form = useForm<Policy>({\n mode: \"onChange\",\n defaultValues,\n });\n const { addAlert, addError } = useAlerts();\n const { handleSubmit, reset } = form;\n const isPermissionClient = realmRepresentation?.adminPermissionsEnabled;\n\n const policyTypeSelector = useWatch({\n control: form.control,\n name: \"type\",\n });\n\n function getComponentType() {\n if (policyTypeSelector && isValidComponentType(policyTypeSelector)) {\n return COMPONENTS[policyTypeSelector];\n }\n return COMPONENTS[\"default\"];\n }\n\n const ComponentType = getComponentType();\n\n useEffect(() => {\n if (policyTypeSelector) {\n const { name, description, decisionStrategy, logic } = form.getValues();\n\n reset({\n type: policyTypeSelector,\n name,\n description,\n decisionStrategy,\n logic,\n });\n }\n }, [policyTypeSelector, reset, form]);\n\n const save = async (policy: Policy) => {\n const { groups, roles, policies, clients, ...rest } = policy;\n\n const cleanedPolicy = {\n ...rest,\n ...(groups && groups.length > 0 && { groups }),\n ...(roles && roles.length > 0 && { roles }),\n ...(policies && policies.length > 0 && { policies }),\n ...(clients && clients.length > 0 && { clients }),\n ...(rest.type === \"group\" &&\n (!groups || groups.length === 0) && { groups: [] }),\n ...(rest.type === \"client\" &&\n (!clients || clients.length === 0) && { clients: [] }),\n };\n\n try {\n const createdPolicy = await adminClient.clients.createPolicy(\n { id: permissionClientId, type: policyTypeSelector! },\n cleanedPolicy,\n );\n\n onAssign(createdPolicy);\n toggleDialog();\n addAlert(t(\"createPolicySuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"policySaveError\", error);\n }\n };\n\n return (\n <Modal\n aria-label={t(\"createPermissionPolicy\")}\n variant={ModalVariant.medium}\n header={\n <TextContent>\n <Text component={TextVariants.h1}>{t(\"createPermissionPolicy\")}</Text>\n </TextContent>\n }\n isOpen\n onClose={toggleDialog}\n >\n <Form\n id=\"createPermissionPolicy-form\"\n onSubmit={(e) => {\n e.stopPropagation();\n handleSubmit(save)(e);\n }}\n isHorizontal\n >\n <FormProvider {...form}>\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl name=\"description\" label={t(\"description\")} />\n {providers && providers.length > 0 && (\n <SelectControl\n name=\"type\"\n label={t(\"policyType\")}\n labelIcon={t(\"policyTypeHelpText\")}\n options={providers.map((provider) => ({\n key: provider.type!,\n value: capitalize(provider.type!),\n }))}\n controller={{ defaultValue: \"\" }}\n />\n )}\n <ComponentType\n isPermissionClient={isPermissionClient}\n permissionClientId={permissionClientId}\n />\n <LogicSelector />\n </FormProvider>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n className=\"pf-v5-u-mr-md\"\n type=\"submit\"\n data-testid=\"save\"\n isDisabled={\n policies?.length === 0 && policyTypeSelector === \"aggregate\"\n }\n >\n {t(\"save\")}\n </Button>\n <Button variant=\"link\" data-testid=\"cancel\" onClick={toggleDialog}>\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </Form>\n </Modal>\n );\n};\n","import PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { PolicyQuery } from \"@keycloak/keycloak-admin-client/lib/resources/clients\";\nimport {\n KeycloakDataTable,\n ListEmptyState,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n ButtonVariant,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n Modal,\n ModalVariant,\n} from \"@patternfly/react-core\";\nimport { CaretDownIcon, FilterIcon } from \"@patternfly/react-icons\";\nimport { sortBy } from \"lodash-es\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { capitalizeFirstLetterFormatter } from \"../../util\";\nimport useToggle from \"../../utils/useToggle\";\n\nexport type ExistingPoliciesDialogProps = {\n toggleDialog: () => void;\n onAssign: (policies: { policy: PolicyRepresentation }[]) => void;\n open: boolean;\n permissionClientId: string;\n};\n\nexport const ExistingPoliciesDialog = ({\n toggleDialog,\n onAssign,\n open,\n permissionClientId,\n}: ExistingPoliciesDialogProps) => {\n const { t } = useTranslation();\n const { adminClient } = useAdminClient();\n const [rows, setRows] = useState<PolicyRepresentation[]>([]);\n const [filterType, setFilterType] = useState<string | undefined>(undefined);\n const [isFilterTypeDropdownOpen, toggleIsFilterTypeDropdownOpen] =\n useToggle();\n const [providers, setProviders] = useState<string[]>([]);\n\n useFetch(\n () =>\n adminClient.clients.listPolicyProviders({\n id: permissionClientId!,\n }),\n (providers) => {\n const formattedProviders = providers\n .filter((p) => p.type !== \"resource\" && p.type !== \"scope\")\n .map((provider) => provider.name)\n .filter((name) => name !== undefined);\n setProviders(sortBy(formattedProviders));\n },\n [permissionClientId],\n );\n\n const loader = async (first?: number, max?: number, search?: string) => {\n const params: PolicyQuery = {\n id: permissionClientId!,\n permission: \"false\",\n first,\n max,\n };\n\n if (search) {\n params.name = search;\n }\n\n if (filterType) {\n params.type = filterType;\n }\n\n return (await adminClient.clients.listPolicies(params)) || [];\n };\n\n return (\n <Modal\n variant={ModalVariant.medium}\n title={t(\"assignExistingPolicies\")}\n isOpen={open}\n onClose={toggleDialog}\n actions={[\n <>\n <Button\n id=\"modal-assignExistingPolicies\"\n data-testid=\"confirm\"\n key=\"assign\"\n variant={ButtonVariant.primary}\n onClick={() => {\n const selectedPolicies = rows.map((policy) => ({ policy }));\n onAssign(selectedPolicies);\n toggleDialog();\n }}\n isDisabled={rows.length === 0}\n >\n {t(\"assign\")}\n </Button>\n <Button\n id=\"modal-cancelExistingPolicies\"\n data-testid=\"cancel\"\n key=\"cancel\"\n variant={ButtonVariant.link}\n onClick={() => {\n setRows([]);\n toggleDialog();\n }}\n >\n {t(\"cancel\")}\n </Button>\n </>,\n ]}\n >\n <KeycloakDataTable\n key={filterType}\n loader={loader}\n ariaLabelKey={t(\"chooseAPolicyType\")}\n searchPlaceholderKey={t(\"searchClientAuthorizationPolicy\")}\n isSearching={true}\n searchTypeComponent={\n <Dropdown\n onSelect={(_, value) => {\n setFilterType(value as string | undefined);\n toggleIsFilterTypeDropdownOpen();\n }}\n onOpenChange={toggleIsFilterTypeDropdownOpen}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n data-testid=\"filter-type-dropdown-existingPolicies\"\n id=\"toggle-id-10\"\n onClick={toggleIsFilterTypeDropdownOpen}\n icon={<FilterIcon />}\n statusIcon={<CaretDownIcon />}\n >\n {filterType ? filterType : t(\"allTypes\")}\n </MenuToggle>\n )}\n isOpen={isFilterTypeDropdownOpen}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"filter-type-dropdown-existingPolicies-all\"\n key=\"all\"\n onClick={() => setFilterType(undefined)}\n >\n {t(\"allTypes\")}\n </DropdownItem>\n {providers.map((name) => (\n <DropdownItem\n data-testid={`filter-type-dropdown-existingPolicies-${name}`}\n key={name}\n onClick={() => setFilterType(name)}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n }\n canSelectAll\n onSelect={(selectedRows) => setRows(selectedRows)}\n columns={[\n { name: \"name\" },\n {\n name: \"type\",\n cellFormatters: [capitalizeFirstLetterFormatter()],\n },\n { name: \"description\" },\n ]}\n emptyState={\n <ListEmptyState\n message={t(\"emptyAssignExistingPolicies\")}\n instructions={t(\"emptyAssignExistingPoliciesInstructions\")}\n />\n }\n />\n </Modal>\n );\n};\n","import PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n Action,\n FormErrorText,\n HelpItem,\n KeycloakDataTable,\n ListEmptyState,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n FormGroup,\n MenuToggle,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { NewPermissionPolicyDialog } from \"./NewPermissionPolicyDialog\";\nimport PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { ExistingPoliciesDialog } from \"./ExistingPoliciesDialog\";\nimport { CaretDownIcon, FilterIcon } from \"@patternfly/react-icons\";\nimport { capitalize, sortBy } from \"lodash-es\";\nimport useToggle from \"../../utils/useToggle\";\nimport { IRowData } from \"@patternfly/react-table\";\n\ntype AssignedPoliciesProps = {\n permissionClientId: string;\n providers: PolicyProviderRepresentation[];\n policies: PolicyRepresentation[] | undefined;\n resourceType: string;\n};\n\ntype AssignedPolicyForm = {\n policies?: { id: string; type?: string }[];\n};\n\nexport const AssignedPolicies = ({\n permissionClientId,\n providers,\n policies,\n resourceType,\n}: AssignedPoliciesProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n getValues,\n setValue,\n trigger,\n formState: { errors },\n } = useFormContext<AssignedPolicyForm>();\n const values = getValues(\"policies\");\n const [existingPoliciesOpen, setExistingPoliciesOpen] = useState(false);\n const [newPolicyOpen, setNewPolicyOpen] = useState(false);\n const [selectedPolicies, setSelectedPolicies] = useState<\n PolicyRepresentation[]\n >([]);\n const [filterType, setFilterType] = useState<string | undefined>(undefined);\n const [isFilterTypeDropdownOpen, toggleIsFilterTypeDropdownOpen] =\n useToggle();\n\n useFetch(\n () => {\n if (values && values.length > 0)\n return Promise.all(\n values.map((p) =>\n adminClient.clients.findOnePolicy({\n id: permissionClientId,\n type: p.type!,\n policyId: p.id,\n }),\n ),\n );\n return Promise.resolve([]);\n },\n (policies) => {\n const filteredPolicy = policies.filter((p) => p) as [];\n setSelectedPolicies(filteredPolicy);\n },\n [policies],\n );\n\n const sortedProviders = sortBy(\n providers\n ? providers\n .filter((p) => p.type !== \"resource\" && p.type !== \"scope\")\n .map((provider) => provider.name)\n : [],\n );\n\n const assign = (policies: { policy: PolicyRepresentation }[]) => {\n const assignedPolicies = policies.map(({ policy }) => ({\n id: policy.id!,\n }));\n\n setValue(\"policies\", [\n ...(getValues(\"policies\") || []),\n ...assignedPolicies,\n ]);\n trigger(\"policies\");\n setSelectedPolicies([\n ...selectedPolicies,\n ...policies.map(({ policy }) => policy),\n ]);\n };\n\n const unAssign = (policy: PolicyRepresentation) => {\n const updatedPolicies = selectedPolicies.filter(\n (selectedPolicy) => selectedPolicy.id !== policy.id,\n );\n setSelectedPolicies(updatedPolicies);\n setValue(\n \"policies\",\n updatedPolicies.map((policy) => ({\n id: policy.id!,\n name: policy.name!,\n type: policy.type!,\n description: policy.description!,\n })),\n );\n };\n\n const filteredPolicies = filterType\n ? selectedPolicies.filter(\n (policy) => capitalize(policy.type) === filterType,\n )\n : selectedPolicies;\n\n return (\n <FormGroup\n label={t(\"policies\")}\n labelIcon={\n <HelpItem\n helpText={t(\"permissionPoliciesHelp\")}\n fieldLabelId=\"policies\"\n />\n }\n fieldId=\"policies\"\n isRequired\n >\n <Controller\n name=\"policies\"\n control={control}\n defaultValue={[]}\n rules={{\n validate: (value?: { id: string }[]) => {\n if (!value || value.length === 0) return false;\n return value.every(({ id }) => id && id.trim().length > 0);\n },\n }}\n render={() => (\n <>\n {existingPoliciesOpen && (\n <ExistingPoliciesDialog\n permissionClientId={permissionClientId}\n open={existingPoliciesOpen}\n toggleDialog={() =>\n setExistingPoliciesOpen(!existingPoliciesOpen)\n }\n onAssign={assign}\n />\n )}\n {newPolicyOpen && (\n <NewPermissionPolicyDialog\n toggleDialog={() => setNewPolicyOpen(!newPolicyOpen)}\n permissionClientId={permissionClientId}\n providers={providers!}\n policies={policies!}\n resourceType={resourceType}\n onAssign={(newPolicy) => {\n assign([{ policy: newPolicy }]);\n }}\n />\n )}\n <Button\n data-testid=\"select-assignedPolicy-button\"\n variant=\"secondary\"\n onClick={() => {\n setExistingPoliciesOpen(true);\n }}\n >\n {t(\"assignExistingPolicies\")}\n </Button>\n <Button\n data-testid=\"select-createNewPolicy-button\"\n className=\"pf-v5-u-ml-md\"\n variant=\"secondary\"\n onClick={() => {\n setNewPolicyOpen(true);\n }}\n >\n {t(\"createNewPolicy\")}\n </Button>\n </>\n )}\n />\n {selectedPolicies.length > 0 && (\n <KeycloakDataTable\n loader={filteredPolicies}\n ariaLabelKey={t(\"policies\")}\n searchPlaceholderKey={t(\"searchClientAuthorizationPolicy\")}\n isSearching={true}\n searchTypeComponent={\n <Dropdown\n onSelect={(event, value) => {\n setFilterType(value as string | undefined);\n toggleIsFilterTypeDropdownOpen();\n }}\n onOpenChange={toggleIsFilterTypeDropdownOpen}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n data-testid=\"filter-type-dropdown-existingPolicies\"\n id=\"toggle-id-10\"\n onClick={toggleIsFilterTypeDropdownOpen}\n icon={<FilterIcon />}\n statusIcon={<CaretDownIcon />}\n >\n {filterType ? capitalize(filterType) : t(\"allTypes\")}\n </MenuToggle>\n )}\n isOpen={isFilterTypeDropdownOpen}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"filter-type-dropdown-existingPolicies-all\"\n key=\"all\"\n onClick={() => setFilterType(undefined)}\n >\n {t(\"allTypes\")}\n </DropdownItem>\n {sortedProviders.map((name) => (\n <DropdownItem\n data-testid={`filter-type-dropdown-existingPolicies-${name}`}\n key={name}\n onClick={() => setFilterType(name)}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n }\n actionResolver={(rowData: IRowData) => [\n {\n title: t(\"unAssignPolicy\"),\n onClick: () => unAssign(rowData.data as PolicyRepresentation),\n } as Action<PolicyRepresentation>,\n ]}\n columns={[\n { name: \"name\", displayKey: t(\"name\") },\n {\n name: \"type\",\n displayKey: t(\"type\"),\n cellFormatters: [(value) => capitalize(String(value || \"\"))],\n },\n { name: \"description\", displayKey: t(\"description\") },\n ]}\n emptyState={\n <ListEmptyState\n message={t(\"emptyAssignExistingPolicies\")}\n instructions={t(\"emptyAssignExistingPoliciesInstructions\")}\n />\n }\n />\n )}\n {errors.policies && <FormErrorText message={t(\"requiredPolicies\")} />}\n </FormGroup>\n );\n};\n","import PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport {\n PermissionConfigurationDetailsParams,\n toPermissionConfigurationDetails,\n} from \"../routes/PermissionConfigurationDetails\";\nimport { toPermissionsConfigurationTabs } from \"../routes/PermissionsConfigurationTabs\";\nimport PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { AssignedPolicies } from \"./AssignedPolicies\";\nimport { ScopePicker } from \"../../clients/authorization/ScopePicker\";\nimport { ResourceType } from \"../resource-types/ResourceType\";\nimport { sortBy } from \"lodash-es\";\nimport { NameDescription } from \"../../clients/authorization/policy/NameDescription\";\nimport useSortedResourceTypes from \"../../utils/useSortedResourceTypes\";\n\nexport default function PermissionConfigurationDetails() {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const { realm, permissionClientId, permissionId, resourceType } =\n useParams<PermissionConfigurationDetailsParams>();\n const navigate = useNavigate();\n const form = useForm();\n const { handleSubmit, reset } = form;\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState<PolicyRepresentation>();\n const [providers, setProviders] = useState<PolicyProviderRepresentation[]>();\n const [policies, setPolicies] = useState<PolicyRepresentation[]>();\n const resourceTypes = useSortedResourceTypes({\n clientId: permissionClientId,\n });\n\n const resourceTypeScopes = useMemo(\n () =>\n resourceTypes\n .filter(({ type }) => type === resourceType)\n .flatMap(({ scopes = [] }) => scopes)\n .map((scope) => scope || \"\"),\n [resourceTypes, resourceType],\n );\n\n useFetch(\n async () => {\n if (!permissionClientId) {\n return {};\n }\n\n const [providers, policies] = await Promise.all([\n adminClient.clients.listPolicyProviders({ id: permissionClientId }),\n adminClient.clients.listPolicies({\n id: permissionClientId,\n permission: \"false\",\n }),\n ]);\n\n return { providers, policies };\n },\n ({ providers, policies }) => {\n const filteredProviders = providers?.filter(\n (p) => p.type !== \"resource\" && p.type !== \"scope\",\n );\n\n setProviders(\n sortBy(\n filteredProviders,\n (provider: PolicyProviderRepresentation) => provider.type,\n ),\n );\n setPolicies(policies || []);\n },\n [permissionClientId],\n );\n\n useFetch(\n async () => {\n if (!permissionId) {\n return {};\n }\n const [permission, resources, policies, scopes] = await Promise.all([\n adminClient.clients.findOnePermission({\n id: permissionClientId,\n type: \"scope\",\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id: permissionClientId,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id: permissionClientId,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id: permissionClientId,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources,\n policies,\n scopes,\n };\n },\n ({ permission, resources, policies, scopes }) => {\n const resourceIds = resources?.map((resource) => resource.name!) || [];\n const policyIds = policies?.map((policy) => policy.id!) || [];\n const scopeNames = scopes?.map((scope) => scope.name) || [];\n\n reset({\n ...permission,\n resources: resourceIds!,\n policies,\n scopes,\n });\n\n setPermission({\n ...permission,\n resources: resourceIds!,\n policies: policyIds,\n scopes: scopeNames,\n });\n },\n [permissionClientId, permissionId],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n const newPermission = {\n ...permission,\n policies: permission.policies?.map((policy: any) => policy.id),\n scopes: permission.scopes?.map((scope: any) => scope.name),\n resourceType: resourceType,\n };\n\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id: permissionClientId, type: \"scope\", permissionId },\n newPermission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id: permissionClientId, type: \"scope\" },\n newPermission,\n );\n setPermission(result);\n navigate(\n toPermissionConfigurationDetails({\n realm,\n permissionClientId: permissionClientId,\n permissionId: result.id!,\n resourceType,\n }),\n );\n }\n\n addAlert(\n t(permissionId ? \"updatePermissionSuccess\" : \"createPermissionSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"permissionSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deletePermission\",\n messageKey: t(\"deleteAdminPermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id: permissionClientId!,\n type: \"scope\",\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toPermissionsConfigurationTabs({\n realm,\n permissionClientId,\n tab: \"permissions\",\n }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n if (!permission) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={permissionId ? permission?.name! : t(\"createPermission\")}\n subKey={\n permissionId\n ? permission?.description!\n : t(\"createPermissionOfType\", { resourceType })\n }\n dropdownItems={\n permissionId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-permission\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormAccess isHorizontal onSubmit={handleSubmit(save)} role=\"anyone\">\n <FormProvider {...form}>\n <NameDescription clientId={permissionClientId} />\n <ScopePicker\n clientId={permissionClientId}\n resourceTypeScopes={resourceTypeScopes ?? []}\n />\n <ResourceType resourceType={resourceType} />\n <AssignedPolicies\n permissionClientId={permissionClientId}\n providers={providers!}\n policies={policies!}\n resourceType={resourceType}\n />\n </FormProvider>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n className=\"pf-v5-u-mr-md\"\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toPermissionsConfigurationTabs({\n realm,\n permissionClientId,\n tab: \"permissions\",\n })}\n />\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </>\n );\n}\n"],"names":["defaultValues","DecisionStrategy","Logic","COMPONENTS","Aggregate","Client","User","ClientScope","Group","Regex","Role","Time","JavaScript","isValidComponentType","value","NewPermissionPolicyDialog","permissionClientId","providers","policies","toggleDialog","onAssign","adminClient","useAdminClient","realmRepresentation","useRealm","t","useTranslation","form","useForm","addAlert","addError","useAlerts","handleSubmit","reset","isPermissionClient","policyTypeSelector","useWatch","getComponentType","ComponentType","useEffect","name","description","decisionStrategy","logic","save","policy","groups","roles","clients","rest","cleanedPolicy","createdPolicy","AlertVariant","error","jsx","Modal","ModalVariant","TextContent","Text","TextVariants","jsxs","Form","e","FormProvider","TextControl","SelectControl","provider","capitalize","LogicSelector","ActionGroup","Button","ButtonVariant","ExistingPoliciesDialog","open","rows","setRows","useState","filterType","setFilterType","isFilterTypeDropdownOpen","toggleIsFilterTypeDropdownOpen","useToggle","setProviders","useFetch","formattedProviders","p","sortBy","loader","first","max","search","params","Fragment","selectedPolicies","KeycloakDataTable","Dropdown","_","ref","MenuToggle","FilterIcon","CaretDownIcon","DropdownList","DropdownItem","selectedRows","capitalizeFirstLetterFormatter","ListEmptyState","AssignedPolicies","resourceType","control","getValues","setValue","trigger","errors","useFormContext","values","existingPoliciesOpen","setExistingPoliciesOpen","newPolicyOpen","setNewPolicyOpen","setSelectedPolicies","filteredPolicy","sortedProviders","assign","assignedPolicies","unAssign","updatedPolicies","selectedPolicy","filteredPolicies","FormGroup","HelpItem","Controller","id","newPolicy","event","rowData","FormErrorText","PermissionConfigurationDetails","realm","permissionId","useParams","navigate","useNavigate","permission","setPermission","setPolicies","resourceTypes","useSortedResourceTypes","resourceTypeScopes","useMemo","type","scopes","scope","filteredProviders","resources","resourceIds","resource","policyIds","scopeNames","newPermission","result","toPermissionConfigurationDetails","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","toPermissionsConfigurationTabs","ViewHeader","PageSection","FormAccess","NameDescription","ScopePicker","ResourceType","props","Link","KeycloakSpinner"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"PermissionConfigurationDetails-dIiFB9YL.js","sources":["../src/permissions-configuration/permission-configuration/NewPermissionPolicyDialog.tsx","../src/permissions-configuration/permission-configuration/ExistingPoliciesDialog.tsx","../src/permissions-configuration/permission-configuration/AssignedPolicies.tsx","../src/permissions-configuration/permission-configuration/PermissionConfigurationDetails.tsx"],"sourcesContent":["import PolicyRepresentation, {\n DecisionStrategy,\n Logic,\n} from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Modal,\n ModalVariant,\n TextContent,\n Text,\n TextVariants,\n ActionGroup,\n Button,\n Form,\n ButtonVariant,\n AlertVariant,\n} from \"@patternfly/react-core\";\nimport {\n SelectControl,\n TextControl,\n useAlerts,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { Client } from \"../../clients/authorization/policy/Client\";\nimport { User } from \"../../clients/authorization/policy/User\";\nimport {\n ClientScope,\n RequiredIdValue,\n} from \"../../clients/authorization/policy/ClientScope\";\nimport { Group, GroupValue } from \"../../clients/authorization/policy/Group\";\nimport { Regex } from \"../../clients/authorization/policy/Regex\";\nimport { Role } from \"../../clients/authorization/policy/Role\";\nimport { Time } from \"../../clients/authorization/policy/Time\";\nimport { JavaScript } from \"../../clients/authorization/policy/JavaScript\";\nimport { LogicSelector } from \"../../clients/authorization/policy/LogicSelector\";\nimport { Aggregate } from \"../../clients/authorization/policy/Aggregate\";\nimport { capitalize } from \"lodash-es\";\nimport { useEffect, type JSX } from \"react\";\n\ntype Policy = Omit<PolicyRepresentation, \"roles\"> & {\n groups?: GroupValue[];\n clientScopes?: RequiredIdValue[];\n roles?: RequiredIdValue[];\n clients?: [];\n};\n\ntype ComponentsProps = {\n isPermissionClient?: boolean;\n permissionClientId: string;\n};\n\nconst defaultValues: Policy = {\n name: \"\",\n description: \"\",\n type: \"group\",\n policies: [],\n decisionStrategy: DecisionStrategy.UNANIMOUS,\n logic: Logic.POSITIVE,\n};\n\nconst COMPONENTS: {\n [index: string]: ({\n isPermissionClient,\n permissionClientId,\n }: ComponentsProps) => JSX.Element;\n} = {\n aggregate: Aggregate,\n client: Client,\n user: User,\n \"client-scope\": ClientScope,\n group: Group,\n regex: Regex,\n role: Role,\n time: Time,\n js: JavaScript,\n default: Group,\n} as const;\n\nexport const isValidComponentType = (value: string) => value in COMPONENTS;\n\ntype NewPermissionConfigurationDialogProps = {\n permissionClientId: string;\n providers: PolicyProviderRepresentation[];\n policies: PolicyRepresentation[];\n resourceType: string;\n toggleDialog: () => void;\n onAssign: (newPolicy: PolicyRepresentation) => void;\n};\n\nexport const NewPermissionPolicyDialog = ({\n permissionClientId,\n providers,\n policies,\n toggleDialog,\n onAssign,\n}: NewPermissionConfigurationDialogProps) => {\n const { adminClient } = useAdminClient();\n const { realmRepresentation } = useRealm();\n const { t } = useTranslation();\n const form = useForm<Policy>({\n mode: \"onChange\",\n defaultValues,\n });\n const { addAlert, addError } = useAlerts();\n const { handleSubmit, reset } = form;\n const isPermissionClient = realmRepresentation?.adminPermissionsEnabled;\n\n const policyTypeSelector = useWatch({\n control: form.control,\n name: \"type\",\n });\n\n function getComponentType() {\n if (policyTypeSelector && isValidComponentType(policyTypeSelector)) {\n return COMPONENTS[policyTypeSelector];\n }\n return COMPONENTS[\"default\"];\n }\n\n const ComponentType = getComponentType();\n\n useEffect(() => {\n if (policyTypeSelector) {\n const { name, description, decisionStrategy, logic } = form.getValues();\n\n reset({\n type: policyTypeSelector,\n name,\n description,\n decisionStrategy,\n logic,\n });\n }\n }, [policyTypeSelector, reset, form]);\n\n const save = async (policy: Policy) => {\n const { groups, roles, policies, clients, ...rest } = policy;\n\n const cleanedPolicy = {\n ...rest,\n ...(groups && groups.length > 0 && { groups }),\n ...(roles && roles.length > 0 && { roles }),\n ...(policies && policies.length > 0 && { policies }),\n ...(clients && clients.length > 0 && { clients }),\n ...(rest.type === \"group\" &&\n (!groups || groups.length === 0) && { groups: [] }),\n ...(rest.type === \"client\" &&\n (!clients || clients.length === 0) && { clients: [] }),\n };\n\n try {\n const createdPolicy = await adminClient.clients.createPolicy(\n { id: permissionClientId, type: policyTypeSelector! },\n cleanedPolicy,\n );\n\n onAssign(createdPolicy);\n toggleDialog();\n addAlert(t(\"createPolicySuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"policySaveError\", error);\n }\n };\n\n return (\n <Modal\n aria-label={t(\"createPermissionPolicy\")}\n variant={ModalVariant.medium}\n header={\n <TextContent>\n <Text component={TextVariants.h1}>{t(\"createPermissionPolicy\")}</Text>\n </TextContent>\n }\n isOpen\n onClose={toggleDialog}\n >\n <Form\n id=\"createPermissionPolicy-form\"\n onSubmit={(e) => {\n e.stopPropagation();\n handleSubmit(save)(e);\n }}\n isHorizontal\n >\n <FormProvider {...form}>\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl name=\"description\" label={t(\"description\")} />\n {providers && providers.length > 0 && (\n <SelectControl\n name=\"type\"\n label={t(\"policyType\")}\n labelIcon={t(\"policyTypeHelpText\")}\n options={providers.map((provider) => ({\n key: provider.type!,\n value: capitalize(provider.type!),\n }))}\n controller={{ defaultValue: \"\" }}\n />\n )}\n <ComponentType\n isPermissionClient={isPermissionClient}\n permissionClientId={permissionClientId}\n />\n <LogicSelector />\n </FormProvider>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n className=\"pf-v5-u-mr-md\"\n type=\"submit\"\n data-testid=\"save\"\n isDisabled={\n policies?.length === 0 && policyTypeSelector === \"aggregate\"\n }\n >\n {t(\"save\")}\n </Button>\n <Button variant=\"link\" data-testid=\"cancel\" onClick={toggleDialog}>\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </Form>\n </Modal>\n );\n};\n","import PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { PolicyQuery } from \"@keycloak/keycloak-admin-client/lib/resources/clients\";\nimport {\n KeycloakDataTable,\n ListEmptyState,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n ButtonVariant,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n Modal,\n ModalVariant,\n} from \"@patternfly/react-core\";\nimport { CaretDownIcon, FilterIcon } from \"@patternfly/react-icons\";\nimport { sortBy } from \"lodash-es\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { capitalizeFirstLetterFormatter } from \"../../util\";\nimport useToggle from \"../../utils/useToggle\";\n\nexport type ExistingPoliciesDialogProps = {\n toggleDialog: () => void;\n onAssign: (policies: { policy: PolicyRepresentation }[]) => void;\n open: boolean;\n permissionClientId: string;\n};\n\nexport const ExistingPoliciesDialog = ({\n toggleDialog,\n onAssign,\n open,\n permissionClientId,\n}: ExistingPoliciesDialogProps) => {\n const { t } = useTranslation();\n const { adminClient } = useAdminClient();\n const [rows, setRows] = useState<PolicyRepresentation[]>([]);\n const [filterType, setFilterType] = useState<string | undefined>(undefined);\n const [isFilterTypeDropdownOpen, toggleIsFilterTypeDropdownOpen] =\n useToggle();\n const [providers, setProviders] = useState<string[]>([]);\n\n useFetch(\n () =>\n adminClient.clients.listPolicyProviders({\n id: permissionClientId!,\n }),\n (providers) => {\n const formattedProviders = providers\n .filter((p) => p.type !== \"resource\" && p.type !== \"scope\")\n .map((provider) => provider.name)\n .filter((name) => name !== undefined);\n setProviders(sortBy(formattedProviders));\n },\n [permissionClientId],\n );\n\n const loader = async (first?: number, max?: number, search?: string) => {\n const params: PolicyQuery = {\n id: permissionClientId!,\n permission: \"false\",\n first,\n max,\n };\n\n if (search) {\n params.name = search;\n }\n\n if (filterType) {\n params.type = filterType;\n }\n\n return (await adminClient.clients.listPolicies(params)) || [];\n };\n\n return (\n <Modal\n variant={ModalVariant.medium}\n title={t(\"assignExistingPolicies\")}\n isOpen={open}\n onClose={toggleDialog}\n actions={[\n <>\n <Button\n id=\"modal-assignExistingPolicies\"\n data-testid=\"confirm\"\n key=\"assign\"\n variant={ButtonVariant.primary}\n onClick={() => {\n const selectedPolicies = rows.map((policy) => ({ policy }));\n onAssign(selectedPolicies);\n toggleDialog();\n }}\n isDisabled={rows.length === 0}\n >\n {t(\"assign\")}\n </Button>\n <Button\n id=\"modal-cancelExistingPolicies\"\n data-testid=\"cancel\"\n key=\"cancel\"\n variant={ButtonVariant.link}\n onClick={() => {\n setRows([]);\n toggleDialog();\n }}\n >\n {t(\"cancel\")}\n </Button>\n </>,\n ]}\n >\n <KeycloakDataTable\n key={filterType}\n loader={loader}\n ariaLabelKey={t(\"chooseAPolicyType\")}\n searchPlaceholderKey={t(\"searchClientAuthorizationPolicy\")}\n isSearching={true}\n searchTypeComponent={\n <Dropdown\n onSelect={(_, value) => {\n setFilterType(value as string | undefined);\n toggleIsFilterTypeDropdownOpen();\n }}\n onOpenChange={toggleIsFilterTypeDropdownOpen}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n data-testid=\"filter-type-dropdown-existingPolicies\"\n id=\"toggle-id-10\"\n onClick={toggleIsFilterTypeDropdownOpen}\n icon={<FilterIcon />}\n statusIcon={<CaretDownIcon />}\n >\n {filterType ? filterType : t(\"allTypes\")}\n </MenuToggle>\n )}\n isOpen={isFilterTypeDropdownOpen}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"filter-type-dropdown-existingPolicies-all\"\n key=\"all\"\n onClick={() => setFilterType(undefined)}\n >\n {t(\"allTypes\")}\n </DropdownItem>\n {providers.map((name) => (\n <DropdownItem\n data-testid={`filter-type-dropdown-existingPolicies-${name}`}\n key={name}\n onClick={() => setFilterType(name)}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n }\n canSelectAll\n onSelect={(selectedRows) => setRows(selectedRows)}\n columns={[\n { name: \"name\" },\n {\n name: \"type\",\n cellFormatters: [capitalizeFirstLetterFormatter()],\n },\n { name: \"description\" },\n ]}\n emptyState={\n <ListEmptyState\n message={t(\"emptyAssignExistingPolicies\")}\n instructions={t(\"emptyAssignExistingPoliciesInstructions\")}\n />\n }\n />\n </Modal>\n );\n};\n","import PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n Action,\n FormErrorText,\n HelpItem,\n KeycloakDataTable,\n ListEmptyState,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n FormGroup,\n MenuToggle,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { NewPermissionPolicyDialog } from \"./NewPermissionPolicyDialog\";\nimport PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { ExistingPoliciesDialog } from \"./ExistingPoliciesDialog\";\nimport { CaretDownIcon, FilterIcon } from \"@patternfly/react-icons\";\nimport { capitalize, sortBy } from \"lodash-es\";\nimport useToggle from \"../../utils/useToggle\";\nimport { IRowData } from \"@patternfly/react-table\";\n\ntype AssignedPoliciesProps = {\n permissionClientId: string;\n providers: PolicyProviderRepresentation[];\n policies: PolicyRepresentation[] | undefined;\n resourceType: string;\n};\n\ntype AssignedPolicyForm = {\n policies?: { id: string; type?: string }[];\n};\n\nexport const AssignedPolicies = ({\n permissionClientId,\n providers,\n policies,\n resourceType,\n}: AssignedPoliciesProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n getValues,\n setValue,\n trigger,\n formState: { errors },\n } = useFormContext<AssignedPolicyForm>();\n const values = getValues(\"policies\");\n const [existingPoliciesOpen, setExistingPoliciesOpen] = useState(false);\n const [newPolicyOpen, setNewPolicyOpen] = useState(false);\n const [selectedPolicies, setSelectedPolicies] = useState<\n PolicyRepresentation[]\n >([]);\n const [filterType, setFilterType] = useState<string | undefined>(undefined);\n const [isFilterTypeDropdownOpen, toggleIsFilterTypeDropdownOpen] =\n useToggle();\n\n useFetch(\n () => {\n if (values && values.length > 0)\n return Promise.all(\n values.map((p) =>\n adminClient.clients.findOnePolicy({\n id: permissionClientId,\n type: p.type!,\n policyId: p.id,\n }),\n ),\n );\n return Promise.resolve([]);\n },\n (policies) => {\n const filteredPolicy = policies.filter((p) => p) as [];\n setSelectedPolicies(filteredPolicy);\n },\n [policies],\n );\n\n const sortedProviders = sortBy(\n providers\n ? providers\n .filter((p) => p.type !== \"resource\" && p.type !== \"scope\")\n .map((provider) => provider.name)\n : [],\n );\n\n const assign = (policies: { policy: PolicyRepresentation }[]) => {\n const assignedPolicies = policies.map(({ policy }) => ({\n id: policy.id!,\n }));\n\n setValue(\"policies\", [\n ...(getValues(\"policies\") || []),\n ...assignedPolicies,\n ]);\n trigger(\"policies\");\n setSelectedPolicies([\n ...selectedPolicies,\n ...policies.map(({ policy }) => policy),\n ]);\n };\n\n const unAssign = (policy: PolicyRepresentation) => {\n const updatedPolicies = selectedPolicies.filter(\n (selectedPolicy) => selectedPolicy.id !== policy.id,\n );\n setSelectedPolicies(updatedPolicies);\n setValue(\n \"policies\",\n updatedPolicies.map((policy) => ({\n id: policy.id!,\n name: policy.name!,\n type: policy.type!,\n description: policy.description!,\n })),\n );\n };\n\n const filteredPolicies = filterType\n ? selectedPolicies.filter(\n (policy) => capitalize(policy.type) === filterType,\n )\n : selectedPolicies;\n\n return (\n <FormGroup\n label={t(\"policies\")}\n labelIcon={\n <HelpItem\n helpText={t(\"permissionPoliciesHelp\")}\n fieldLabelId=\"policies\"\n />\n }\n fieldId=\"policies\"\n isRequired\n >\n <Controller\n name=\"policies\"\n control={control}\n defaultValue={[]}\n rules={{\n validate: (value?: { id: string }[]) => {\n if (!value || value.length === 0) return false;\n return value.every(({ id }) => id && id.trim().length > 0);\n },\n }}\n render={() => (\n <>\n {existingPoliciesOpen && (\n <ExistingPoliciesDialog\n permissionClientId={permissionClientId}\n open={existingPoliciesOpen}\n toggleDialog={() =>\n setExistingPoliciesOpen(!existingPoliciesOpen)\n }\n onAssign={assign}\n />\n )}\n {newPolicyOpen && (\n <NewPermissionPolicyDialog\n toggleDialog={() => setNewPolicyOpen(!newPolicyOpen)}\n permissionClientId={permissionClientId}\n providers={providers!}\n policies={policies!}\n resourceType={resourceType}\n onAssign={(newPolicy) => {\n assign([{ policy: newPolicy }]);\n }}\n />\n )}\n <Button\n data-testid=\"select-assignedPolicy-button\"\n variant=\"secondary\"\n onClick={() => {\n setExistingPoliciesOpen(true);\n }}\n >\n {t(\"assignExistingPolicies\")}\n </Button>\n <Button\n data-testid=\"select-createNewPolicy-button\"\n className=\"pf-v5-u-ml-md\"\n variant=\"secondary\"\n onClick={() => {\n setNewPolicyOpen(true);\n }}\n >\n {t(\"createNewPolicy\")}\n </Button>\n </>\n )}\n />\n {selectedPolicies.length > 0 && (\n <KeycloakDataTable\n loader={filteredPolicies}\n ariaLabelKey={t(\"policies\")}\n searchPlaceholderKey={t(\"searchClientAuthorizationPolicy\")}\n isSearching={true}\n searchTypeComponent={\n <Dropdown\n onSelect={(event, value) => {\n setFilterType(value as string | undefined);\n toggleIsFilterTypeDropdownOpen();\n }}\n onOpenChange={toggleIsFilterTypeDropdownOpen}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n data-testid=\"filter-type-dropdown-existingPolicies\"\n id=\"toggle-id-10\"\n onClick={toggleIsFilterTypeDropdownOpen}\n icon={<FilterIcon />}\n statusIcon={<CaretDownIcon />}\n >\n {filterType ? capitalize(filterType) : t(\"allTypes\")}\n </MenuToggle>\n )}\n isOpen={isFilterTypeDropdownOpen}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"filter-type-dropdown-existingPolicies-all\"\n key=\"all\"\n onClick={() => setFilterType(undefined)}\n >\n {t(\"allTypes\")}\n </DropdownItem>\n {sortedProviders.map((name) => (\n <DropdownItem\n data-testid={`filter-type-dropdown-existingPolicies-${name}`}\n key={name}\n onClick={() => setFilterType(name)}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n }\n actionResolver={(rowData: IRowData) => [\n {\n title: t(\"unAssignPolicy\"),\n onClick: () => unAssign(rowData.data as PolicyRepresentation),\n } as Action<PolicyRepresentation>,\n ]}\n columns={[\n { name: \"name\", displayKey: t(\"name\") },\n {\n name: \"type\",\n displayKey: t(\"type\"),\n cellFormatters: [(value) => capitalize(String(value || \"\"))],\n },\n { name: \"description\", displayKey: t(\"description\") },\n ]}\n emptyState={\n <ListEmptyState\n message={t(\"emptyAssignExistingPolicies\")}\n instructions={t(\"emptyAssignExistingPoliciesInstructions\")}\n />\n }\n />\n )}\n {errors.policies && <FormErrorText message={t(\"requiredPolicies\")} />}\n </FormGroup>\n );\n};\n","import PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport {\n PermissionConfigurationDetailsParams,\n toPermissionConfigurationDetails,\n} from \"../routes/PermissionConfigurationDetails\";\nimport { toPermissionsConfigurationTabs } from \"../routes/PermissionsConfigurationTabs\";\nimport PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { AssignedPolicies } from \"./AssignedPolicies\";\nimport { ScopePicker } from \"../../clients/authorization/ScopePicker\";\nimport { ResourceType } from \"../resource-types/ResourceType\";\nimport { sortBy } from \"lodash-es\";\nimport { NameDescription } from \"../../clients/authorization/policy/NameDescription\";\nimport useSortedResourceTypes from \"../../utils/useSortedResourceTypes\";\n\nexport default function PermissionConfigurationDetails() {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const { realm, permissionClientId, permissionId, resourceType } =\n useParams<PermissionConfigurationDetailsParams>();\n const navigate = useNavigate();\n const form = useForm();\n const { handleSubmit, reset } = form;\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState<PolicyRepresentation>();\n const [providers, setProviders] = useState<PolicyProviderRepresentation[]>();\n const [policies, setPolicies] = useState<PolicyRepresentation[]>();\n const resourceTypes = useSortedResourceTypes({\n clientId: permissionClientId,\n });\n\n const resourceTypeScopes = useMemo(\n () =>\n resourceTypes\n .filter(({ type }) => type === resourceType)\n .flatMap(({ scopes = [] }) => scopes)\n .map((scope) => scope || \"\"),\n [resourceTypes, resourceType],\n );\n\n useFetch(\n async () => {\n if (!permissionClientId) {\n return {};\n }\n\n const [providers, policies] = await Promise.all([\n adminClient.clients.listPolicyProviders({ id: permissionClientId }),\n adminClient.clients.listPolicies({\n id: permissionClientId,\n permission: \"false\",\n }),\n ]);\n\n return { providers, policies };\n },\n ({ providers, policies }) => {\n const filteredProviders = providers?.filter(\n (p) => p.type !== \"resource\" && p.type !== \"scope\",\n );\n\n setProviders(\n sortBy(\n filteredProviders,\n (provider: PolicyProviderRepresentation) => provider.type,\n ),\n );\n setPolicies(policies || []);\n },\n [permissionClientId],\n );\n\n useFetch(\n async () => {\n if (!permissionId) {\n return {};\n }\n const [permission, resources, policies, scopes] = await Promise.all([\n adminClient.clients.findOnePermission({\n id: permissionClientId,\n type: \"scope\",\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id: permissionClientId,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id: permissionClientId,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id: permissionClientId,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources,\n policies,\n scopes,\n };\n },\n ({ permission, resources, policies, scopes }) => {\n const resourceIds = resources?.map((resource) => resource.name!) || [];\n const policyIds = policies?.map((policy) => policy.id!) || [];\n const scopeNames = scopes?.map((scope) => scope.name) || [];\n\n reset({\n ...permission,\n resources: resourceIds!,\n policies,\n scopes,\n });\n\n setPermission({\n ...permission,\n resources: resourceIds!,\n policies: policyIds,\n scopes: scopeNames,\n });\n },\n [permissionClientId, permissionId],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n const newPermission = {\n ...permission,\n policies: permission.policies?.map((policy: any) => policy.id),\n scopes: permission.scopes?.map((scope: any) => scope.name),\n resourceType: resourceType,\n };\n\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id: permissionClientId, type: \"scope\", permissionId },\n newPermission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id: permissionClientId, type: \"scope\" },\n newPermission,\n );\n setPermission(result);\n navigate(\n toPermissionConfigurationDetails({\n realm,\n permissionClientId: permissionClientId,\n permissionId: result.id!,\n resourceType,\n }),\n );\n }\n\n addAlert(\n t(permissionId ? \"updatePermissionSuccess\" : \"createPermissionSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"permissionSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deletePermission\",\n messageKey: t(\"deleteAdminPermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id: permissionClientId!,\n type: \"scope\",\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toPermissionsConfigurationTabs({\n realm,\n permissionClientId,\n tab: \"permissions\",\n }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n if (!permission) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={permissionId ? permission?.name! : t(\"createPermission\")}\n subKey={\n permissionId\n ? permission?.description!\n : t(\"createPermissionOfType\", { resourceType })\n }\n dropdownItems={\n permissionId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-permission\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormAccess isHorizontal onSubmit={handleSubmit(save)} role=\"anyone\">\n <FormProvider {...form}>\n <NameDescription clientId={permissionClientId} />\n <ScopePicker\n clientId={permissionClientId}\n resourceTypeScopes={resourceTypeScopes ?? []}\n />\n <ResourceType resourceType={resourceType} />\n <AssignedPolicies\n permissionClientId={permissionClientId}\n providers={providers!}\n policies={policies!}\n resourceType={resourceType}\n />\n </FormProvider>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n className=\"pf-v5-u-mr-md\"\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toPermissionsConfigurationTabs({\n realm,\n permissionClientId,\n tab: \"permissions\",\n })}\n />\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </>\n );\n}\n"],"names":["defaultValues","DecisionStrategy","Logic","COMPONENTS","Aggregate","Client","User","ClientScope","Group","Regex","Role","Time","JavaScript","isValidComponentType","value","NewPermissionPolicyDialog","permissionClientId","providers","policies","toggleDialog","onAssign","adminClient","useAdminClient","realmRepresentation","useRealm","t","useTranslation","form","useForm","addAlert","addError","useAlerts","handleSubmit","reset","isPermissionClient","policyTypeSelector","useWatch","getComponentType","ComponentType","useEffect","name","description","decisionStrategy","logic","save","policy","groups","roles","clients","rest","cleanedPolicy","createdPolicy","AlertVariant","error","jsx","Modal","ModalVariant","TextContent","Text","TextVariants","jsxs","Form","e","FormProvider","TextControl","SelectControl","provider","capitalize","LogicSelector","ActionGroup","Button","ButtonVariant","ExistingPoliciesDialog","open","rows","setRows","useState","filterType","setFilterType","isFilterTypeDropdownOpen","toggleIsFilterTypeDropdownOpen","useToggle","setProviders","useFetch","formattedProviders","p","sortBy","loader","first","max","search","params","Fragment","selectedPolicies","KeycloakDataTable","Dropdown","_","ref","MenuToggle","FilterIcon","CaretDownIcon","DropdownList","DropdownItem","selectedRows","capitalizeFirstLetterFormatter","ListEmptyState","AssignedPolicies","resourceType","control","getValues","setValue","trigger","errors","useFormContext","values","existingPoliciesOpen","setExistingPoliciesOpen","newPolicyOpen","setNewPolicyOpen","setSelectedPolicies","filteredPolicy","sortedProviders","assign","assignedPolicies","unAssign","updatedPolicies","selectedPolicy","filteredPolicies","FormGroup","HelpItem","Controller","id","newPolicy","event","rowData","FormErrorText","PermissionConfigurationDetails","realm","permissionId","useParams","navigate","useNavigate","permission","setPermission","setPolicies","resourceTypes","useSortedResourceTypes","resourceTypeScopes","useMemo","type","scopes","scope","filteredProviders","resources","resourceIds","resource","policyIds","scopeNames","newPermission","result","toPermissionConfigurationDetails","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","toPermissionsConfigurationTabs","ViewHeader","PageSection","FormAccess","NameDescription","ScopePicker","ResourceType","props","Link","KeycloakSpinner"],"mappings":"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"}
|
@@ -1,39 +1,39 @@
|
|
1
1
|
import { jsx as s, jsxs as v, Fragment as B } from "react/jsx-runtime";
|
2
|
-
import { u as
|
3
|
-
import { useState as h, useRef as
|
4
|
-
import { useTranslation as
|
5
|
-
import { useNavigate as
|
2
|
+
import { u as U, ak as $, y as G, al as Q, am as W, an as N, a4 as J, b as X, ao as Z, _ as ee, ap as se, aa as ae, m as H, d as k, aq as z, ar as ie, as as oe, V as te, at as re, K as ne, P as le, c as ce, F as de, Q as E, Y as pe, au as C, av as ue, a7 as P, aw as _, ax as j, ay as K, R as me, A as fe, B as M, az as he } from "./index-Dcc2DpAw.js";
|
3
|
+
import { useState as h, useRef as ye } from "react";
|
4
|
+
import { useTranslation as Y } from "react-i18next";
|
5
|
+
import { useNavigate as ge, Link as be } from "react-router-dom";
|
6
6
|
const Se = ({
|
7
7
|
clientId: c,
|
8
8
|
resourceId: e,
|
9
9
|
preSelected: u
|
10
10
|
}) => {
|
11
|
-
const { adminClient:
|
11
|
+
const { adminClient: y } = U(), { t: R } = Y(), {
|
12
12
|
control: F,
|
13
|
-
getValues:
|
13
|
+
getValues: O,
|
14
14
|
setValue: A,
|
15
|
-
formState: { errors:
|
16
|
-
} =
|
15
|
+
formState: { errors: r }
|
16
|
+
} = $(), [m, n] = h([]), [a, g] = h(
|
17
17
|
[]
|
18
|
-
), [p, f] = h(""), [b, D] = h(!1), S =
|
18
|
+
), [p, f] = h(""), [b, D] = h(!1), S = ye(!0), x = O("scopes"), q = (l) => l.map((t) => /* @__PURE__ */ s(J, { value: t, children: t.name }, t.id));
|
19
19
|
return G(
|
20
|
-
async () => e ? (e && !S.current && A("scopes", []), S.current = !1,
|
20
|
+
async () => e ? (e && !S.current && A("scopes", []), S.current = !1, y.clients.listScopesByResource({
|
21
21
|
id: c,
|
22
22
|
resourceName: e
|
23
|
-
})) :
|
23
|
+
})) : y.clients.listAllScopes(
|
24
24
|
Object.assign(
|
25
25
|
{ id: c, deep: !1 },
|
26
26
|
p === "" ? null : { name: p }
|
27
27
|
)
|
28
28
|
),
|
29
29
|
(l) => {
|
30
|
-
|
30
|
+
n(l), p || g(
|
31
31
|
l.filter((t) => x?.includes(t.id))
|
32
32
|
);
|
33
33
|
},
|
34
34
|
[e, p]
|
35
35
|
), /* @__PURE__ */ s(
|
36
|
-
|
36
|
+
Q,
|
37
37
|
{
|
38
38
|
name: "scopes",
|
39
39
|
defaultValue: u ? [u] : [],
|
@@ -52,11 +52,11 @@ const Se = ({
|
|
52
52
|
selections: a.map((t) => t.name),
|
53
53
|
onSelect: (t) => {
|
54
54
|
const T = typeof t == "string" ? a.find((d) => d.name === t) : t, w = a.find((d) => d.id === T.id) ? a.filter((d) => d.id !== T.id) : [...a, T];
|
55
|
-
l.onChange(w.map((d) => d.id)),
|
55
|
+
l.onChange(w.map((d) => d.id)), g(w), f("");
|
56
56
|
},
|
57
57
|
isOpen: b,
|
58
58
|
"aria-labelledby": R("scopes"),
|
59
|
-
validated:
|
59
|
+
validated: r.scopes ? "error" : "default",
|
60
60
|
isDisabled: !!u,
|
61
61
|
typeAheadAriaLabel: R("scopes"),
|
62
62
|
children: q(m)
|
@@ -66,34 +66,34 @@ const Se = ({
|
|
66
66
|
);
|
67
67
|
};
|
68
68
|
function Re() {
|
69
|
-
const { adminClient: c } =
|
69
|
+
const { adminClient: c } = U(), { t: e } = Y(), u = X({
|
70
70
|
mode: "onChange"
|
71
71
|
}), {
|
72
|
-
control:
|
72
|
+
control: y,
|
73
73
|
reset: R,
|
74
74
|
formState: { errors: F },
|
75
|
-
handleSubmit:
|
76
|
-
} = u, A =
|
75
|
+
handleSubmit: O
|
76
|
+
} = u, A = ge(), { id: r, realm: m, permissionType: n, permissionId: a, selectedId: g } = Z(), { addAlert: p, addError: f } = ee(), [b, D] = h(), [S, x] = h(!1), { hasAccess: q } = se(), l = !q("manage-authorization");
|
77
77
|
G(
|
78
78
|
async () => {
|
79
79
|
if (!a)
|
80
80
|
return {};
|
81
|
-
const [i, o, L,
|
81
|
+
const [i, o, L, V] = await Promise.all([
|
82
82
|
c.clients.findOnePermission({
|
83
|
-
id:
|
84
|
-
type:
|
83
|
+
id: r,
|
84
|
+
type: n,
|
85
85
|
permissionId: a
|
86
86
|
}),
|
87
87
|
c.clients.getAssociatedResources({
|
88
|
-
id:
|
88
|
+
id: r,
|
89
89
|
permissionId: a
|
90
90
|
}),
|
91
91
|
c.clients.getAssociatedPolicies({
|
92
|
-
id:
|
92
|
+
id: r,
|
93
93
|
permissionId: a
|
94
94
|
}),
|
95
95
|
c.clients.getAssociatedScopes({
|
96
|
-
id:
|
96
|
+
id: r,
|
97
97
|
permissionId: a
|
98
98
|
})
|
99
99
|
]);
|
@@ -103,11 +103,11 @@ function Re() {
|
|
103
103
|
permission: i,
|
104
104
|
resources: o.map((I) => I._id),
|
105
105
|
policies: L.map((I) => I.id),
|
106
|
-
scopes:
|
106
|
+
scopes: V.map((I) => I.id)
|
107
107
|
};
|
108
108
|
},
|
109
|
-
({ permission: i, resources: o, policies: L, scopes:
|
110
|
-
R({ ...i, resources: o, policies: L, scopes:
|
109
|
+
({ permission: i, resources: o, policies: L, scopes: V }) => {
|
110
|
+
R({ ...i, resources: o, policies: L, scopes: V }), i && "resourceType" in i && x(
|
111
111
|
!!i.resourceType
|
112
112
|
), D({ ...i, resources: o, policies: L });
|
113
113
|
},
|
@@ -117,26 +117,26 @@ function Re() {
|
|
117
117
|
try {
|
118
118
|
if (a)
|
119
119
|
await c.clients.updatePermission(
|
120
|
-
{ id:
|
120
|
+
{ id: r, type: n, permissionId: a },
|
121
121
|
i
|
122
122
|
);
|
123
123
|
else {
|
124
124
|
const o = await c.clients.createPermission(
|
125
|
-
{ id:
|
125
|
+
{ id: r, type: n },
|
126
126
|
i
|
127
127
|
);
|
128
128
|
D(o), A(
|
129
129
|
he({
|
130
130
|
realm: m,
|
131
|
-
id:
|
132
|
-
permissionType:
|
131
|
+
id: r,
|
132
|
+
permissionType: n,
|
133
133
|
permissionId: o.id
|
134
134
|
})
|
135
135
|
);
|
136
136
|
}
|
137
137
|
p(
|
138
138
|
e((a ? "update" : "create") + "PermissionSuccess"),
|
139
|
-
|
139
|
+
k.success
|
140
140
|
);
|
141
141
|
} catch (o) {
|
142
142
|
f("permissionSaveError", o);
|
@@ -151,18 +151,18 @@ function Re() {
|
|
151
151
|
onConfirm: async () => {
|
152
152
|
try {
|
153
153
|
await c.clients.delPermission({
|
154
|
-
id:
|
155
|
-
type:
|
154
|
+
id: r,
|
155
|
+
type: n,
|
156
156
|
permissionId: a
|
157
|
-
}), p(e("permissionDeletedSuccess"),
|
158
|
-
|
157
|
+
}), p(e("permissionDeletedSuccess"), k.success), A(
|
158
|
+
z({ realm: m, clientId: r, tab: "permissions" })
|
159
159
|
);
|
160
160
|
} catch (i) {
|
161
161
|
f("permissionDeletedError", i);
|
162
162
|
}
|
163
163
|
}
|
164
164
|
}), d = ie({
|
165
|
-
control:
|
165
|
+
control: y,
|
166
166
|
name: "resources",
|
167
167
|
defaultValue: []
|
168
168
|
});
|
@@ -171,10 +171,10 @@ function Re() {
|
|
171
171
|
/* @__PURE__ */ s(
|
172
172
|
te,
|
173
173
|
{
|
174
|
-
titleKey: a ? b.name : `create${
|
174
|
+
titleKey: a ? b.name : `create${re(n)}BasedPermission`,
|
175
175
|
dropdownItems: a ? [
|
176
176
|
/* @__PURE__ */ s(
|
177
|
-
|
177
|
+
ne,
|
178
178
|
{
|
179
179
|
"data-testid": "delete-resource",
|
180
180
|
isDisabled: l,
|
@@ -191,10 +191,10 @@ function Re() {
|
|
191
191
|
{
|
192
192
|
isHorizontal: !0,
|
193
193
|
role: "manage-authorization",
|
194
|
-
onSubmit:
|
194
|
+
onSubmit: O(t),
|
195
195
|
children: /* @__PURE__ */ v(de, { ...u, children: [
|
196
196
|
/* @__PURE__ */ s(
|
197
|
-
|
197
|
+
E,
|
198
198
|
{
|
199
199
|
name: "name",
|
200
200
|
label: e("name"),
|
@@ -245,14 +245,14 @@ function Re() {
|
|
245
245
|
}
|
246
246
|
),
|
247
247
|
S ? /* @__PURE__ */ s(
|
248
|
-
|
248
|
+
E,
|
249
249
|
{
|
250
250
|
name: "resourceType",
|
251
251
|
label: e("resourceType"),
|
252
252
|
labelIcon: e("resourceTypeHelp"),
|
253
253
|
rules: {
|
254
254
|
required: {
|
255
|
-
value:
|
255
|
+
value: n === "scope",
|
256
256
|
message: e("required")
|
257
257
|
}
|
258
258
|
}
|
@@ -269,24 +269,24 @@ function Re() {
|
|
269
269
|
fieldLabelId: "resources"
|
270
270
|
}
|
271
271
|
),
|
272
|
-
isRequired:
|
272
|
+
isRequired: n !== "scope",
|
273
273
|
children: [
|
274
274
|
/* @__PURE__ */ s(
|
275
|
-
|
275
|
+
_,
|
276
276
|
{
|
277
277
|
name: "resources",
|
278
|
-
clientId:
|
278
|
+
clientId: r,
|
279
279
|
permissionId: a,
|
280
|
-
preSelected:
|
281
|
-
variant:
|
282
|
-
isRequired:
|
280
|
+
preSelected: n === "scope" ? void 0 : g,
|
281
|
+
variant: n === "scope" ? N.typeahead : N.typeaheadMulti,
|
282
|
+
isRequired: n !== "scope"
|
283
283
|
}
|
284
284
|
),
|
285
|
-
F.resources && /* @__PURE__ */ s(
|
285
|
+
F.resources && /* @__PURE__ */ s(j, { message: e("required") })
|
286
286
|
]
|
287
287
|
}
|
288
288
|
),
|
289
|
-
|
289
|
+
n === "scope" && /* @__PURE__ */ v(
|
290
290
|
C,
|
291
291
|
{
|
292
292
|
label: e("authorizationScopes"),
|
@@ -303,12 +303,12 @@ function Re() {
|
|
303
303
|
/* @__PURE__ */ s(
|
304
304
|
Se,
|
305
305
|
{
|
306
|
-
clientId:
|
306
|
+
clientId: r,
|
307
307
|
resourceId: d?.[0],
|
308
|
-
preSelected:
|
308
|
+
preSelected: g
|
309
309
|
}
|
310
310
|
),
|
311
|
-
F.scopes && /* @__PURE__ */ s(
|
311
|
+
F.scopes && /* @__PURE__ */ s(j, { message: e("required") })
|
312
312
|
]
|
313
313
|
}
|
314
314
|
),
|
@@ -325,10 +325,10 @@ function Re() {
|
|
325
325
|
}
|
326
326
|
),
|
327
327
|
children: /* @__PURE__ */ s(
|
328
|
-
|
328
|
+
_,
|
329
329
|
{
|
330
330
|
name: "policies",
|
331
|
-
clientId:
|
331
|
+
clientId: r,
|
332
332
|
permissionId: a
|
333
333
|
}
|
334
334
|
)
|
@@ -348,13 +348,13 @@ function Re() {
|
|
348
348
|
fieldId: "policyEnforcementMode",
|
349
349
|
hasNoPaddingTop: !0,
|
350
350
|
children: /* @__PURE__ */ s(
|
351
|
-
|
351
|
+
Q,
|
352
352
|
{
|
353
353
|
name: "decisionStrategy",
|
354
354
|
"data-testid": "decisionStrategy",
|
355
|
-
defaultValue:
|
356
|
-
control:
|
357
|
-
render: ({ field: i }) => /* @__PURE__ */ s(B, { children: Object.values(
|
355
|
+
defaultValue: K.UNANIMOUS,
|
356
|
+
control: y,
|
357
|
+
render: ({ field: i }) => /* @__PURE__ */ s(B, { children: Object.values(K).map((o) => /* @__PURE__ */ s(
|
358
358
|
me,
|
359
359
|
{
|
360
360
|
id: o,
|
@@ -374,7 +374,7 @@ function Re() {
|
|
374
374
|
),
|
375
375
|
/* @__PURE__ */ s(fe, { children: /* @__PURE__ */ v("div", { className: "pf-v5-u-mt-md", children: [
|
376
376
|
/* @__PURE__ */ s(
|
377
|
-
|
377
|
+
M,
|
378
378
|
{
|
379
379
|
variant: H.primary,
|
380
380
|
type: "submit",
|
@@ -383,7 +383,7 @@ function Re() {
|
|
383
383
|
}
|
384
384
|
),
|
385
385
|
/* @__PURE__ */ s(
|
386
|
-
|
386
|
+
M,
|
387
387
|
{
|
388
388
|
variant: "link",
|
389
389
|
"data-testid": "cancel",
|
@@ -391,9 +391,9 @@ function Re() {
|
|
391
391
|
be,
|
392
392
|
{
|
393
393
|
...i,
|
394
|
-
to:
|
394
|
+
to: z({
|
395
395
|
realm: m,
|
396
|
-
clientId:
|
396
|
+
clientId: r,
|
397
397
|
tab: "permissions"
|
398
398
|
})
|
399
399
|
}
|
@@ -410,4 +410,4 @@ function Re() {
|
|
410
410
|
export {
|
411
411
|
Re as default
|
412
412
|
};
|
413
|
-
//# sourceMappingURL=PermissionDetails-
|
413
|
+
//# sourceMappingURL=PermissionDetails-0JqG_vH7.js.map
|