@keycloak/keycloak-admin-ui 26.2.5 → 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-CWB0JMn7.js → CreateFlow-QW6oEhyd.js} +6 -6
- package/lib/{CreateFlow-CWB0JMn7.js.map → CreateFlow-QW6oEhyd.js.map} +1 -1
- package/lib/{DetailOrganization-BBgiO-1J.js → DetailOrganization-BA1Z02u1.js} +46 -46
- package/lib/{DetailOrganization-BBgiO-1J.js.map → DetailOrganization-BA1Z02u1.js.map} +1 -1
- package/lib/{ExecutorForm-UDoSS486.js → ExecutorForm-BaJ7yk2s.js} +16 -16
- package/lib/{ExecutorForm-UDoSS486.js.map → ExecutorForm-BaJ7yk2s.js.map} +1 -1
- package/lib/{FlowDetails-CS5k-eyp.js → FlowDetails-DBaoCEnX.js} +20 -17
- package/lib/{FlowDetails-CS5k-eyp.js.map → FlowDetails-DBaoCEnX.js.map} +1 -1
- package/lib/NewOrganization-Dz3NVBFR.js +36 -0
- package/lib/{NewOrganization-Bqe9gAvH.js.map → NewOrganization-Dz3NVBFR.js.map} +1 -1
- package/lib/{PermissionConfigurationDetails-BC-CKsEm.js → PermissionConfigurationDetails-dIiFB9YL.js} +61 -61
- package/lib/{PermissionConfigurationDetails-BC-CKsEm.js.map → PermissionConfigurationDetails-dIiFB9YL.js.map} +1 -1
- package/lib/{PermissionDetails-BgU8fw67.js → PermissionDetails-0JqG_vH7.js} +66 -66
- package/lib/{PermissionDetails-BgU8fw67.js.map → PermissionDetails-0JqG_vH7.js.map} +1 -1
- package/lib/{RealmSection-BcfZPWn1.js → RealmSection-2ac_W3pw.js} +18 -18
- package/lib/{RealmSection-BcfZPWn1.js.map → RealmSection-2ac_W3pw.js.map} +1 -1
- package/lib/{ResourceDetails-BxVNBjFH.js → ResourceDetails-CTjm-Bb1.js} +36 -36
- package/lib/{ResourceDetails-BxVNBjFH.js.map → ResourceDetails-CTjm-Bb1.js.map} +1 -1
- package/lib/{ScopeDetails-B7fOqprY.js → ScopeDetails-BTzWF0ph.js} +12 -12
- package/lib/{ScopeDetails-B7fOqprY.js.map → ScopeDetails-BTzWF0ph.js.map} +1 -1
- package/lib/{ScopePicker-BkvQJ5Lq.js → ScopePicker-BOG72GXl.js} +15 -15
- package/lib/{ScopePicker-BkvQJ5Lq.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-Cf5P7Xi4.js → index-Dcc2DpAw.js} +22028 -21863
- package/lib/{index-Cf5P7Xi4.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-Bqe9gAvH.js +0 -36
- package/lib/components/key-value-form/ValueSelect.d.ts +0 -8
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ResourceDetails-BxVNBjFH.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { 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 { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":";;;;;;AA+CA,SAAwBA,KAAkB;AAClC,QAAA,EAAE,aAAAC,EAAY,IAAIC,EAAe,GAEjC,EAAE,GAAAC,EAAE,IAAIC,GAAe,GACvB,CAACC,GAAQC,CAAS,IAAIC,EAA+B,GACrD,CAACC,GAAUC,CAAW,IAAIF,EAAiC,GAE3D,CAACG,GAAaC,CAAa,IAC/BJ,EAAyC,GAErC,EAAE,UAAAK,GAAU,UAAAC,EAAS,IAAIC,EAAU,GACnCC,IAAOC,EAA2B;AAAA,IACtC,MAAM;AAAA,EAAA,CACP,GACK,EAAE,UAAAC,GAAU,cAAAC,EAAA,IAAiBH,GAE7B,EAAE,IAAAI,GAAI,YAAAC,GAAY,OAAAC,EAAA,IAAUC,EAAiC,GAC7DC,IAAWC,GAAY,GAEvBC,IAAY,CAACjB,IAAmC,OAAO;AAC3D,IAAAkB,GAAoBlB,GAAUS,CAAQ;AAAA,EACxC,GAEM,EAAE,WAAAU,EAAU,IAAIC,EAAU,GAE1BC,IAAa,CAACF,EAAU,sBAAsB;AAEpDG,EAAAA;AAAAA,IACE,MACE,QAAQ,IAAI;AAAA,MACV7B,EAAY,QAAQ,QAAQ,EAAE,IAAAkB,GAAI;AAAA,MAClCC,IACInB,EAAY,QAAQ,YAAY,EAAE,IAAAkB,GAAI,YAAAC,EAAA,CAAY,IAClD,QAAQ,QAAQ,MAAS;AAAA,MAC7BA,IACInB,EAAY,QAAQ,0BAA0B,EAAE,IAAAkB,GAAI,YAAAC,GAAY,IAChE,QAAQ,QAAQ,MAAS;AAAA,IAAA,CAC9B;AAAA,IACH,CAAC,CAACf,GAAQG,GAAUE,CAAW,MAAM;AACnC,UAAI,CAACL;AACH,cAAM,IAAI,MAAMF,EAAE,UAAU,CAAC;AAE/B,MAAAG,EAAUD,CAAM,GAChBM,EAAcD,CAAW,GACzBD,EAAYD,CAAQ,GACpBiB,EAAUjB,CAAQ;AAAA,IACpB;AAAA,IACA,CAAA;AAAA,EACF;AAEM,QAAAuB,IAAS,OAAOC,MAAiC;AAC/CxB,UAAAA,IAAWyB,GAGfD,CAAS;AAEP,QAAA;AACF,UAAIZ;AACF,cAAMnB,EAAY,QAAQ,eAAe,EAAE,IAAAkB,GAAI,YAAAC,KAAcZ,CAAQ;AAAA,WAChE;AACC,cAAA0B,IAAS,MAAMjC,EAAY,QAAQ;AAAA,UACvC,EAAE,IAAAkB,EAAG;AAAA,UACLX;AAAAA,QACF;AACA,QAAAC,EAAYD,CAAQ,GACXe,EAAAY,GAAkB,EAAE,OAAAd,GAAO,IAAAF,GAAI,YAAYe,EAAO,IAAA,CAAM,CAAC;AAAA,MAAA;AAEpE,MAAAtB;AAAA,QACET,GAAGiB,IAAa,WAAW,YAAY,iBAAiB;AAAA,QACxDgB,EAAa;AAAA,MACf;AAAA,aACOC,GAAO;AACd,MAAAxB,EAAS,qBAAqBwB,CAAK;AAAA,IAAA;AAAA,EAEvC,GAEM,CAACC,GAAoBC,CAAa,IAAIC,EAAiB;AAAA,IAC3D,UAAU;AAAA,IACV,UAEK,gBAAAC,EAAAC,GAAA,EAAA,UAAA;AAAA,MAAAvC,EAAE,uBAAuB;AAAA,MACzBO,GAAa,WAAW,KACvB,gBAAAiC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,UAAQ;AAAA,UACR,SAAO;AAAA,UACP,OAAOzC,EAAE,uBAAuB;AAAA,UAChC,WAAU;AAAA,UAEV,4BAAC,KAAE,EAAA,WAAU,iBACV,UAAAO,GAAa,IAAI,CAACmC,MAChB,gBAAAF,EAAA,UAAA,EAA2B,WAAU,iBACnC,UAAAE,EAAW,QADDA,EAAW,EAExB,CACD,EACH,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GAEJ;AAAA,IAEF,qBAAqB;AAAA,IACrB,WAAW,YAAY;AACjB,UAAA;AACI,cAAA5C,EAAY,QAAQ,YAAY;AAAA,UACpC,IAAAkB;AAAA,UACA,YAAAC;AAAA,QAAA,CACD,GACDR,EAAST,EAAE,wBAAwB,GAAGiC,EAAa,OAAO,GACjDb,EAAAuB,EAAmB,EAAE,OAAAzB,GAAO,UAAUF,GAAI,KAAK,YAAA,CAAa,CAAC;AAAA,eAC/DkB,GAAO;AACd,QAAAxB,EAAS,wBAAwBwB,CAAK;AAAA,MAAA;AAAA,IACxC;AAAA,EACF,CACD;AAED,SAAKhC,IAMD,gBAAAoC,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAAC,EAACJ,GAAc,EAAA;AAAA,IACf,gBAAAI;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,UAAU3B,IAAaZ,GAAU,OAAQ;AAAA,QACzC,eACEY,IACI;AAAA,UACE,gBAAAuB;AAAA,YAACK;AAAA,YAAA;AAAA,cAEC,eAAY;AAAA,cACZ,YAAAnB;AAAA,cACA,SAAS,MAAMS,EAAmB;AAAA,cAEjC,YAAE,QAAQ;AAAA,YAAA;AAAA,YALP;AAAA,UAAA;AAAA,QAMN,IAEF;AAAA,MAAA;AAAA,IAER;AAAA,sBACCW,GAAY,EAAA,SAAQ,SACnB,UAAC,gBAAAN,EAAAO,GAAA,EAAc,GAAGnC,GAChB,UAAA,gBAAA0B;AAAA,MAACU;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAUjC,EAAaa,CAAM;AAAA,QAE7B,UAAA;AAAA,UAAA,gBAAAY;AAAA,YAACS;AAAAA,YAAA;AAAA,cACC,MAAMhC,IAAa,eAAe;AAAA,cAClC,OAAOjB,EAAE,OAAO;AAAA,cAChB,WAAWA,EAAE,WAAW;AAAA,cACxB,cAAcE,EAAO;AAAA,cACrB,UAAQ;AAAA,YAAA;AAAA,UACV;AAAA,UACA,gBAAAsC;AAAA,YAACS;AAAAA,YAAA;AAAA,cACC,MAAM;AAAA,cACN,OAAOjD,EAAE,MAAM;AAAA,cACf,WAAWA,EAAE,kBAAkB;AAAA,cAC/B,OAAO,EAAE,UAAUA,EAAE,UAAU,EAAE;AAAA,YAAA;AAAA,UACnC;AAAA,UACA,gBAAAwC;AAAA,YAACS;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOjD,EAAE,aAAa;AAAA,cACtB,WAAWA,EAAE,iBAAiB;AAAA,cAC9B,OAAO,EAAE,UAAUA,EAAE,UAAU,EAAE;AAAA,YAAA;AAAA,UACnC;AAAA,UACA,gBAAAwC;AAAA,YAACS;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOjD,EAAE,MAAM;AAAA,cACf,WAAWA,EAAE,yBAAyB;AAAA,YAAA;AAAA,UACxC;AAAA,UACA,gBAAAwC;AAAA,YAACU;AAAA,YAAA;AAAA,cACC,OAAOlD,EAAE,MAAM;AAAA,cACf,SAAQ;AAAA,cACR,6BACGmD,GAAS,EAAA,UAAUnD,EAAE,UAAU,GAAG,cAAa,QAAO;AAAA,cAGzD,UAAA,gBAAAwC;AAAA,gBAACY;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,cAAYpD,EAAE,MAAM;AAAA,kBACpB,gBAAe;AAAA,gBAAA;AAAA,cAAA;AAAA,YACjB;AAAA,UACF;AAAA,UACA,gBAAAwC,EAACa,IAAY,EAAA,UAAUrC,EAAI,CAAA;AAAA,UAC3B,gBAAAwB;AAAA,YAACS;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOjD,EAAE,SAAS;AAAA,cAClB,WAAWA,EAAE,aAAa;AAAA,cAC1B,MAAK;AAAA,YAAA;AAAA,UACP;AAAA,UACA,gBAAAwC;AAAA,YAACc;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOtD,EAAE,oBAAoB;AAAA,cAC7B,WAAWA,EAAE,wBAAwB;AAAA,YAAA;AAAA,UACvC;AAAA,UACA,gBAAAwC;AAAA,YAACU;AAAA,YAAA;AAAA,cACC,iBAAe;AAAA,cACf,OAAOlD,EAAE,mBAAmB;AAAA,cAC5B,WACE,gBAAAwC;AAAA,gBAACW;AAAAA,gBAAA;AAAA,kBACC,UAAUnD,EAAE,uBAAuB;AAAA,kBACnC,cAAa;AAAA,gBAAA;AAAA,cACf;AAAA,cAEF,SAAQ;AAAA,cAER,UAAC,gBAAAwC,EAAAe,GAAA,EAAc,MAAK,cAAa,YAAA7B,EAAwB,CAAA;AAAA,YAAA;AAAA,UAC3D;AAAA,UACC,gBAAAc,EAAAgB,GAAA,EACC,UAAC,gBAAAlB,EAAA,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,SAASC,GAAc;AAAA,gBACvB,MAAK;AAAA,gBACL,eAAY;AAAA,gBAEX,YAAE,MAAM;AAAA,cAAA;AAAA,YACX;AAAA,YAEA,gBAAAlB;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,eAAY;AAAA,gBACZ,WAAW,CAACE,MACV,gBAAAnB;AAAA,kBAACoB;AAAA,kBAAA;AAAA,oBACE,GAAGD;AAAA,oBACJ,IAAIhB,EAAmB;AAAA,sBACrB,OAAAzB;AAAA,sBACA,UAAUF;AAAA,sBACV,KAAK;AAAA,oBACN,CAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,gBAGF,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACb,EAAA,CACF,EACF,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,OAEJ,EACF,CAAA;AAAA,EAAA,GACF,sBA7HQ6C,GAAgB,EAAA;AA+H5B;"}
|
1
|
+
{"version":3,"file":"ResourceDetails-CTjm-Bb1.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { 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 { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { jsxs as c, Fragment as D, jsx as t } from "react/jsx-runtime";
|
2
|
-
import { u as w, ao as N,
|
3
|
-
import { useState as
|
2
|
+
import { u as w, ao as N, _ as z, S as F, b as k, y as C, aF as H, aq as l, V as U, K as P, P as V, F as q, c as x, Q as d, A as B, B as m, m as E, d as T } from "./index-Dcc2DpAw.js";
|
3
|
+
import { useState as j } from "react";
|
4
4
|
import { useTranslation as K } from "react-i18next";
|
5
|
-
import { useNavigate as
|
5
|
+
import { useNavigate as Q, Link as _ } from "react-router-dom";
|
6
6
|
function R() {
|
7
|
-
const { adminClient: r } = w(), { t: e } = K(), { id: o, scopeId: i, realm: s } = N(), p =
|
7
|
+
const { adminClient: r } = w(), { t: e } = K(), { id: o, scopeId: i, realm: s } = N(), p = Q(), { addAlert: b, addError: v } = z(), [f, u] = F(), [n, h] = j(), g = k({
|
8
8
|
mode: "onChange"
|
9
9
|
}), { reset: S, handleSubmit: y } = g;
|
10
10
|
C(
|
@@ -38,7 +38,7 @@ function R() {
|
|
38
38
|
}
|
39
39
|
), p(l({ realm: s, clientId: o, tab: "scopes" }))), b(
|
40
40
|
e((i ? "update" : "create") + "ScopeSuccess"),
|
41
|
-
|
41
|
+
T.success
|
42
42
|
);
|
43
43
|
} catch (I) {
|
44
44
|
v("scopeSaveError", I);
|
@@ -61,7 +61,7 @@ function R() {
|
|
61
61
|
titleKey: i ? n?.name : e("createAuthorizationScope"),
|
62
62
|
dropdownItems: i ? [
|
63
63
|
/* @__PURE__ */ t(
|
64
|
-
|
64
|
+
P,
|
65
65
|
{
|
66
66
|
"data-testid": "delete-resource",
|
67
67
|
onClick: () => u(),
|
@@ -72,8 +72,8 @@ function R() {
|
|
72
72
|
] : void 0
|
73
73
|
}
|
74
74
|
),
|
75
|
-
/* @__PURE__ */ t(
|
76
|
-
|
75
|
+
/* @__PURE__ */ t(V, { variant: "light", children: /* @__PURE__ */ t(q, { ...g, children: /* @__PURE__ */ c(
|
76
|
+
x,
|
77
77
|
{
|
78
78
|
isHorizontal: !0,
|
79
79
|
role: "manage-authorization",
|
@@ -104,11 +104,11 @@ function R() {
|
|
104
104
|
labelIcon: e("iconUriHelp")
|
105
105
|
}
|
106
106
|
),
|
107
|
-
/* @__PURE__ */ t(
|
107
|
+
/* @__PURE__ */ t(B, { children: /* @__PURE__ */ c("div", { className: "pf-v5-u-mt-md", children: [
|
108
108
|
/* @__PURE__ */ t(
|
109
109
|
m,
|
110
110
|
{
|
111
|
-
variant:
|
111
|
+
variant: E.primary,
|
112
112
|
type: "submit",
|
113
113
|
"data-testid": "save",
|
114
114
|
children: e("save")
|
@@ -128,7 +128,7 @@ function R() {
|
|
128
128
|
variant: "link",
|
129
129
|
"data-testid": "cancel",
|
130
130
|
component: (a) => /* @__PURE__ */ t(
|
131
|
-
|
131
|
+
_,
|
132
132
|
{
|
133
133
|
...a,
|
134
134
|
to: l({
|
@@ -150,4 +150,4 @@ function R() {
|
|
150
150
|
export {
|
151
151
|
R as default
|
152
152
|
};
|
153
|
-
//# sourceMappingURL=ScopeDetails-
|
153
|
+
//# sourceMappingURL=ScopeDetails-BTzWF0ph.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ScopeDetails-
|
1
|
+
{"version":3,"file":"ScopeDetails-BTzWF0ph.js","sources":["../src/clients/authorization/ScopeDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { TextControl, 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 { 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 { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { ScopeDetailsParams } from \"../routes/Scope\";\nimport { DeleteScopeDialog } from \"./DeleteScopeDialog\";\n\ntype FormFields = Omit<ScopeRepresentation, \"resources\">;\n\nexport default function ScopeDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { id, scopeId, realm } = useParams<ScopeDetailsParams>();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n const [deleteDialog, toggleDeleteDialog] = useToggle();\n const [scope, setScope] = useState<ScopeRepresentation>();\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const { reset, handleSubmit } = form;\n\n useFetch(\n async () => {\n if (scopeId) {\n const scope = await adminClient.clients.getAuthorizationScope({\n id,\n scopeId,\n });\n if (!scope) {\n throw new Error(t(\"notFound\"));\n }\n return scope;\n }\n },\n (scope) => {\n setScope(scope);\n reset({ ...scope });\n },\n [],\n );\n\n const onSubmit = async (scope: ScopeRepresentation) => {\n try {\n if (scopeId) {\n await adminClient.clients.updateAuthorizationScope(\n { id, scopeId },\n scope,\n );\n setScope(scope);\n } else {\n await adminClient.clients.createAuthorizationScope(\n { id },\n {\n name: scope.name!,\n displayName: scope.displayName,\n iconUri: scope.iconUri,\n },\n );\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }));\n }\n addAlert(\n t((scopeId ? \"update\" : \"create\") + \"ScopeSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"scopeSaveError\", error);\n }\n };\n\n return (\n <>\n <DeleteScopeDialog\n clientId={id}\n open={deleteDialog}\n toggleDialog={toggleDeleteDialog}\n selectedScope={scope}\n refresh={() =>\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }))\n }\n />\n <ViewHeader\n titleKey={scopeId ? scope?.name! : t(\"createAuthorizationScope\")}\n dropdownItems={\n scopeId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"scopeNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"scopeDisplayNameHelp\")}\n />\n <TextControl\n name=\"iconUri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n />\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n {!scope ? (\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"scopes\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n ) : (\n <Button\n variant=\"link\"\n data-testid=\"revert\"\n onClick={() => reset({ ...scope })}\n >\n {t(\"revert\")}\n </Button>\n )}\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeDetails","adminClient","useAdminClient","t","useTranslation","id","scopeId","realm","useParams","navigate","useNavigate","addAlert","addError","useAlerts","deleteDialog","toggleDeleteDialog","useToggle","scope","setScope","useState","form","useForm","reset","handleSubmit","useFetch","onSubmit","toAuthorizationTab","AlertVariant","error","jsxs","Fragment","jsx","DeleteScopeDialog","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","ActionGroup","Button","ButtonVariant","props","Link"],"mappings":";;;;;AAyBA,SAAwBA,IAAe;AACrC,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAElB,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,EAAE,IAAAC,GAAI,SAAAC,GAAS,OAAAC,EAAA,IAAUC,EAAA,GACzBC,IAAWC,EAAA,GACX,EAAE,UAAAC,GAAU,UAAAC,EAAA,IAAaC,EAAA,GACzB,CAACC,GAAcC,CAAkB,IAAIC,EAAA,GACrC,CAACC,GAAOC,CAAQ,IAAIC,EAAA,GACpBC,IAAOC,EAAoB;AAAA,IAC/B,MAAM;AAAA,EAAA,CACP,GACK,EAAE,OAAAC,GAAO,cAAAC,EAAA,IAAiBH;AAEhCI,EAAAA;AAAAA,IACE,YAAY;AACV,UAAIlB,GAAS;AACX,cAAMW,IAAQ,MAAMhB,EAAY,QAAQ,sBAAsB;AAAA,UAC5D,IAAAI;AAAA,UACA,SAAAC;AAAA,QAAA,CACD;AACD,YAAI,CAACW;AACH,gBAAM,IAAI,MAAMd,EAAE,UAAU,CAAC;AAE/B,eAAOc;AAAAA,MAAA;AAAA,IACT;AAAA,IAEF,CAACA,MAAU;AACT,MAAAC,EAASD,CAAK,GACdK,EAAM,EAAE,GAAGL,GAAO;AAAA,IAAA;AAAA,IAEpB,CAAA;AAAA,EAAC;AAGH,QAAMQ,IAAW,OAAOR,MAA+B;AACrD,QAAI;AACF,MAAIX,KACF,MAAML,EAAY,QAAQ;AAAA,QACxB,EAAE,IAAAI,GAAI,SAAAC,EAAA;AAAA,QACNW;AAAAA,MAAA,GAEFC,EAASD,CAAK,MAEd,MAAMhB,EAAY,QAAQ;AAAA,QACxB,EAAE,IAAAI,EAAA;AAAA,QACF;AAAA,UACE,MAAMY,EAAM;AAAA,UACZ,aAAaA,EAAM;AAAA,UACnB,SAASA,EAAM;AAAA,QAAA;AAAA,MACjB,GAEFR,EAASiB,EAAmB,EAAE,OAAAnB,GAAO,UAAUF,GAAI,KAAK,SAAA,CAAU,CAAC,IAErEM;AAAA,QACER,GAAGG,IAAU,WAAW,YAAY,cAAc;AAAA,QAClDqB,EAAa;AAAA,MAAA;AAAA,IACf,SACOC,GAAO;AACd,MAAAhB,EAAS,kBAAkBgB,CAAK;AAAA,IAAA;AAAA,EAClC;AAGF,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,UAAU3B;AAAA,QACV,MAAMS;AAAA,QACN,cAAcC;AAAA,QACd,eAAeE;AAAA,QACf,SAAS,MACPR,EAASiB,EAAmB,EAAE,OAAAnB,GAAO,UAAUF,GAAI,KAAK,UAAU,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGvE,gBAAA0B;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,UAAU3B,IAAUW,GAAO,OAAQd,EAAE,0BAA0B;AAAA,QAC/D,eACEG,IACI;AAAA,UACE,gBAAAyB;AAAA,YAACG;AAAA,YAAA;AAAA,cAEC,eAAY;AAAA,cACZ,SAAS,MAAMnB,EAAA;AAAA,cAEd,YAAE,QAAQ;AAAA,YAAA;AAAA,YAJP;AAAA,UAAA;AAAA,QAKN,IAEF;AAAA,MAAA;AAAA,IAAA;AAAA,sBAGPoB,GAAA,EAAY,SAAQ,SACnB,UAAA,gBAAAJ,EAACK,GAAA,EAAc,GAAGhB,GAChB,UAAA,gBAAAS;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,UAAUd,EAAaE,CAAQ;AAAA,QAE/B,UAAA;AAAA,UAAA,gBAAAM;AAAA,YAACO;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOnC,EAAE,MAAM;AAAA,cACf,WAAWA,EAAE,eAAe;AAAA,cAC5B,OAAO,EAAE,UAAUA,EAAE,UAAU,EAAA;AAAA,YAAE;AAAA,UAAA;AAAA,UAEnC,gBAAA4B;AAAA,YAACO;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOnC,EAAE,aAAa;AAAA,cACtB,WAAWA,EAAE,sBAAsB;AAAA,YAAA;AAAA,UAAA;AAAA,UAErC,gBAAA4B;AAAA,YAACO;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOnC,EAAE,SAAS;AAAA,cAClB,WAAWA,EAAE,aAAa;AAAA,YAAA;AAAA,UAAA;AAAA,UAE5B,gBAAA4B,EAACQ,GAAA,EACC,UAAA,gBAAAV,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAACS;AAAA,cAAA;AAAA,gBACC,SAASC,EAAc;AAAA,gBACvB,MAAK;AAAA,gBACL,eAAY;AAAA,gBAEX,YAAE,MAAM;AAAA,cAAA;AAAA,YAAA;AAAA,YAGTxB,IAkBA,gBAAAc;AAAA,cAACS;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,eAAY;AAAA,gBACZ,SAAS,MAAMlB,EAAM,EAAE,GAAGL,GAAO;AAAA,gBAEhC,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA,IAtBb,gBAAAc;AAAA,cAACS;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,eAAY;AAAA,gBACZ,WAAW,CAACE,MACV,gBAAAX;AAAA,kBAACY;AAAA,kBAAA;AAAA,oBACE,GAAGD;AAAA,oBACJ,IAAIhB,EAAmB;AAAA,sBACrB,OAAAnB;AAAA,sBACA,UAAUF;AAAA,sBACV,KAAK;AAAA,oBAAA,CACN;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAIJ,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UASb,EAAA,CAEJ,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
@@ -1,15 +1,15 @@
|
|
1
|
-
import { jsx as n, jsxs as
|
2
|
-
import { u as
|
1
|
+
import { jsx as n, jsxs as q, Fragment as F } from "react/jsx-runtime";
|
2
|
+
import { u as y, ak as I, aU as P, y as O, as as T, au as j, al as k, am as z, an as G, ax as L, a7 as R, a4 as w } from "./index-Dcc2DpAw.js";
|
3
3
|
import { useState as c } from "react";
|
4
4
|
import { useTranslation as H } from "react-i18next";
|
5
5
|
const B = ({
|
6
6
|
clientId: m,
|
7
7
|
resourceTypeScopes: r
|
8
8
|
}) => {
|
9
|
-
const { adminClient: S } =
|
9
|
+
const { adminClient: S } = y(), { t: a } = H(), {
|
10
10
|
control: f,
|
11
|
-
formState: { errors:
|
12
|
-
} =
|
11
|
+
formState: { errors: x }
|
12
|
+
} = I(), [C, v] = c(!1), [p, A] = c(), [u, d] = c(""), o = P(m);
|
13
13
|
O(
|
14
14
|
() => {
|
15
15
|
const e = {
|
@@ -24,14 +24,14 @@ const B = ({
|
|
24
24
|
A,
|
25
25
|
[u]
|
26
26
|
);
|
27
|
-
const h = (e) => e.map((t, s) => /* @__PURE__ */ n(
|
27
|
+
const h = (e) => e.map((t, s) => /* @__PURE__ */ n(w, { value: t, children: typeof t == "string" ? t : t.name }, s));
|
28
28
|
if (!p && !r) return /* @__PURE__ */ n(T, {});
|
29
29
|
const g = o && r ? r : p?.map((e) => e.name);
|
30
30
|
return /* @__PURE__ */ n(
|
31
31
|
j,
|
32
32
|
{
|
33
33
|
label: a("authorizationScopes"),
|
34
|
-
labelIcon: /* @__PURE__ */ n(
|
34
|
+
labelIcon: /* @__PURE__ */ n(R, { helpText: a("clientScopesHelp"), fieldLabelId: "scopes" }),
|
35
35
|
fieldId: "scopes",
|
36
36
|
isRequired: o,
|
37
37
|
children: /* @__PURE__ */ n(
|
@@ -43,26 +43,26 @@ const B = ({
|
|
43
43
|
rules: o ? { required: a("requiredField") } : {},
|
44
44
|
render: ({ field: e }) => {
|
45
45
|
const t = e.value.map((s) => s.name);
|
46
|
-
return /* @__PURE__ */ F
|
46
|
+
return /* @__PURE__ */ q(F, { children: [
|
47
47
|
/* @__PURE__ */ n(
|
48
|
-
|
48
|
+
z,
|
49
49
|
{
|
50
50
|
toggleId: "scopes",
|
51
|
-
variant:
|
51
|
+
variant: G.typeaheadMulti,
|
52
52
|
chipGroupProps: {
|
53
53
|
numChips: 3,
|
54
54
|
expandedText: a("hide"),
|
55
55
|
collapsedText: a("showRemaining")
|
56
56
|
},
|
57
57
|
onToggle: (s) => v(s),
|
58
|
-
isOpen:
|
58
|
+
isOpen: C,
|
59
59
|
selections: t,
|
60
60
|
onFilter: (s) => (d(s), h(g || [])),
|
61
61
|
onSelect: (s) => {
|
62
|
-
const i = typeof s == "string" ? s : s.name,
|
62
|
+
const i = typeof s == "string" ? s : s.name, b = e.value.find(
|
63
63
|
(l) => l.name === i
|
64
64
|
) ? e.value.filter((l) => l.name !== i) : [...e.value, { name: i }];
|
65
|
-
e.onChange(
|
65
|
+
e.onChange(b);
|
66
66
|
},
|
67
67
|
onClear: () => {
|
68
68
|
d(""), e.onChange([]);
|
@@ -71,7 +71,7 @@ const B = ({
|
|
71
71
|
children: h(g || [])
|
72
72
|
}
|
73
73
|
),
|
74
|
-
o &&
|
74
|
+
o && x.scopes && /* @__PURE__ */ n(L, { message: a("required") })
|
75
75
|
] });
|
76
76
|
}
|
77
77
|
}
|
@@ -82,4 +82,4 @@ const B = ({
|
|
82
82
|
export {
|
83
83
|
B as S
|
84
84
|
};
|
85
|
-
//# sourceMappingURL=ScopePicker-
|
85
|
+
//# sourceMappingURL=ScopePicker-BOG72GXl.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ScopePicker-
|
1
|
+
{"version":3,"file":"ScopePicker-BOG72GXl.js","sources":["../src/clients/authorization/ScopePicker.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormGroup, SelectOption } 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 { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { useIsAdminPermissionsClient } from \"../../utils/useIsAdminPermissionsClient\";\n\ntype Scope = {\n id: string;\n name: string;\n};\n\ntype ScopePickerProps = {\n clientId: string;\n resourceTypeScopes?: string[];\n};\n\nexport const ScopePicker = ({\n clientId,\n resourceTypeScopes,\n}: ScopePickerProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const [open, setOpen] = useState(false);\n const [scopes, setScopes] = useState<ScopeRepresentation[]>();\n const [search, setSearch] = useState(\"\");\n const isAdminPermissionsClient = useIsAdminPermissionsClient(clientId);\n\n useFetch(\n () => {\n const params = {\n id: clientId,\n first: 0,\n max: 20,\n deep: false,\n name: search,\n };\n return adminClient.clients.listAllScopes(params);\n },\n setScopes,\n [search],\n );\n\n const renderScopes = (scopes: ScopeRepresentation[] | string[]) =>\n scopes.map((option, index) => (\n <SelectOption key={index} value={option}>\n {typeof option === \"string\" ? option : option.name}\n </SelectOption>\n ));\n\n if (!scopes && !resourceTypeScopes) return <KeycloakSpinner />;\n\n const allScopes =\n isAdminPermissionsClient && resourceTypeScopes\n ? resourceTypeScopes\n : scopes?.map((scope) => scope.name!);\n\n return (\n <FormGroup\n label={t(\"authorizationScopes\")}\n labelIcon={\n <HelpItem helpText={t(\"clientScopesHelp\")} fieldLabelId=\"scopes\" />\n }\n fieldId=\"scopes\"\n isRequired={isAdminPermissionsClient}\n >\n <Controller\n name=\"scopes\"\n defaultValue={[]}\n control={control}\n rules={isAdminPermissionsClient ? { required: t(\"requiredField\") } : {}}\n render={({ field }) => {\n const selectedValues = field.value.map((o: Scope) => o.name);\n return (\n <>\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n chipGroupProps={{\n numChips: 3,\n expandedText: t(\"hide\"),\n collapsedText: t(\"showRemaining\"),\n }}\n onToggle={(val) => setOpen(val)}\n isOpen={open}\n selections={selectedValues}\n onFilter={(value) => {\n setSearch(value);\n return renderScopes(allScopes || []);\n }}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedValue\n : (selectedValue as Scope).name;\n const changedValue = field.value.find(\n (o: Scope) => o.name === option,\n )\n ? field.value.filter((item: Scope) => item.name !== option)\n : [...field.value, { name: option }];\n field.onChange(changedValue);\n }}\n onClear={() => {\n setSearch(\"\");\n field.onChange([]);\n }}\n typeAheadAriaLabel={t(\"authorizationScopes\")}\n >\n {renderScopes(allScopes || [])}\n </KeycloakSelect>\n {isAdminPermissionsClient && errors.scopes && (\n <FormErrorText message={t(\"required\")} />\n )}\n </>\n );\n }}\n />\n </FormGroup>\n );\n};\n"],"names":["ScopePicker","clientId","resourceTypeScopes","adminClient","useAdminClient","t","useTranslation","control","errors","useFormContext","open","setOpen","useState","scopes","setScopes","search","setSearch","isAdminPermissionsClient","useIsAdminPermissionsClient","useFetch","params","renderScopes","option","index","jsx","SelectOption","KeycloakSpinner","allScopes","scope","FormGroup","HelpItem","Controller","field","selectedValues","o","jsxs","Fragment","KeycloakSelect","SelectVariant","val","value","selectedValue","changedValue","item","FormErrorText"],"mappings":"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"}
|
@@ -6,10 +6,7 @@ export type ImportFile = {
|
|
6
6
|
keystoreFormat: string;
|
7
7
|
keyAlias: string;
|
8
8
|
storePassword: string;
|
9
|
-
file:
|
10
|
-
value?: string;
|
11
|
-
filename: string;
|
12
|
-
};
|
9
|
+
file: File | string;
|
13
10
|
};
|
14
11
|
export declare const ImportKeyDialog: ({ save, toggleDialog, }: ImportKeyDialogProps) => import("react/jsx-runtime").JSX.Element;
|
15
12
|
export {};
|
@@ -3,6 +3,7 @@ type SamlImportKeyDialogProps = {
|
|
3
3
|
id: string;
|
4
4
|
attr: KeyTypes;
|
5
5
|
onClose: () => void;
|
6
|
+
onImported: () => void;
|
6
7
|
};
|
7
|
-
export declare const SamlImportKeyDialog: ({ id, attr, onClose, }: SamlImportKeyDialogProps) => import("react/jsx-runtime").JSX.Element;
|
8
|
+
export declare const SamlImportKeyDialog: ({ id, attr, onClose, onImported, }: SamlImportKeyDialogProps) => import("react/jsx-runtime").JSX.Element;
|
8
9
|
export {};
|
@@ -1,13 +1,21 @@
|
|
1
|
+
import { FunctionComponent, PropsWithChildren } from 'react';
|
1
2
|
export type DefaultValue = {
|
2
3
|
key: string;
|
3
4
|
values?: string[];
|
4
5
|
label: string;
|
5
6
|
};
|
6
|
-
type
|
7
|
+
type Field = {
|
8
|
+
name: string;
|
9
|
+
};
|
10
|
+
type ValueField = Field & {
|
11
|
+
keyValue: string;
|
12
|
+
};
|
13
|
+
type KeyValueInputProps = PropsWithChildren & {
|
7
14
|
name: string;
|
8
15
|
label?: string;
|
9
|
-
defaultKeyValue?: DefaultValue[];
|
10
16
|
isDisabled?: boolean;
|
17
|
+
KeyComponent?: FunctionComponent<Field>;
|
18
|
+
ValueComponent?: FunctionComponent<ValueField>;
|
11
19
|
};
|
12
|
-
export declare const KeyValueInput: ({ name, label,
|
20
|
+
export declare const KeyValueInput: ({ name, label, isDisabled, KeyComponent, ValueComponent, }: KeyValueInputProps) => import("react/jsx-runtime").JSX.Element;
|
13
21
|
export {};
|
@@ -1,7 +1,9 @@
|
|
1
|
+
import { DropdownProps } from '@patternfly/react-core';
|
1
2
|
import { ResourcesKey, Row } from './RoleMapping';
|
2
3
|
type AddRoleMappingModalProps = {
|
3
4
|
id: string;
|
4
5
|
type: ResourcesKey;
|
6
|
+
filterType: FilterType;
|
5
7
|
name?: string;
|
6
8
|
isRadio?: boolean;
|
7
9
|
onAssign: (rows: Row[]) => void;
|
@@ -9,5 +11,13 @@ type AddRoleMappingModalProps = {
|
|
9
11
|
title?: string;
|
10
12
|
actionLabel?: string;
|
11
13
|
};
|
12
|
-
export
|
14
|
+
export type FilterType = "roles" | "clients";
|
15
|
+
type AddRoleButtonProps = Omit<DropdownProps, "children" | "toggle" | "isOpen" | "onOpenChange"> & {
|
16
|
+
label?: string;
|
17
|
+
variant?: "default" | "plain" | "primary" | "plainText" | "secondary";
|
18
|
+
isDisabled?: boolean;
|
19
|
+
onFilerTypeChange: (type: FilterType) => void;
|
20
|
+
};
|
21
|
+
export declare const AddRoleButton: ({ label, variant, isDisabled, onFilerTypeChange, ...rest }: AddRoleButtonProps) => import("react/jsx-runtime").JSX.Element;
|
22
|
+
export declare const AddRoleMappingModal: ({ id, name, type, isRadio, filterType, onAssign, onClose, title, actionLabel, }: AddRoleMappingModalProps) => import("react/jsx-runtime").JSX.Element;
|
13
23
|
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const useHash: () => string;
|
@@ -0,0 +1 @@
|
|
1
|
+
export default function AddOpenIdConnect(): import("react/jsx-runtime").JSX.Element;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
type AdvancedSettingsProps = {
|
2
2
|
isOIDC: boolean;
|
3
3
|
isSAML: boolean;
|
4
|
+
isOAuth2: boolean;
|
4
5
|
};
|
5
|
-
export declare const AdvancedSettings: ({ isOIDC, isSAML }: AdvancedSettingsProps) => import("react/jsx-runtime").JSX.Element;
|
6
|
+
export declare const AdvancedSettings: ({ isOIDC, isSAML, isOAuth2, }: AdvancedSettingsProps) => import("react/jsx-runtime").JSX.Element;
|
6
7
|
export {};
|
@@ -1,5 +1,6 @@
|
|
1
1
|
type DiscoverySettingsProps = {
|
2
2
|
readOnly: boolean;
|
3
|
+
isOIDC: boolean;
|
3
4
|
};
|
4
|
-
export declare const DiscoverySettings: ({ readOnly }: DiscoverySettingsProps) => import("react/jsx-runtime").JSX.Element;
|
5
|
+
export declare const DiscoverySettings: ({ readOnly, isOIDC, }: DiscoverySettingsProps) => import("react/jsx-runtime").JSX.Element;
|
5
6
|
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const ExtendedOAuth2Settings: () => import("react/jsx-runtime").JSX.Element;
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const UserProfileClaimsSettings: () => import("react/jsx-runtime").JSX.Element;
|
@@ -1 +1,5 @@
|
|
1
|
-
|
1
|
+
type OpenIdConnectSettingsProps = {
|
2
|
+
isOIDC: boolean;
|
3
|
+
};
|
4
|
+
export declare const OpenIdConnectSettings: ({ isOIDC, }: OpenIdConnectSettingsProps) => import("react/jsx-runtime").JSX.Element;
|
5
|
+
export {};
|