ldap-rest 1.2.1 → 1.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/bin/sync-james.mjs +13 -2
- package/dist/abstract/ldapFlat.js +1 -1
- package/dist/abstract/plugin.js +1 -1
- package/dist/abstract/twakePlugin.js +1 -1
- package/dist/bin/index.js +1 -1
- package/dist/config/args.js +1 -1
- package/dist/config/options.js +1 -0
- package/dist/config/schema.js +1 -1
- package/dist/lib/auth/base.js +1 -1
- package/dist/lib/authz/base.js +1 -1
- package/dist/lib/entitySchema/validator.js +1 -1
- package/dist/lib/errors.js +1 -1
- package/dist/lib/expressFormatedResponses.js +1 -1
- package/dist/lib/health.js +1 -1
- package/dist/lib/hookBus.js +1 -0
- package/dist/lib/instanceProviders.js +1 -1
- package/dist/lib/ldapActions.js +1 -1
- package/dist/lib/ldapSchema.js +1 -1
- package/dist/lib/parseConfig.js +1 -1
- package/dist/lib/route.js +1 -0
- package/dist/lib/schemaFile.js +1 -1
- package/dist/lib/storage/store.js +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/lib/version.js +1 -0
- package/dist/logger/winston.js +1 -1
- package/dist/plugins/auth/auth.options.js +1 -0
- package/dist/plugins/auth/authzDynamic.js +1 -1
- package/dist/plugins/auth/authzLinid1.js +1 -1
- package/dist/plugins/auth/authzPerBranch.js +1 -1
- package/dist/plugins/auth/authzPerRoute.js +1 -1
- package/dist/plugins/auth/authzScope.js +1 -1
- package/dist/plugins/auth/crowdsec.js +1 -1
- package/dist/plugins/auth/fake.js +1 -1
- package/dist/plugins/auth/hmac.js +1 -1
- package/dist/plugins/auth/llng.js +1 -1
- package/dist/plugins/auth/openidconnect.js +1 -1
- package/dist/plugins/auth/rateLimit.js +1 -1
- package/dist/plugins/auth/token.js +1 -1
- package/dist/plugins/auth/totp.js +1 -1
- package/dist/plugins/auth/trustedProxy.js +1 -1
- package/dist/plugins/bcl.js +1 -1
- package/dist/plugins/bcl.options.js +1 -0
- package/dist/plugins/configApi.js +1 -1
- package/dist/plugins/demo/helloworld.js +1 -1
- package/dist/plugins/ldap/accountLifecycle.js +1 -1
- package/dist/plugins/ldap/bulkImport.js +1 -1
- package/dist/plugins/ldap/departmentSync.js +1 -1
- package/dist/plugins/ldap/enterpriseRules.js +1 -1
- package/dist/plugins/ldap/externalUsersInGroups.js +1 -1
- package/dist/plugins/ldap/flatGeneric.js +1 -1
- package/dist/plugins/ldap/groups.js +1 -1
- package/dist/plugins/ldap/ldap.options.js +1 -0
- package/dist/plugins/ldap/onChange.js +1 -1
- package/dist/plugins/ldap/organizations.js +1 -1
- package/dist/plugins/ldap/passwordPolicy.js +1 -1
- package/dist/plugins/ldap/raw.js +1 -1
- package/dist/plugins/ldap/trash.js +1 -1
- package/dist/plugins/metrics.js +1 -1
- package/dist/plugins/metrics.options.js +1 -0
- package/dist/plugins/rabbitmq.js +1 -1
- package/dist/plugins/rabbitmq.options.js +1 -0
- package/dist/plugins/scim/baseResolver.js +1 -1
- package/dist/plugins/scim/bulk.js +1 -1
- package/dist/plugins/scim/discovery.js +1 -1
- package/dist/plugins/scim/errors.js +1 -1
- package/dist/plugins/scim/filter.js +1 -1
- package/dist/plugins/scim/groups.js +1 -1
- package/dist/plugins/scim/mapping.js +1 -1
- package/dist/plugins/scim/patch.js +1 -1
- package/dist/plugins/scim/scim.js +1 -1
- package/dist/plugins/scim/scim.options.js +1 -0
- package/dist/plugins/scim/users.js +1 -1
- package/dist/plugins/static.js +1 -1
- package/dist/plugins/static.options.js +1 -0
- package/dist/plugins/storage/file.js +1 -1
- package/dist/plugins/storage/ldap.js +1 -1
- package/dist/plugins/storage/postgres.js +1 -1
- package/dist/plugins/storage/valkey.js +1 -1
- package/dist/plugins/storage.js +1 -1
- package/dist/plugins/storage.options.js +1 -0
- package/dist/plugins/twake/appAccounts.options.js +1 -0
- package/dist/plugins/twake/appAccountsApi.js +1 -1
- package/dist/plugins/twake/appAccountsConsistency.js +1 -1
- package/dist/plugins/twake/calendar.js +1 -1
- package/dist/plugins/twake/calendar.options.js +1 -0
- package/dist/plugins/twake/calendarResources.js +1 -1
- package/dist/plugins/twake/cloudery.options.js +1 -0
- package/dist/plugins/twake/clouderyProvision.js +1 -1
- package/dist/plugins/twake/cozy.options.js +1 -0
- package/dist/plugins/twake/cozyProvision.js +1 -1
- package/dist/plugins/twake/drive.js +1 -1
- package/dist/plugins/twake/drive.options.js +1 -0
- package/dist/plugins/twake/groups.js +1 -1
- package/dist/plugins/twake/instances.js +1 -1
- package/dist/plugins/twake/james.js +1 -1
- package/dist/plugins/twake/james.options.js +1 -0
- package/dist/plugins/twake/lifecycleAttributes.js +1 -1
- package/dist/plugins/twake/lifecycleEvents.js +1 -1
- package/dist/plugins/twake/migrationProxy.js +1 -1
- package/dist/plugins/twake/migrationProxy.options.js +1 -0
- package/dist/plugins/twake/spaces.js +1 -1
- package/dist/plugins/twake/tombstone.js +1 -1
- package/dist/plugins/twake/twakeGroups.options.js +1 -0
- package/dist/plugins/twake/twakeInstances.options.js +1 -0
- package/dist/plugins/twake/twakeLifecycle.options.js +1 -0
- package/dist/plugins/twake/twakeSpaces.options.js +1 -0
- package/dist/plugins/twake/twakeTombstone.options.js +1 -0
- package/dist/plugins/weblogs.js +1 -1
- package/dist/src/abstract/ldapFlat.d.ts +28 -10
- package/dist/src/abstract/plugin.d.ts +10 -5
- package/dist/src/abstract/twakePlugin.d.ts +14 -4
- package/dist/src/bin/index.d.ts +17 -4
- package/dist/src/config/args.d.ts +2 -4
- package/dist/src/config/options.d.ts +89 -0
- package/dist/src/config/schema.d.ts +50 -1
- package/dist/src/hooks.d.ts +60 -22
- package/dist/src/lib/authz/base.d.ts +4 -51
- package/dist/src/lib/authz/composition.d.ts +2 -2
- package/dist/src/lib/entitySchema/validator.d.ts +63 -6
- package/dist/src/lib/errors.d.ts +56 -1
- package/dist/src/lib/expressFormatedResponses.d.ts +49 -7
- package/dist/src/lib/hookBus.d.ts +226 -0
- package/dist/src/lib/instanceProviders.d.ts +0 -8
- package/dist/src/lib/ldapActions.d.ts +7 -0
- package/dist/src/lib/parseConfig.d.ts +5 -0
- package/dist/src/lib/route.d.ts +99 -0
- package/dist/src/lib/utils.d.ts +31 -36
- package/dist/src/lib/version.d.ts +12 -0
- package/dist/src/plugins/auth/auth.options.d.ts +88 -0
- package/dist/src/plugins/auth/authzDynamic.d.ts +10 -1
- package/dist/src/plugins/auth/authzLinid1.d.ts +6 -0
- package/dist/src/plugins/auth/authzPerBranch.d.ts +9 -0
- package/dist/src/plugins/auth/authzPerRoute.d.ts +3 -0
- package/dist/src/plugins/auth/authzScope.d.ts +23 -14
- package/dist/src/plugins/auth/crowdsec.d.ts +5 -0
- package/dist/src/plugins/auth/fake.d.ts +3 -0
- package/dist/src/plugins/auth/hmac.d.ts +4 -0
- package/dist/src/plugins/auth/llng.d.ts +4 -0
- package/dist/src/plugins/auth/openidconnect.d.ts +7 -0
- package/dist/src/plugins/auth/rateLimit.d.ts +4 -0
- package/dist/src/plugins/auth/token.d.ts +3 -0
- package/dist/src/plugins/auth/totp.d.ts +5 -0
- package/dist/src/plugins/auth/trustedProxy.d.ts +4 -0
- package/dist/src/plugins/bcl.d.ts +3 -0
- package/dist/src/plugins/bcl.options.d.ts +8 -0
- package/dist/src/plugins/configApi.d.ts +24 -5
- package/dist/src/plugins/demo/helloworld.d.ts +8 -19
- package/dist/src/plugins/ldap/accountLifecycle.d.ts +17 -0
- package/dist/src/plugins/ldap/bulkImport.d.ts +6 -76
- package/dist/src/plugins/ldap/departmentSync.d.ts +1 -0
- package/dist/src/plugins/ldap/enterpriseRules.d.ts +8 -1
- package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +4 -0
- package/dist/src/plugins/ldap/flatGeneric.d.ts +4 -0
- package/dist/src/plugins/ldap/groups.d.ts +27 -11
- package/dist/src/plugins/ldap/ldap.options.d.ts +75 -0
- package/dist/src/plugins/ldap/onChange.d.ts +10 -2
- package/dist/src/plugins/ldap/organizations.d.ts +16 -0
- package/dist/src/plugins/ldap/passwordPolicy.d.ts +32 -1
- package/dist/src/plugins/ldap/raw.d.ts +50 -19
- package/dist/src/plugins/ldap/trash.d.ts +6 -0
- package/dist/src/plugins/metrics.d.ts +3 -0
- package/dist/src/plugins/metrics.options.d.ts +8 -0
- package/dist/src/plugins/rabbitmq.d.ts +3 -0
- package/dist/src/plugins/rabbitmq.options.d.ts +8 -0
- package/dist/src/plugins/scim/baseResolver.d.ts +2 -1
- package/dist/src/plugins/scim/bulk.d.ts +6 -7
- package/dist/src/plugins/scim/discovery.d.ts +3 -0
- package/dist/src/plugins/scim/errors.d.ts +2 -1
- package/dist/src/plugins/scim/groups.d.ts +6 -4
- package/dist/src/plugins/scim/scim.d.ts +37 -3
- package/dist/src/plugins/scim/scim.options.d.ts +35 -0
- package/dist/src/plugins/scim/users.d.ts +6 -7
- package/dist/src/plugins/static.d.ts +9 -0
- package/dist/src/plugins/static.options.d.ts +13 -0
- package/dist/src/plugins/storage.d.ts +12 -1
- package/dist/src/plugins/storage.options.d.ts +16 -0
- package/dist/src/plugins/twake/appAccounts.options.d.ts +13 -0
- package/dist/src/plugins/twake/appAccountsApi.d.ts +18 -0
- package/dist/src/plugins/twake/appAccountsConsistency.d.ts +8 -0
- package/dist/src/plugins/twake/calendar.d.ts +25 -2
- package/dist/src/plugins/twake/calendar.options.d.ts +19 -0
- package/dist/src/plugins/twake/cloudery.options.d.ts +26 -0
- package/dist/src/plugins/twake/clouderyProvision.d.ts +18 -0
- package/dist/src/plugins/twake/cozy.options.d.ts +23 -0
- package/dist/src/plugins/twake/cozyProvision.d.ts +14 -0
- package/dist/src/plugins/twake/drive.d.ts +7 -0
- package/dist/src/plugins/twake/drive.options.d.ts +15 -0
- package/dist/src/plugins/twake/groups.d.ts +29 -1
- package/dist/src/plugins/twake/instances.d.ts +43 -10
- package/dist/src/plugins/twake/james.d.ts +17 -0
- package/dist/src/plugins/twake/james.options.d.ts +21 -0
- package/dist/src/plugins/twake/lifecycleEvents.d.ts +12 -0
- package/dist/src/plugins/twake/migrationProxy.d.ts +11 -11
- package/dist/src/plugins/twake/migrationProxy.options.d.ts +16 -0
- package/dist/src/plugins/twake/spaces.d.ts +30 -0
- package/dist/src/plugins/twake/tombstone.d.ts +16 -14
- package/dist/src/plugins/twake/twakeGroups.options.d.ts +20 -0
- package/dist/src/plugins/twake/twakeInstances.options.d.ts +43 -0
- package/dist/src/plugins/twake/twakeLifecycle.options.d.ts +21 -0
- package/dist/src/plugins/twake/twakeSpaces.options.d.ts +19 -0
- package/dist/src/plugins/twake/twakeTombstone.options.d.ts +17 -0
- package/docs/README.md +1 -0
- package/docs/client-development/api/rest-api.md +9 -3
- package/docs/client-development/schemas/README.md +96 -32
- package/docs/plugin-development/README.md +45 -94
- package/docs/plugin-development/dependencies.md +11 -6
- package/docs/plugin-development/hooks.md +142 -23
- package/docs/plugin-development/openapi.md +14 -1
- package/docs/plugin-development/options.md +109 -0
- package/docs/plugin-development/routes.md +152 -0
- package/docs/plugin-development/testing.md +3 -3
- package/docs/usage/configuration.md +18 -11
- package/docs/usage/operations.md +19 -4
- package/docs/usage/plugins/ldap/enterprise-rules.md +10 -1
- package/docs/usage/plugins/ldap/flat-generic.md +4 -0
- package/docs/usage/plugins/ldap/raw.md +17 -1
- package/docs/usage/upgrading.md +194 -0
- package/package.json +358 -277
- package/static/browser/ldap-browser/LdapBrowser.js +8 -6
- package/static/browser/ldap-browser/LdapBrowser.js.map +1 -1
- package/static/browser/ldap-browser/api/RawApiClient.js +2 -0
- package/static/browser/ldap-browser/api/RawApiClient.js.map +1 -1
- package/static/browser/ldap-browser/components/EntryTree.js +9 -5
- package/static/browser/ldap-browser/components/EntryTree.js.map +1 -1
- package/static/browser/ldap-browser/components/EntryView.js +2 -0
- package/static/browser/ldap-browser/components/EntryView.js.map +1 -1
- package/static/browser/ldap-browser/schema.js +3 -2
- package/static/browser/ldap-browser/schema.js.map +1 -1
- package/static/browser/ldap-browser.esm.js +27 -18
- package/static/browser/ldap-browser.esm.js.map +1 -1
- package/static/browser/ldap-browser.js +27 -18
- package/static/browser/ldap-browser.js.map +1 -1
- package/static/browser/ldap-browser.min.js +1 -1
- package/static/browser/ldap-browser.min.js.map +1 -1
- package/static/browser/ldap-group-editor/LdapGroupEditor.js +8 -6
- package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -1
- package/static/browser/ldap-group-editor/api/GroupApiClient.js +1 -0
- package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -1
- package/static/browser/ldap-group-editor/components/CreateGroupModal.js +5 -1
- package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -1
- package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +6 -3
- package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -1
- package/static/browser/ldap-group-editor/components/GroupTree.js +6 -3
- package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -1
- package/static/browser/ldap-group-editor/components/MoveGroupModal.js +6 -3
- package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -1
- package/static/browser/ldap-group-editor.esm.js +32 -16
- package/static/browser/ldap-group-editor.esm.js.map +1 -1
- package/static/browser/ldap-group-editor.js +32 -16
- package/static/browser/ldap-group-editor.js.map +1 -1
- package/static/browser/ldap-group-editor.min.js +1 -1
- package/static/browser/ldap-group-editor.min.js.map +1 -1
- package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +3 -0
- package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -1
- package/static/browser/ldap-resource-editor/cache/CacheManager.js +3 -1
- package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -1
- package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +6 -1
- package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -1
- package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +2 -0
- package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -1
- package/static/browser/ldap-tree-viewer/components/TreeNode.js +4 -0
- package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -1
- package/static/browser/ldap-tree-viewer/components/TreeRoot.js +3 -0
- package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -1
- package/static/browser/ldap-tree-viewer/store/Store.js +3 -1
- package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -1
- package/static/browser/ldap-tree-viewer.esm.js +18 -2
- package/static/browser/ldap-tree-viewer.esm.js.map +1 -1
- package/static/browser/ldap-tree-viewer.js +18 -2
- package/static/browser/ldap-tree-viewer.js.map +1 -1
- package/static/browser/ldap-tree-viewer.min.js +1 -1
- package/static/browser/ldap-tree-viewer.min.js.map +1 -1
- package/static/browser/ldap-unit-editor/LdapUnitEditor.js +7 -5
- package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -1
- package/static/browser/ldap-unit-editor/api/UnitApiClient.js +1 -0
- package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -1
- package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +7 -4
- package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -1
- package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +7 -4
- package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -1
- package/static/browser/ldap-unit-editor/components/UnitTree.js +6 -3
- package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -1
- package/static/browser/ldap-unit-editor.esm.js +28 -16
- package/static/browser/ldap-unit-editor.esm.js.map +1 -1
- package/static/browser/ldap-unit-editor.js +28 -16
- package/static/browser/ldap-unit-editor.js.map +1 -1
- package/static/browser/ldap-unit-editor.min.js +1 -1
- package/static/browser/ldap-unit-editor.min.js.map +1 -1
- package/static/browser/ldap-user-editor/LdapUserEditor.js +9 -7
- package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -1
- package/static/browser/ldap-user-editor/api/UserApiClient.js +2 -0
- package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -1
- package/static/browser/ldap-user-editor/cache/CacheManager.js +3 -1
- package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -1
- package/static/browser/ldap-user-editor/components/MoveUserModal.js +7 -4
- package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -1
- package/static/browser/ldap-user-editor/components/PointerField.js +6 -1
- package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -1
- package/static/browser/ldap-user-editor/components/UserEditor.js +10 -5
- package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -1
- package/static/browser/ldap-user-editor/components/UserList.js +8 -4
- package/static/browser/ldap-user-editor/components/UserList.js.map +1 -1
- package/static/browser/ldap-user-editor/components/UserTree.js +7 -3
- package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -1
- package/static/browser/ldap-user-editor.esm.js +55 -30
- package/static/browser/ldap-user-editor.esm.js.map +1 -1
- package/static/browser/ldap-user-editor.js +55 -30
- package/static/browser/ldap-user-editor.js.map +1 -1
- package/static/browser/ldap-user-editor.min.js +1 -1
- package/static/browser/ldap-user-editor.min.js.map +1 -1
- package/static/browser/shared/components/DisposableComponent.js +3 -5
- package/static/browser/shared/components/DisposableComponent.js.map +1 -1
- package/static/browser/shared/components/Modal.js +2 -1
- package/static/browser/shared/components/Modal.js.map +1 -1
- package/static/browser/shared/components/StatusMessage.js +3 -2
- package/static/browser/shared/components/StatusMessage.js.map +1 -1
- package/static/browser/shared/utils/form.js.map +1 -1
- package/static/browser/shared/utils/hmac.js +1 -0
- package/static/browser/shared/utils/hmac.js.map +1 -1
- package/static/browser/shared/utils/totp.js +1 -0
- package/static/browser/shared/utils/totp.js.map +1 -1
- package/static/browser/shared.esm.js +9 -8
- package/static/browser/shared.esm.js.map +1 -1
- package/static/browser/shared.js +9 -8
- package/static/browser/shared.js.map +1 -1
- package/static/browser/shared.min.js +1 -1
- package/static/browser/shared.min.js.map +1 -1
- package/static/schemas/ad/groups.json +1 -1
- package/static/schemas/ad/users.json +3 -3
- package/static/schemas/example/organizations.json +2 -2
- package/static/schemas/example/users.json +2 -2
- package/static/schemas/obm/users.json +2 -2
- package/static/schemas/standard/groups.json +1 -1
- package/static/schemas/standard/users.json +2 -2
- package/static/schemas/twake/groups.json +4 -4
- package/static/schemas/twake/teamMailboxes.json +3 -3
- package/static/schemas/twake/users.json +7 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).LdapGroupEditor={})}(this,function(e){"use strict";class t{constructor(e){this.baseUrl=e}async getConfig(){const e=await fetch(`${this.baseUrl}/api/v1/config`);if(!e.ok)throw new Error(`Failed to load config: ${e.statusText}`);return e.json()}async getOrganizations(){const e=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/top`);if(!e.ok)throw new Error(`Failed to load organizations: ${e.statusText}`);return e.json()}async getGroups(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes?objectClass=groupOfNames`);if(!t.ok)throw new Error(`Failed to load groups: ${t.statusText}`);return(await t.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:[e.objectClass];return t.includes("groupOfNames")||t.includes("group")})}async getGroup(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`);if(!t.ok)throw new Error(`Failed to load group: ${t.statusText}`);return t.json()}async updateGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({replace:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to update group: ${e}`)}}async createEntry(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok){const e=await n.text();throw new Error(`Failed to create entry: ${e}`)}}async deleteEntry(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`,{method:"DELETE"});if(!t.ok){const e=await t.text();throw new Error(`Failed to delete entry: ${e}`)}}async addMembers(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/members`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({member:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to add members: ${e}`)}}async removeMember(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/members/${encodeURIComponent(t)}`,{method:"DELETE"});if(!n.ok){const e=await n.text();throw new Error(`Failed to remove member: ${e}`)}}async moveGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/move`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetOrgDn:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to move group: ${e}`)}}async renameGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newCn:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to rename group: ${e}`)}}}class n{constructor(e,t,n){this.expandedNodes=new Set,this.selectedDn=null,this.rootDn=null,this.container=e,this.apiBaseUrl=t,this.onOrgSelect=n}async init(){this.container.innerHTML='\n <div class="group-tree">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">account_tree</span>\n Organizations\n </h3>\n <div id="tree-content">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n </div>\n ';try{const e=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/top`);if(!e.ok)throw new Error("Failed to load organizations");const t=await e.json();this.rootDn=t.dn,await this.renderTree()}catch(e){console.error("Failed to init tree:",e);const t=this.container.querySelector("#tree-content");t&&(t.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>')}}async renderTree(){const e=this.container.querySelector("#tree-content");if(e&&this.rootDn)try{const t=await this.renderNode(this.rootDn,0);e.innerHTML=t,this.attachEventListeners()}catch(t){console.error("Failed to render tree:",t),e.innerHTML='<p style="color: #f44336;">Error rendering tree</p>'}}async renderNode(e,t){const n=this.expandedNodes.has(e),r=this.selectedDn===e,o=20*t,i=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!i.ok)throw new Error("Failed to load node");const a=await i.json();let s=e;a.ou?s=Array.isArray(a.ou)?a.ou[0]:a.ou:a.cn&&(s=Array.isArray(a.cn)?a.cn[0]:a.cn);let d=`\n <div class="tree-node ${r?"active":""}" style="padding-left: ${o}px; padding: 8px 8px 8px ${o}px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(e)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(e)}">${this.escapeHtml(s)}</span>\n </div>\n `;if(n)try{const n=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const r=(await n.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:e.objectClass?[e.objectClass]:[];return t.includes("organizationalUnit")||t.includes("organization")});for(const e of r)d+=await this.renderNode(e.dn,t+1)}catch(t){console.error("Failed to load subnodes for",e,t)}return d}attachEventListeners(){this.container.querySelectorAll(".tree-node-toggle").forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.renderTree())})}),this.container.querySelectorAll(".tree-node-label").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.selectedDn=n,this.onOrgSelect(n),this.renderTree())})})}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class r{constructor(e,t,n){this.modal=null,this.expandedNodes=new Set,this.selectedOrgDn=null,this.api=e,this.currentOrgDn=t,this.onMove=n}async show(){this.modal=document.createElement("div"),this.modal.style.cssText="\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n ";const e=document.createElement("div");e.style.cssText="\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 600px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n ",e.innerHTML='\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">drive_file_move</span>\n Move Group to Organization\n </h3>\n <p style="margin: 0 0 16px 0; color: #666;">Select the target organization:</p>\n <div id="org-tree" style="margin-bottom: 24px; max-height: 400px; overflow-y: auto; border: 1px solid #ddd; border-radius: 4px; padding: 12px;">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n <div style="display: flex; gap: 12px; justify-content: flex-end;">\n <button type="button" id="cancel-move-btn" style="padding: 10px 20px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer;">Cancel</button>\n <button type="button" id="confirm-move-btn" disabled style="padding: 10px 20px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move Here\n </button>\n </div>\n ',this.modal.appendChild(e),document.body.appendChild(this.modal);const t=this.modal.querySelector("#cancel-move-btn");t&&t.addEventListener("click",()=>this.close());const n=this.modal.querySelector("#confirm-move-btn");n&&n.addEventListener("click",()=>this.handleConfirm()),this.modal.addEventListener("click",e=>{e.target===this.modal&&this.close()}),await this.loadOrgTree()}async loadOrgTree(){const e=this.modal?.querySelector("#org-tree");if(e)try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/top`);if(!t.ok)throw new Error("Failed to load organizations");const n=(await t.json()).dn,r=await this.renderNode(n,0);e.innerHTML=r,this.attachTreeEventListeners()}catch(t){console.error("Failed to load organization tree:",t),e.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>'}}async renderNode(e,t){const n=this.expandedNodes.has(e),r=this.selectedOrgDn===e,o=this.currentOrgDn===e,i=20*t,a=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!a.ok)throw new Error("Failed to load node");const s=await a.json();let d=e;s.ou?d=Array.isArray(s.ou)?s.ou[0]:s.ou:s.cn&&(d=Array.isArray(s.cn)?s.cn[0]:s.cn);let l=`\n <div class="${`tree-node ${r?"selected":""} ${o?"current-org":""}`}" style="${`padding-left: ${i}px; padding: 8px 8px 8px ${i}px; cursor: ${o?"not-allowed":"pointer"}; display: flex; align-items: center; gap: 4px; ${o?"opacity: 0.5; background: #f5f5f5;":r?"background: #e3f2fd;":""}`}" data-dn="${this.escapeHtml(e)}" data-is-current="${o}">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(e)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(e)}">${this.escapeHtml(d)}</span>\n ${o?'<span style="font-size: 12px; color: #666; margin-left: 8px;">(current)</span>':""}\n </div>\n `;if(n)try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const r=(await n.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:e.objectClass?[e.objectClass]:[];return t.includes("organizationalUnit")||t.includes("organization")});for(const e of r)l+=await this.renderNode(e.dn,t+1)}catch(t){console.error("Failed to load subnodes for",e,t)}return l}attachTreeEventListeners(){const e=this.modal?.querySelector("#org-tree");e&&(e.querySelectorAll(".tree-node-toggle").forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.loadOrgTree())})}),e.querySelectorAll(".tree-node").forEach(t=>{t.addEventListener("click",()=>{if("true"===t.getAttribute("data-is-current"))return;const n=t.getAttribute("data-dn");if(!n)return;this.selectedOrgDn=n,e.querySelectorAll(".tree-node").forEach(e=>{e.classList.remove("selected"),e.style.background=""}),t.classList.add("selected"),t.style.background="#e3f2fd";const r=this.modal?.querySelector("#confirm-move-btn");r&&(r.disabled=!1,r.style.opacity="1",r.style.cursor="pointer")})}))}async handleConfirm(){if(this.selectedOrgDn)try{await this.onMove(this.selectedOrgDn),this.close()}catch(e){console.error("Failed to move group:",e)}}close(){this.modal&&(document.body.removeChild(this.modal),this.modal=null)}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}const o=e=>(Array.isArray(e)?e:[e]).filter(e=>!(e=>null==e||""===e)(e)),i=e=>o(e).map(String);class a{constructor(e,t,n){this.group=null,this.schema=null,this.saveCallback=null,this.container=e,this.api=t,this.groupDn=n}async init(){try{await this.loadGroup(),await this.loadSchema(),this.render(),this.attachEventListeners()}catch(e){throw console.error("Failed to init GroupPropertyEditor:",e),e}}async loadGroup(){console.warn("[GroupPropertyEditor] Loading group:",this.groupDn),this.group=await this.api.getGroup(this.groupDn),console.warn("[GroupPropertyEditor] Group loaded:",this.group)}async loadSchema(){console.warn("[GroupPropertyEditor] Loading schema...");const e=await this.api.getConfig();console.warn("[GroupPropertyEditor] Config loaded:",e);const t=e.features?.ldapGroups;if(console.warn("[GroupPropertyEditor] Groups config:",t),t?.schemaUrl){const e=await fetch(t.schemaUrl);this.schema=await e.json(),console.warn("[GroupPropertyEditor] Schema loaded from URL:",this.schema)}else if(t?.schema)this.schema=t.schema,console.warn("[GroupPropertyEditor] Schema loaded from config:",this.schema);else{const t=e.features?.ldapFlatGeneric?.flatResources?.find(e=>"groups"===e.pluralName||"groups"===e.name);if(console.warn("[GroupPropertyEditor] Groups resource (flatResources):",t),t?.schemaUrl){const e=await fetch(t.schemaUrl);this.schema=await e.json(),console.warn("[GroupPropertyEditor] Schema loaded from URL (flatResources):",this.schema)}else t?.schema?(this.schema=t.schema,console.warn("[GroupPropertyEditor] Schema loaded from config (flatResources):",this.schema)):(console.warn("[GroupPropertyEditor] No schema configured, creating default schema from group attributes"),this.schema=this.createDefaultSchema(),console.warn("[GroupPropertyEditor] Default schema created:",this.schema))}}createDefaultSchema(){if(!this.group)return{entity:{objectClass:[]},attributes:{}};const e={};for(const[t,n]of Object.entries(this.group)){if("dn"===t||"*"===t||"objectClass"===t)continue;const r=Array.isArray(n);e[t]={type:r?"array":"string",required:!1,fixed:"dn"===t}}return{entity:{objectClass:Array.isArray(this.group.objectClass)?this.group.objectClass:[this.group.objectClass]},attributes:e}}onSave(e){this.saveCallback=e}render(){this.group&&(this.container.innerHTML=`\n <div class="group-property-editor">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group</span>\n Edit Group\n </h3>\n <form id="group-edit-form">\n ${this.renderFields()}\n <div class="form-actions" style="margin-top: 24px; padding-top: 24px; border-top: 1px solid #e0e0e0; display: flex; gap: 12px; justify-content: space-between;">\n <button type="button" id="move-group-btn" class="btn btn-secondary" style="background: #757575; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move\n </button>\n <div style="display: flex; gap: 12px;">\n <button type="button" id="delete-group-btn" class="btn btn-danger" style="background: #d32f2f; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">delete</span>\n Delete Group\n </button>\n <button type="submit" class="btn btn-primary" style="background: var(--primary-color, #6200ee); color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">save</span>\n Save Changes\n </button>\n </div>\n </div>\n </form>\n </div>\n `)}renderFields(){if(!this.group||!this.schema)return"<div>Loading...</div>";let e="";const t=[],n=[],r=[];for(const[e,o]of Object.entries(this.schema.attributes))o.fixed||"objectClass"===e||("member"===e||"owner"===e?n.push([e,o]):e.includes("mail")||e.includes("Mail")?r.push([e,o]):t.push([e,o]));if(t.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Basic Information</div>';for(const[n,r]of t)e+=this.renderField(n,r);e+="</div>"}if(r.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Email/Mailbox Settings</div>';for(const[t,n]of r)e+=this.renderField(t,n);e+="</div>"}if(n.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Members & Owners</div>';for(const[t,r]of n)e+=this.renderField(t,r);e+="</div>"}return e}renderField(e,t){const n=this.group?.[e],r=this.getFieldLabel(e),o=t.required?"required":"";if("array"===t.type){const t=i(n).join("\n");return"member"===e||"owner"===e?`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <div style="display: flex; gap: 8px; margin-bottom: 8px;">\n <input type="text" id="${e}-add-input" placeholder="Search DN or email..." style="flex: 1; padding: 8px; border: 1px solid #ddd; border-radius: 4px;" list="${e}-suggestions" />\n <datalist id="${e}-suggestions"></datalist>\n <button type="button" class="btn-add-${e}" style="padding: 8px 16px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons" style="font-size: 16px;">add</span>\n Add\n </button>\n </div>\n <textarea name="${this.escapeHtml(e)}" id="${e}-list" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 120px; font-family: 'Roboto', sans-serif;" ${o}>${this.escapeHtml(t)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">\n One DN per line. Type to search for users, or enter DN/email manually. Select a line and press Delete to remove.\n </div>\n </div>\n `:`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <textarea name="${this.escapeHtml(e)}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 80px; font-family: 'Roboto', sans-serif;" ${o}>${this.escapeHtml(t)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">Enter one value per line</div>\n </div>\n `}if("number"===t.type||"integer"===t.type)return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <input type="number" name="${this.escapeHtml(e)}" value="${n||""}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${o} />\n </div>\n `;const a=e.toLowerCase().includes("mail")?"email":"text";return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <input type="${a}" name="${this.escapeHtml(e)}" value="${this.escapeHtml(String(n||""))}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${o} />\n </div>\n `}getFieldLabel(e){return{cn:"Group Name",description:"Description",member:"Members",owner:"Owners",mail:"Email Address",twakeMailboxType:"Mailbox Type"}[e]||e.replace(/([A-Z])/g," $1").replace(/_/g," ").replace(/^./,e=>e.toUpperCase())}attachEventListeners(){const e=document.getElementById("group-edit-form");e&&e.addEventListener("submit",e=>this.handleSubmit(e));const t=document.getElementById("delete-group-btn");t&&t.addEventListener("click",()=>this.handleDelete());const n=document.getElementById("move-group-btn");n&&n.addEventListener("click",()=>this.handleMove());const r=this.container.querySelector(".btn-add-member");r&&r.addEventListener("click",()=>this.handleAddMember("member"));const o=this.container.querySelector(".btn-add-owner");o&&o.addEventListener("click",()=>this.handleAddMember("owner")),["member","owner"].forEach(e=>{const t=document.getElementById(`${e}-list`);t&&t.addEventListener("keydown",e=>{"Delete"===e.key&&this.handleDeleteMember(t,e)});const n=document.getElementById(`${e}-add-input`);if(n){let t;n.addEventListener("input",()=>{clearTimeout(t),t=window.setTimeout(()=>{this.searchUsers(n.value,e)},300)})}})}async searchUsers(e,t){if(e&&!(e.length<2))try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/users?match=${encodeURIComponent(e)}&attribute=cn,uid,mail&attributes=cn,uid,mail&limit=10`);if(!n.ok)return;const r=Object.values(await n.json()),o=document.getElementById(`${t}-suggestions`);if(!o)return;o.innerHTML=r.slice(0,10).map(e=>{const t=i(e.cn)[0]||i(e.uid)[0]||i(e.mail)[0]||e.dn;return`<option value="${this.escapeHtml(e.dn)}">${this.escapeHtml(t)}</option>`}).join("")}catch(e){console.error("Failed to search users:",e)}}async handleAddMember(e){const t=document.getElementById(`${e}-add-input`),n=document.getElementById(`${e}-list`);if(!t||!n)return;const r=t.value.trim();if(!r)return void alert("Please enter a DN or email address");const o=n.value.split("\n").map(e=>e.trim()).filter(e=>e);o.includes(r)?alert(`This ${e} already exists`):(o.push(r),n.value=o.join("\n"),t.value="",t.focus())}handleDeleteMember(e,t){const n=e.selectionStart,r=e.selectionEnd,o=e.value.split("\n");let i=0,a=0,s=0;for(let e=0;e<o.length;e++){const t=o[e].length+1;if(i<=n&&n<i+t&&(a=e),i<=r&&r<=i+t){s=e;break}i+=t}t.preventDefault();const d=o.filter((e,t)=>t<a||t>s);e.value=d.join("\n")}async handleSubmit(e){e.preventDefault();const t=e.target,n=new FormData(t),r={};n.forEach((e,t)=>{"array"===this.schema?.attributes[t]?.type?r[t]=e.split("\n").map(e=>e.trim()).filter(e=>e):"number"===this.schema?.attributes[t]?.type||"integer"===this.schema?.attributes[t]?.type?r[t]=Number(e):r[t]=e});const a=function(e,t){const n={};for(const[r,i]of Object.entries(t)){if("dn"===r)continue;const t=o(i),a=t.map(String).sort(),s=o(e?.[r]).map(String).sort();a.length===s.length&&a.every((e,t)=>e===s[t])||(n[r]=Array.isArray(i)?t:t.length?i:[])}return n}(this.group,r),s="member"in a,d=function(e,t){const n=i(e),r=i(t);return{added:r.filter(e=>!n.includes(e)),removed:n.filter(e=>!r.includes(e))}}(this.group?.member,a.member);delete a.member;try{if(a.cn&&this.group?.cn){const e=Array.isArray(this.group.cn)?this.group.cn[0]:this.group.cn,t=a.cn;if(e!==t){delete a.cn,await this.api.renameGroup(this.groupDn,t);const n=this.groupDn.replace(new RegExp(`^cn=${e},`),`cn=${t},`);this.groupDn=n,Object.keys(a).length>0&&await this.api.updateGroup(this.groupDn,a)}else await this.api.updateGroup(this.groupDn,a)}else Object.keys(a).length>0&&await this.api.updateGroup(this.groupDn,a);if(s){d.added.length&&await this.api.addMembers(this.groupDn,d.added);for(const e of d.removed)await this.api.removeMember(this.groupDn,e)}alert("Group updated successfully!"),this.saveCallback&&this.saveCallback()}catch(e){console.error("Failed to update group:",e),alert(`Failed to update group: ${e.message}`)}}async handleMove(){if(!this.group)return;const e=this.group.twakeDepartmentLink;if(!e)return void alert("Cannot move group: no organization link attribute found. This group may not support move operation.");const t=this.groupDn.match(/^cn=([^,]+)/),n=t?t[1]:this.groupDn,o=new r(this.api,e,async e=>{try{await this.api.moveGroup(n,e),alert("Group moved successfully!"),await this.loadGroup(),this.render(),this.attachEventListeners(),this.saveCallback&&this.saveCallback()}catch(e){console.error("Failed to move group:",e),alert(`Failed to move group: ${e.message}`)}});await o.show()}async handleDelete(){if(confirm(`Are you sure you want to delete this group?\n\n${this.groupDn}\n\nThis action cannot be undone.`))try{await this.api.deleteEntry(this.groupDn),alert("Group deleted successfully!"),this.container.innerHTML='\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>Group deleted. Select another group to edit.</p>\n </div>\n '}catch(e){console.error("Failed to delete group:",e),alert(`Failed to delete group: ${e.message}`)}}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class s{constructor(e,t,n,r){this.modal=null,this.api=e,this.config=t,this.orgDn=n,this.onCreated=r}async show(){this.modal=document.createElement("div"),this.modal.style.cssText="\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n ";const e=await this.getOrgPath(this.orgDn),t=document.createElement("div");t.style.cssText="\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 500px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n ",t.innerHTML=`\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group_add</span>\n Create New Group\n </h3>\n <form id="create-group-form" style="display: flex; flex-direction: column; gap: 16px;">\n <div>\n <label for="group-cn" style="display: block; margin-bottom: 4px; font-weight: 500;">Group Name (cn) *</label>\n <input type="text" id="group-cn" required pattern="[a-zA-Z][a-zA-Z0-9\\-]{0,254}"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;"\n placeholder="e.g., developers" />\n <small style="color: #666; font-size: 12px;">Must start with a letter, contain only letters, numbers, and hyphens</small>\n </div>\n\n <div>\n <label for="group-mail" style="display: block; margin-bottom: 4px; font-weight: 500;">Email Address</label>\n <input type="email" id="group-mail"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;"\n placeholder="e.g., developers@example.com" />\n </div>\n\n <div>\n <label for="group-description" style="display: block; margin-bottom: 4px; font-weight: 500;">Description</label>\n <textarea id="group-description" rows="3"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; resize: vertical;"\n placeholder="Group description..."></textarea>\n </div>\n\n <div style="padding: 12px; background: #f5f5f5; border-radius: 4px;">\n <p style="margin: 0 0 8px 0; font-size: 14px; color: #666;">Organization:</p>\n <p style="margin: 0; font-weight: 500;">${this.escapeHtml(e||this.orgDn)}</p>\n </div>\n\n <div id="error-message" style="display: none; padding: 12px; background: #ffebee; border-radius: 4px; color: #c62828;"></div>\n\n <div style="display: flex; gap: 12px; justify-content: flex-end;">\n <button type="button" id="cancel-create-btn" style="padding: 10px 20px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer;">Cancel</button>\n <button type="submit" style="padding: 10px 20px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">group_add</span>\n Create Group\n </button>\n </div>\n </form>\n `,this.modal.appendChild(t),document.body.appendChild(this.modal);const n=this.modal.querySelector("#cancel-create-btn");n&&n.addEventListener("click",()=>this.close());const r=this.modal.querySelector("#create-group-form");r&&r.addEventListener("submit",e=>this.handleSubmit(e)),this.modal.addEventListener("click",e=>{e.target===this.modal&&this.close()})}async getOrgPath(e){try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!t.ok)return null;const n=await t.json(),r=this.config.features?.ldapOrganizations?.pathAttribute;return r&&n[r]?Array.isArray(n[r])?n[r][0]:n[r]:e}catch(e){return console.error("Failed to load organization path:",e),null}}async handleSubmit(e){e.preventDefault();const t=this.modal?.querySelector("#group-cn"),n=this.modal?.querySelector("#group-mail"),r=this.modal?.querySelector("#group-description"),o=this.modal?.querySelector("#error-message");if(!t)return;const i=t.value.trim();if(i)try{const e={cn:i};n?.value.trim()&&(e.mail=n.value.trim()),r?.value.trim()&&(e.description=r.value.trim());const t=this.config.features?.ldapOrganizations?.linkAttribute;t&&(e[t]=this.orgDn);const o=await fetch(`${this.api.baseUrl}/api/v1/ldap/groups`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!o.ok){const e=await o.text();throw new Error(e||"Failed to create group")}await this.onCreated(),this.close()}catch(e){console.error("Failed to create group:",e),this.showError(o,e.message)}else this.showError(o,"Group name is required")}showError(e,t){e&&(e.textContent=`Error: ${t}`,e.style.display="block")}close(){this.modal&&(document.body.removeChild(this.modal),this.modal=null)}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}e.LdapGroupEditor=class{constructor(e){this.container=null,this.groupTree=null,this.groupEditor=null,this.currentGroupDn=null,this.currentOrgDn=null,this.config=null,this.options={apiBaseUrl:"undefined"!=typeof window?window.location.origin:"",...e},this.api=new t(this.options.apiBaseUrl||"")}async init(){if(this.container=document.getElementById(this.options.containerId),!this.container)throw new Error(`Container #${this.options.containerId} not found`);this.config=await this.api.getConfig(),this.render(),await this.initComponents()}render(){this.container&&(this.container.innerHTML='\n <div class="ldap-group-editor">\n <div class="editor-layout">\n <div id="group-tree-container" class="demo-panel"></div>\n <div id="group-editor-container" class="demo-panel">\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>Select a group from the tree to edit its properties</p>\n </div>\n </div>\n </div>\n </div>\n ')}async initComponents(){const e=document.getElementById("group-tree-container");if(e){this.groupTree=new n(e,this.options.apiBaseUrl||window.location.origin,e=>this.onOrgSelected(e));try{await this.groupTree.init()}catch(e){this.handleError(e)}}}async onOrgSelected(e){const t=document.getElementById("group-editor-container");if(t){this.currentOrgDn=e;try{const n=await this.api.getGroups(e);t.innerHTML=`\n <div style="padding: 20px;">\n <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">\n <h3 style="margin: 0;">Groups</h3>\n <button type="button" id="create-group-btn" style="padding: 8px 16px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">group_add</span>\n Create\n </button>\n </div>\n ${0===n.length?'\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>No groups in this organization</p>\n </div>\n ':`\n <div style="display: flex; flex-direction: column; gap: 8px;">\n ${n.map(e=>`\n <div class="group-item" data-dn="${this.escapeHtml(e.dn)}" style="padding: 12px; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group</span>\n <span>${this.escapeHtml(e.cn||e.dn)}</span>\n </div>\n `).join("")}\n </div>\n `}\n </div>\n `,t.querySelectorAll(".group-item").forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.dn;this.onGroupSelected(t)})});const r=t.querySelector("#create-group-btn");r&&r.addEventListener("click",()=>this.handleCreateGroup())}catch(e){this.handleError(e),t.innerHTML='\n <div class="empty-state">\n <span class="material-icons">error</span>\n <p>Failed to load groups</p>\n </div>\n '}}}async onGroupSelected(e){const t=document.getElementById("group-editor-container");if(t){this.currentGroupDn=e;try{this.groupEditor=new a(t,this.api,e),await this.groupEditor.init(),this.options.onGroupSaved&&this.groupEditor.onSave(()=>{this.options.onGroupSaved?.(e)})}catch(e){this.handleError(e),t.innerHTML='\n <div class="empty-state">\n <span class="material-icons">error</span>\n <p>Failed to load group properties</p>\n </div>\n '}}}async handleCreateGroup(){if(!this.currentOrgDn||!this.config)return;const e=new s(this.api,this.config,this.currentOrgDn,async()=>{await this.onOrgSelected(this.currentOrgDn),this.options.onGroupSaved&&this.options.onGroupSaved("")});await e.show()}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}handleError(e){console.error("LdapGroupEditor error:",e),this.options.onError&&this.options.onError(e)}getApi(){return this.api}getConfig(){return this.config}getCurrentOrgDn(){return this.currentOrgDn}getCurrentUserDn(){return this.currentGroupDn}async createUser(e){return this.api.createEntry(e.dn,e)}async deleteUser(e){return this.api.deleteEntry(e)}}});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).LdapGroupEditor={})}(this,function(e){"use strict";class t{baseUrl;constructor(e){this.baseUrl=e}async getConfig(){const e=await fetch(`${this.baseUrl}/api/v1/config`);if(!e.ok)throw new Error(`Failed to load config: ${e.statusText}`);return e.json()}async getOrganizations(){const e=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/top`);if(!e.ok)throw new Error(`Failed to load organizations: ${e.statusText}`);return e.json()}async getGroups(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes?objectClass=groupOfNames`);if(!t.ok)throw new Error(`Failed to load groups: ${t.statusText}`);return(await t.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:[e.objectClass];return t.includes("groupOfNames")||t.includes("group")})}async getGroup(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`);if(!t.ok)throw new Error(`Failed to load group: ${t.statusText}`);return t.json()}async updateGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({replace:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to update group: ${e}`)}}async createEntry(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok){const e=await n.text();throw new Error(`Failed to create entry: ${e}`)}}async deleteEntry(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`,{method:"DELETE"});if(!t.ok){const e=await t.text();throw new Error(`Failed to delete entry: ${e}`)}}async addMembers(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/members`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({member:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to add members: ${e}`)}}async removeMember(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/members/${encodeURIComponent(t)}`,{method:"DELETE"});if(!n.ok){const e=await n.text();throw new Error(`Failed to remove member: ${e}`)}}async moveGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/move`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetOrgDn:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to move group: ${e}`)}}async renameGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newCn:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to rename group: ${e}`)}}}class n{container;apiBaseUrl;onOrgSelect;expandedNodes=new Set;selectedDn=null;rootDn=null;constructor(e,t,n){this.container=e,this.apiBaseUrl=t,this.onOrgSelect=n}async init(){this.container.innerHTML='\n <div class="group-tree">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">account_tree</span>\n Organizations\n </h3>\n <div id="tree-content">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n </div>\n ';try{const e=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/top`);if(!e.ok)throw new Error("Failed to load organizations");const t=await e.json();this.rootDn=t.dn,await this.renderTree()}catch(e){console.error("Failed to init tree:",e);const t=this.container.querySelector("#tree-content");t&&(t.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>')}}async renderTree(){const e=this.container.querySelector("#tree-content");if(e&&this.rootDn)try{const t=await this.renderNode(this.rootDn,0);e.innerHTML=t,this.attachEventListeners()}catch(t){console.error("Failed to render tree:",t),e.innerHTML='<p style="color: #f44336;">Error rendering tree</p>'}}async renderNode(e,t){const n=this.expandedNodes.has(e),r=this.selectedDn===e,o=20*t,i=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!i.ok)throw new Error("Failed to load node");const a=await i.json();let s=e;a.ou?s=Array.isArray(a.ou)?a.ou[0]:a.ou:a.cn&&(s=Array.isArray(a.cn)?a.cn[0]:a.cn);let l=`\n <div class="tree-node ${r?"active":""}" style="padding-left: ${o}px; padding: 8px 8px 8px ${o}px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(e)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(e)}">${this.escapeHtml(s)}</span>\n </div>\n `;if(n)try{const n=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const r=(await n.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:e.objectClass?[e.objectClass]:[];return t.includes("organizationalUnit")||t.includes("organization")});for(const e of r)l+=await this.renderNode(e.dn,t+1)}catch(t){console.error("Failed to load subnodes for",e,t)}return l}attachEventListeners(){this.container.querySelectorAll(".tree-node-toggle").forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.renderTree())})}),this.container.querySelectorAll(".tree-node-label").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.selectedDn=n,this.onOrgSelect(n),this.renderTree())})})}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class r{api;currentOrgDn;onMove;modal=null;expandedNodes=new Set;selectedOrgDn=null;constructor(e,t,n){this.api=e,this.currentOrgDn=t,this.onMove=n}async show(){this.modal=document.createElement("div"),this.modal.style.cssText="\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n ";const e=document.createElement("div");e.style.cssText="\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 600px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n ",e.innerHTML='\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">drive_file_move</span>\n Move Group to Organization\n </h3>\n <p style="margin: 0 0 16px 0; color: #666;">Select the target organization:</p>\n <div id="org-tree" style="margin-bottom: 24px; max-height: 400px; overflow-y: auto; border: 1px solid #ddd; border-radius: 4px; padding: 12px;">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n <div style="display: flex; gap: 12px; justify-content: flex-end;">\n <button type="button" id="cancel-move-btn" style="padding: 10px 20px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer;">Cancel</button>\n <button type="button" id="confirm-move-btn" disabled style="padding: 10px 20px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move Here\n </button>\n </div>\n ',this.modal.appendChild(e),document.body.appendChild(this.modal);const t=this.modal.querySelector("#cancel-move-btn");t&&t.addEventListener("click",()=>this.close());const n=this.modal.querySelector("#confirm-move-btn");n&&n.addEventListener("click",()=>this.handleConfirm()),this.modal.addEventListener("click",e=>{e.target===this.modal&&this.close()}),await this.loadOrgTree()}async loadOrgTree(){const e=this.modal?.querySelector("#org-tree");if(e)try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/top`);if(!t.ok)throw new Error("Failed to load organizations");const n=(await t.json()).dn,r=await this.renderNode(n,0);e.innerHTML=r,this.attachTreeEventListeners()}catch(t){console.error("Failed to load organization tree:",t),e.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>'}}async renderNode(e,t){const n=this.expandedNodes.has(e),r=this.selectedOrgDn===e,o=this.currentOrgDn===e,i=20*t,a=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!a.ok)throw new Error("Failed to load node");const s=await a.json();let l=e;s.ou?l=Array.isArray(s.ou)?s.ou[0]:s.ou:s.cn&&(l=Array.isArray(s.cn)?s.cn[0]:s.cn);let d=`\n <div class="${`tree-node ${r?"selected":""} ${o?"current-org":""}`}" style="${`padding-left: ${i}px; padding: 8px 8px 8px ${i}px; cursor: ${o?"not-allowed":"pointer"}; display: flex; align-items: center; gap: 4px; ${o?"opacity: 0.5; background: #f5f5f5;":r?"background: #e3f2fd;":""}`}" data-dn="${this.escapeHtml(e)}" data-is-current="${o}">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(e)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(e)}">${this.escapeHtml(l)}</span>\n ${o?'<span style="font-size: 12px; color: #666; margin-left: 8px;">(current)</span>':""}\n </div>\n `;if(n)try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const r=(await n.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:e.objectClass?[e.objectClass]:[];return t.includes("organizationalUnit")||t.includes("organization")});for(const e of r)d+=await this.renderNode(e.dn,t+1)}catch(t){console.error("Failed to load subnodes for",e,t)}return d}attachTreeEventListeners(){const e=this.modal?.querySelector("#org-tree");e&&(e.querySelectorAll(".tree-node-toggle").forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.loadOrgTree())})}),e.querySelectorAll(".tree-node").forEach(t=>{t.addEventListener("click",()=>{if("true"===t.getAttribute("data-is-current"))return;const n=t.getAttribute("data-dn");if(!n)return;this.selectedOrgDn=n,e.querySelectorAll(".tree-node").forEach(e=>{e.classList.remove("selected"),e.style.background=""}),t.classList.add("selected"),t.style.background="#e3f2fd";const r=this.modal?.querySelector("#confirm-move-btn");r&&(r.disabled=!1,r.style.opacity="1",r.style.cursor="pointer")})}))}async handleConfirm(){if(this.selectedOrgDn)try{await this.onMove(this.selectedOrgDn),this.close()}catch(e){console.error("Failed to move group:",e)}}close(){this.modal&&(document.body.removeChild(this.modal),this.modal=null)}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}const o=e=>(Array.isArray(e)?e:[e]).filter(e=>!(e=>null==e||""===e)(e)),i=e=>o(e).map(String);class a{container;api;groupDn;group=null;schema=null;saveCallback=null;constructor(e,t,n){this.container=e,this.api=t,this.groupDn=n}async init(){try{await this.loadGroup(),await this.loadSchema(),this.render(),this.attachEventListeners()}catch(e){throw console.error("Failed to init GroupPropertyEditor:",e),e}}async loadGroup(){console.warn("[GroupPropertyEditor] Loading group:",this.groupDn),this.group=await this.api.getGroup(this.groupDn),console.warn("[GroupPropertyEditor] Group loaded:",this.group)}async loadSchema(){console.warn("[GroupPropertyEditor] Loading schema...");const e=await this.api.getConfig();console.warn("[GroupPropertyEditor] Config loaded:",e);const t=e.features?.ldapGroups;if(console.warn("[GroupPropertyEditor] Groups config:",t),t?.schemaUrl){const e=await fetch(t.schemaUrl);this.schema=await e.json(),console.warn("[GroupPropertyEditor] Schema loaded from URL:",this.schema)}else if(t?.schema)this.schema=t.schema,console.warn("[GroupPropertyEditor] Schema loaded from config:",this.schema);else{const t=e.features?.ldapFlatGeneric?.flatResources?.find(e=>"groups"===e.pluralName||"groups"===e.name);if(console.warn("[GroupPropertyEditor] Groups resource (flatResources):",t),t?.schemaUrl){const e=await fetch(t.schemaUrl);this.schema=await e.json(),console.warn("[GroupPropertyEditor] Schema loaded from URL (flatResources):",this.schema)}else t?.schema?(this.schema=t.schema,console.warn("[GroupPropertyEditor] Schema loaded from config (flatResources):",this.schema)):(console.warn("[GroupPropertyEditor] No schema configured, creating default schema from group attributes"),this.schema=this.createDefaultSchema(),console.warn("[GroupPropertyEditor] Default schema created:",this.schema))}}createDefaultSchema(){if(!this.group)return{entity:{objectClass:[]},attributes:{}};const e={};for(const[t,n]of Object.entries(this.group)){if("dn"===t||"*"===t||"objectClass"===t)continue;const r=Array.isArray(n);e[t]={type:r?"array":"string",required:!1,fixed:"dn"===t}}return{entity:{objectClass:Array.isArray(this.group.objectClass)?this.group.objectClass:[this.group.objectClass]},attributes:e}}onSave(e){this.saveCallback=e}render(){this.group&&(this.container.innerHTML=`\n <div class="group-property-editor">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group</span>\n Edit Group\n </h3>\n <form id="group-edit-form">\n ${this.renderFields()}\n <div class="form-actions" style="margin-top: 24px; padding-top: 24px; border-top: 1px solid #e0e0e0; display: flex; gap: 12px; justify-content: space-between;">\n <button type="button" id="move-group-btn" class="btn btn-secondary" style="background: #757575; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move\n </button>\n <div style="display: flex; gap: 12px;">\n <button type="button" id="delete-group-btn" class="btn btn-danger" style="background: #d32f2f; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">delete</span>\n Delete Group\n </button>\n <button type="submit" class="btn btn-primary" style="background: var(--primary-color, #6200ee); color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">save</span>\n Save Changes\n </button>\n </div>\n </div>\n </form>\n </div>\n `)}renderFields(){if(!this.group||!this.schema)return"<div>Loading...</div>";let e="";const t=[],n=[],r=[];for(const[e,o]of Object.entries(this.schema.attributes))o.fixed||"objectClass"===e||("member"===e||"owner"===e?n.push([e,o]):e.includes("mail")||e.includes("Mail")?r.push([e,o]):t.push([e,o]));if(t.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Basic Information</div>';for(const[n,r]of t)e+=this.renderField(n,r);e+="</div>"}if(r.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Email/Mailbox Settings</div>';for(const[t,n]of r)e+=this.renderField(t,n);e+="</div>"}if(n.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Members & Owners</div>';for(const[t,r]of n)e+=this.renderField(t,r);e+="</div>"}return e}renderField(e,t){const n=this.group?.[e],r=this.getFieldLabel(e),o=t.required?"required":"";if("array"===t.type){const t=i(n).join("\n");return"member"===e||"owner"===e?`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <div style="display: flex; gap: 8px; margin-bottom: 8px;">\n <input type="text" id="${e}-add-input" placeholder="Search DN or email..." style="flex: 1; padding: 8px; border: 1px solid #ddd; border-radius: 4px;" list="${e}-suggestions" />\n <datalist id="${e}-suggestions"></datalist>\n <button type="button" class="btn-add-${e}" style="padding: 8px 16px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons" style="font-size: 16px;">add</span>\n Add\n </button>\n </div>\n <textarea name="${this.escapeHtml(e)}" id="${e}-list" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 120px; font-family: 'Roboto', sans-serif;" ${o}>${this.escapeHtml(t)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">\n One DN per line. Type to search for users, or enter DN/email manually. Select a line and press Delete to remove.\n </div>\n </div>\n `:`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <textarea name="${this.escapeHtml(e)}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 80px; font-family: 'Roboto', sans-serif;" ${o}>${this.escapeHtml(t)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">Enter one value per line</div>\n </div>\n `}if("number"===t.type||"integer"===t.type)return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <input type="number" name="${this.escapeHtml(e)}" value="${n||""}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${o} />\n </div>\n `;const a=e.toLowerCase().includes("mail")?"email":"text";return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <input type="${a}" name="${this.escapeHtml(e)}" value="${this.escapeHtml(String(n||""))}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${o} />\n </div>\n `}getFieldLabel(e){return{cn:"Group Name",description:"Description",member:"Members",owner:"Owners",mail:"Email Address",twakeMailboxType:"Mailbox Type"}[e]||e.replace(/([A-Z])/g," $1").replace(/_/g," ").replace(/^./,e=>e.toUpperCase())}attachEventListeners(){const e=document.getElementById("group-edit-form");e&&e.addEventListener("submit",e=>this.handleSubmit(e));const t=document.getElementById("delete-group-btn");t&&t.addEventListener("click",()=>this.handleDelete());const n=document.getElementById("move-group-btn");n&&n.addEventListener("click",()=>this.handleMove());const r=this.container.querySelector(".btn-add-member");r&&r.addEventListener("click",()=>this.handleAddMember("member"));const o=this.container.querySelector(".btn-add-owner");o&&o.addEventListener("click",()=>this.handleAddMember("owner")),["member","owner"].forEach(e=>{const t=document.getElementById(`${e}-list`);t&&t.addEventListener("keydown",e=>{"Delete"===e.key&&this.handleDeleteMember(t,e)});const n=document.getElementById(`${e}-add-input`);if(n){let t;n.addEventListener("input",()=>{clearTimeout(t),t=window.setTimeout(()=>{this.searchUsers(n.value,e)},300)})}})}async searchUsers(e,t){if(e&&!(e.length<2))try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/users?match=${encodeURIComponent(e)}&attribute=cn,uid,mail&attributes=cn,uid,mail&limit=10`);if(!n.ok)return;const r=Object.values(await n.json()),o=document.getElementById(`${t}-suggestions`);if(!o)return;o.innerHTML=r.slice(0,10).map(e=>{const t=i(e.cn)[0]||i(e.uid)[0]||i(e.mail)[0]||e.dn;return`<option value="${this.escapeHtml(e.dn)}">${this.escapeHtml(t)}</option>`}).join("")}catch(e){console.error("Failed to search users:",e)}}async handleAddMember(e){const t=document.getElementById(`${e}-add-input`),n=document.getElementById(`${e}-list`);if(!t||!n)return;const r=t.value.trim();if(!r)return void alert("Please enter a DN or email address");const o=n.value.split("\n").map(e=>e.trim()).filter(e=>e);o.includes(r)?alert(`This ${e} already exists`):(o.push(r),n.value=o.join("\n"),t.value="",t.focus())}handleDeleteMember(e,t){const n=e.selectionStart,r=e.selectionEnd,o=e.value.split("\n");let i=0,a=0,s=0;for(let e=0;e<o.length;e++){const t=o[e].length+1;if(i<=n&&n<i+t&&(a=e),i<=r&&r<=i+t){s=e;break}i+=t}t.preventDefault();const l=o.filter((e,t)=>t<a||t>s);e.value=l.join("\n")}async handleSubmit(e){e.preventDefault();const t=e.target,n=new FormData(t),r={};n.forEach((e,t)=>{"array"===this.schema?.attributes[t]?.type?r[t]=e.split("\n").map(e=>e.trim()).filter(e=>e):"number"===this.schema?.attributes[t]?.type||"integer"===this.schema?.attributes[t]?.type?r[t]=Number(e):r[t]=e});const a=function(e,t){const n={};for(const[r,i]of Object.entries(t)){if("dn"===r)continue;const t=o(i),a=t.map(String).sort(),s=o(e?.[r]).map(String).sort();a.length===s.length&&a.every((e,t)=>e===s[t])||(n[r]=Array.isArray(i)?t:t.length?i:[])}return n}(this.group,r),s="member"in a,l=function(e,t){const n=i(e),r=i(t);return{added:r.filter(e=>!n.includes(e)),removed:n.filter(e=>!r.includes(e))}}(this.group?.member,a.member);delete a.member;try{if(a.cn&&this.group?.cn){const e=Array.isArray(this.group.cn)?this.group.cn[0]:this.group.cn,t=a.cn;if(e!==t){delete a.cn,await this.api.renameGroup(this.groupDn,t);const n=this.groupDn.replace(new RegExp(`^cn=${e},`),`cn=${t},`);this.groupDn=n,Object.keys(a).length>0&&await this.api.updateGroup(this.groupDn,a)}else await this.api.updateGroup(this.groupDn,a)}else Object.keys(a).length>0&&await this.api.updateGroup(this.groupDn,a);if(s){l.added.length&&await this.api.addMembers(this.groupDn,l.added);for(const e of l.removed)await this.api.removeMember(this.groupDn,e)}alert("Group updated successfully!"),this.saveCallback&&this.saveCallback()}catch(e){console.error("Failed to update group:",e),alert(`Failed to update group: ${e.message}`)}}async handleMove(){if(!this.group)return;const e=this.group.twakeDepartmentLink;if(!e)return void alert("Cannot move group: no organization link attribute found. This group may not support move operation.");const t=this.groupDn.match(/^cn=([^,]+)/),n=t?t[1]:this.groupDn,o=new r(this.api,e,async e=>{try{await this.api.moveGroup(n,e),alert("Group moved successfully!"),await this.loadGroup(),this.render(),this.attachEventListeners(),this.saveCallback&&this.saveCallback()}catch(e){console.error("Failed to move group:",e),alert(`Failed to move group: ${e.message}`)}});await o.show()}async handleDelete(){if(confirm(`Are you sure you want to delete this group?\n\n${this.groupDn}\n\nThis action cannot be undone.`))try{await this.api.deleteEntry(this.groupDn),alert("Group deleted successfully!"),this.container.innerHTML='\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>Group deleted. Select another group to edit.</p>\n </div>\n '}catch(e){console.error("Failed to delete group:",e),alert(`Failed to delete group: ${e.message}`)}}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class s{api;config;orgDn;onCreated;modal=null;constructor(e,t,n,r){this.api=e,this.config=t,this.orgDn=n,this.onCreated=r}async show(){this.modal=document.createElement("div"),this.modal.style.cssText="\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n ";const e=await this.getOrgPath(this.orgDn),t=document.createElement("div");t.style.cssText="\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 500px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n ",t.innerHTML=`\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group_add</span>\n Create New Group\n </h3>\n <form id="create-group-form" style="display: flex; flex-direction: column; gap: 16px;">\n <div>\n <label for="group-cn" style="display: block; margin-bottom: 4px; font-weight: 500;">Group Name (cn) *</label>\n <input type="text" id="group-cn" required pattern="[a-zA-Z][a-zA-Z0-9\\-]{0,254}"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;"\n placeholder="e.g., developers" />\n <small style="color: #666; font-size: 12px;">Must start with a letter, contain only letters, numbers, and hyphens</small>\n </div>\n\n <div>\n <label for="group-mail" style="display: block; margin-bottom: 4px; font-weight: 500;">Email Address</label>\n <input type="email" id="group-mail"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;"\n placeholder="e.g., developers@example.com" />\n </div>\n\n <div>\n <label for="group-description" style="display: block; margin-bottom: 4px; font-weight: 500;">Description</label>\n <textarea id="group-description" rows="3"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; resize: vertical;"\n placeholder="Group description..."></textarea>\n </div>\n\n <div style="padding: 12px; background: #f5f5f5; border-radius: 4px;">\n <p style="margin: 0 0 8px 0; font-size: 14px; color: #666;">Organization:</p>\n <p style="margin: 0; font-weight: 500;">${this.escapeHtml(e||this.orgDn)}</p>\n </div>\n\n <div id="error-message" style="display: none; padding: 12px; background: #ffebee; border-radius: 4px; color: #c62828;"></div>\n\n <div style="display: flex; gap: 12px; justify-content: flex-end;">\n <button type="button" id="cancel-create-btn" style="padding: 10px 20px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer;">Cancel</button>\n <button type="submit" style="padding: 10px 20px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">group_add</span>\n Create Group\n </button>\n </div>\n </form>\n `,this.modal.appendChild(t),document.body.appendChild(this.modal);const n=this.modal.querySelector("#cancel-create-btn");n&&n.addEventListener("click",()=>this.close());const r=this.modal.querySelector("#create-group-form");r&&r.addEventListener("submit",e=>this.handleSubmit(e)),this.modal.addEventListener("click",e=>{e.target===this.modal&&this.close()})}async getOrgPath(e){try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!t.ok)return null;const n=await t.json(),r=this.config.features?.ldapOrganizations?.pathAttribute;return r&&n[r]?Array.isArray(n[r])?n[r][0]:n[r]:e}catch(e){return console.error("Failed to load organization path:",e),null}}async handleSubmit(e){e.preventDefault();const t=this.modal?.querySelector("#group-cn"),n=this.modal?.querySelector("#group-mail"),r=this.modal?.querySelector("#group-description"),o=this.modal?.querySelector("#error-message");if(!t)return;const i=t.value.trim();if(i)try{const e={cn:i};n?.value.trim()&&(e.mail=n.value.trim()),r?.value.trim()&&(e.description=r.value.trim());const t=this.config.features?.ldapOrganizations?.linkAttribute;t&&(e[t]=this.orgDn);const o=await fetch(`${this.api.baseUrl}/api/v1/ldap/groups`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!o.ok){const e=await o.text();throw new Error(e||"Failed to create group")}await this.onCreated(),this.close()}catch(e){console.error("Failed to create group:",e),this.showError(o,e.message)}else this.showError(o,"Group name is required")}showError(e,t){e&&(e.textContent=`Error: ${t}`,e.style.display="block")}close(){this.modal&&(document.body.removeChild(this.modal),this.modal=null)}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}e.LdapGroupEditor=class{options;api;container=null;groupTree=null;groupEditor=null;currentGroupDn=null;currentOrgDn=null;config=null;constructor(e){this.options={apiBaseUrl:"undefined"!=typeof window?window.location.origin:"",...e},this.api=new t(this.options.apiBaseUrl||"")}async init(){if(this.container=document.getElementById(this.options.containerId),!this.container)throw new Error(`Container #${this.options.containerId} not found`);this.config=await this.api.getConfig(),this.render(),await this.initComponents()}render(){this.container&&(this.container.innerHTML='\n <div class="ldap-group-editor">\n <div class="editor-layout">\n <div id="group-tree-container" class="demo-panel"></div>\n <div id="group-editor-container" class="demo-panel">\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>Select a group from the tree to edit its properties</p>\n </div>\n </div>\n </div>\n </div>\n ')}async initComponents(){const e=document.getElementById("group-tree-container");if(e){this.groupTree=new n(e,this.options.apiBaseUrl||window.location.origin,e=>this.onOrgSelected(e));try{await this.groupTree.init()}catch(e){this.handleError(e)}}}async onOrgSelected(e){const t=document.getElementById("group-editor-container");if(t){this.currentOrgDn=e;try{const n=await this.api.getGroups(e);t.innerHTML=`\n <div style="padding: 20px;">\n <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">\n <h3 style="margin: 0;">Groups</h3>\n <button type="button" id="create-group-btn" style="padding: 8px 16px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">group_add</span>\n Create\n </button>\n </div>\n ${0===n.length?'\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>No groups in this organization</p>\n </div>\n ':`\n <div style="display: flex; flex-direction: column; gap: 8px;">\n ${n.map(e=>`\n <div class="group-item" data-dn="${this.escapeHtml(e.dn)}" style="padding: 12px; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group</span>\n <span>${this.escapeHtml(e.cn||e.dn)}</span>\n </div>\n `).join("")}\n </div>\n `}\n </div>\n `,t.querySelectorAll(".group-item").forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.dn;this.onGroupSelected(t)})});const r=t.querySelector("#create-group-btn");r&&r.addEventListener("click",()=>this.handleCreateGroup())}catch(e){this.handleError(e),t.innerHTML='\n <div class="empty-state">\n <span class="material-icons">error</span>\n <p>Failed to load groups</p>\n </div>\n '}}}async onGroupSelected(e){const t=document.getElementById("group-editor-container");if(t){this.currentGroupDn=e;try{this.groupEditor=new a(t,this.api,e),await this.groupEditor.init(),this.options.onGroupSaved&&this.groupEditor.onSave(()=>{this.options.onGroupSaved?.(e)})}catch(e){this.handleError(e),t.innerHTML='\n <div class="empty-state">\n <span class="material-icons">error</span>\n <p>Failed to load group properties</p>\n </div>\n '}}}async handleCreateGroup(){if(!this.currentOrgDn||!this.config)return;const e=new s(this.api,this.config,this.currentOrgDn,async()=>{await this.onOrgSelected(this.currentOrgDn),this.options.onGroupSaved&&this.options.onGroupSaved("")});await e.show()}escapeHtml(e){if(null==e)return"";const t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}handleError(e){console.error("LdapGroupEditor error:",e),this.options.onError&&this.options.onError(e)}getApi(){return this.api}getConfig(){return this.config}getCurrentOrgDn(){return this.currentOrgDn}getCurrentUserDn(){return this.currentGroupDn}async createUser(e){return this.api.createEntry(e.dn,e)}async deleteUser(e){return this.api.deleteEntry(e)}}});
|
|
2
2
|
//# sourceMappingURL=ldap-group-editor.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ldap-group-editor.min.js","sources":["../../../../src/browser/ldap-group-editor/api/GroupApiClient.ts","../../../../src/browser/ldap-group-editor/components/GroupTree.ts","../../../../src/browser/ldap-group-editor/components/MoveGroupModal.ts","../../../../src/browser/shared/utils/form.ts","../../../../src/browser/ldap-group-editor/components/GroupPropertyEditor.ts","../../../../src/browser/ldap-group-editor/components/CreateGroupModal.ts","../../../../src/browser/ldap-group-editor/LdapGroupEditor.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["GroupApiClient","constructor","baseUrl","this","getConfig","response","fetch","ok","Error","statusText","json","getOrganizations","getGroups","orgDn","encodeURIComponent","filter","node","classes","Array","isArray","objectClass","includes","getGroup","dn","updateGroup","replace","method","headers","body","JSON","stringify","error","text","createEntry","data","deleteEntry","addMembers","member","removeMember","moveGroup","cn","targetOrgDn","renameGroup","newCn","GroupTree","container","apiBaseUrl","onOrgSelect","expandedNodes","Set","selectedDn","rootDn","init","innerHTML","topOrg","renderTree","console","treeEl","querySelector","html","renderNode","attachEventListeners","level","isExpanded","has","isSelected","indent","displayName","ou","escapeHtml","subnodesResponse","orgs","n","subnode","querySelectorAll","forEach","el","addEventListener","async","e","stopPropagation","getAttribute","delete","add","map","String","m","MoveGroupModal","api","currentOrgDn","onMove","modal","selectedOrgDn","show","document","createElement","style","cssText","modalContent","appendChild","cancelBtn","close","confirmBtn","handleConfirm","target","loadOrgTree","treeContainer","attachTreeEventListeners","isCurrent","classList","remove","background","disabled","opacity","cursor","removeChild","valueList","value","v","isEmpty","listValues","GroupPropertyEditor","groupDn","group","schema","saveCallback","loadGroup","loadSchema","render","warn","config","groupsConfig","features","ldapGroups","schemaUrl","groupsResource","ldapFlatGeneric","flatResources","find","r","pluralName","name","createDefaultSchema","entity","attributes","key","Object","entries","type","required","fixed","onSave","callback","renderFields","basicFields","memberFields","mailFields","fieldName","attribute","push","length","renderField","label","getFieldLabel","arrayValue","join","toLowerCase","description","owner","mail","twakeMailboxType","str","toUpperCase","form","getElementById","handleSubmit","deleteBtn","handleDelete","moveBtn","handleMove","addMemberBtn","handleAddMember","addOwnerBtn","textarea","handleDeleteMember","input","searchTimeout","clearTimeout","window","setTimeout","searchUsers","query","results","values","datalist","slice","user","uid","valueToAdd","trim","alert","currentValues","split","focus","start","selectionStart","end","selectionEnd","lines","currentPos","startLine","endLine","i","lineLength","preventDefault","newLines","_","formData","FormData","edited","Number","updates","original","after","a","sort","b","every","changedAttributes","membersChanged","members","before","was","is","added","removed","listChanges","oldCn","newDn","RegExp","keys","message","twakeDepartmentLink","cnMatch","match","confirm","CreateGroupModal","onCreated","orgPath","getOrgPath","org","pathAttr","ldapOrganizations","pathAttribute","cnInput","mailInput","descInput","errorDiv","groupData","linkAttr","linkAttribute","showError","textContent","display","options","groupTree","groupEditor","currentGroupDn","location","origin","containerId","initComponents","onOrgSelected","handleError","editorContainer","groups","item","dataset","onGroupSelected","createBtn","handleCreateGroup","onGroupSaved","onError","getApi","getCurrentOrgDn","getCurrentUserDn","createUser","deleteUser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ldap-group-editor.min.js","sources":["../../../../src/browser/ldap-group-editor/api/GroupApiClient.ts","../../../../src/browser/ldap-group-editor/components/GroupTree.ts","../../../../src/browser/ldap-group-editor/components/MoveGroupModal.ts","../../../../src/browser/shared/utils/form.ts","../../../../src/browser/ldap-group-editor/components/GroupPropertyEditor.ts","../../../../src/browser/ldap-group-editor/components/CreateGroupModal.ts","../../../../src/browser/ldap-group-editor/LdapGroupEditor.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["GroupApiClient","baseUrl","constructor","this","getConfig","response","fetch","ok","Error","statusText","json","getOrganizations","getGroups","orgDn","encodeURIComponent","filter","node","classes","Array","isArray","objectClass","includes","getGroup","dn","updateGroup","replace","method","headers","body","JSON","stringify","error","text","createEntry","data","deleteEntry","addMembers","member","removeMember","moveGroup","cn","targetOrgDn","renameGroup","newCn","GroupTree","container","apiBaseUrl","onOrgSelect","expandedNodes","Set","selectedDn","rootDn","init","innerHTML","topOrg","renderTree","console","treeEl","querySelector","html","renderNode","attachEventListeners","level","isExpanded","has","isSelected","indent","displayName","ou","escapeHtml","subnodesResponse","orgs","n","subnode","querySelectorAll","forEach","el","addEventListener","async","e","stopPropagation","getAttribute","delete","add","map","String","m","MoveGroupModal","api","currentOrgDn","onMove","modal","selectedOrgDn","show","document","createElement","style","cssText","modalContent","appendChild","cancelBtn","close","confirmBtn","handleConfirm","target","loadOrgTree","treeContainer","attachTreeEventListeners","isCurrent","classList","remove","background","disabled","opacity","cursor","removeChild","valueList","value","v","isEmpty","listValues","GroupPropertyEditor","groupDn","group","schema","saveCallback","loadGroup","loadSchema","render","warn","config","groupsConfig","features","ldapGroups","schemaUrl","groupsResource","ldapFlatGeneric","flatResources","find","r","pluralName","name","createDefaultSchema","entity","attributes","key","Object","entries","type","required","fixed","onSave","callback","renderFields","basicFields","memberFields","mailFields","fieldName","attribute","push","length","renderField","label","getFieldLabel","arrayValue","join","toLowerCase","description","owner","mail","twakeMailboxType","str","toUpperCase","form","getElementById","handleSubmit","deleteBtn","handleDelete","moveBtn","handleMove","addMemberBtn","handleAddMember","addOwnerBtn","textarea","handleDeleteMember","input","searchTimeout","clearTimeout","window","setTimeout","searchUsers","query","results","values","datalist","slice","user","uid","valueToAdd","trim","alert","currentValues","split","focus","start","selectionStart","end","selectionEnd","lines","currentPos","startLine","endLine","i","lineLength","preventDefault","newLines","_","formData","FormData","edited","Number","updates","original","after","a","sort","b","every","changedAttributes","membersChanged","members","before","was","is","added","removed","listChanges","oldCn","newDn","RegExp","keys","message","twakeDepartmentLink","cnMatch","match","confirm","CreateGroupModal","onCreated","orgPath","getOrgPath","org","pathAttr","ldapOrganizations","pathAttribute","cnInput","mailInput","descInput","errorDiv","groupData","linkAttr","linkAttribute","showError","textContent","display","options","groupTree","groupEditor","currentGroupDn","location","origin","containerId","initComponents","onOrgSelected","handleError","editorContainer","groups","item","dataset","onGroupSelected","createBtn","handleCreateGroup","onGroupSaved","onError","getApi","getCurrentOrgDn","getCurrentUserDn","createUser","deleteUser"],"mappings":"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"}
|
|
@@ -5,6 +5,9 @@ import { hasRole } from '../../shared/utils/schema.js';
|
|
|
5
5
|
* LDAP Resource Editor - Generic API Client
|
|
6
6
|
*/
|
|
7
7
|
class ResourceApiClient {
|
|
8
|
+
baseUrl;
|
|
9
|
+
cache;
|
|
10
|
+
resourceType;
|
|
8
11
|
constructor(resourceType, baseUrl = '', cacheOptions) {
|
|
9
12
|
this.resourceType = resourceType;
|
|
10
13
|
this.baseUrl =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceApiClient.js","sources":["../../../../../src/browser/ldap-resource-editor/api/ResourceApiClient.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;AAEG;MAYU,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"ResourceApiClient.js","sources":["../../../../../src/browser/ldap-resource-editor/api/ResourceApiClient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
* Prevents excessive API calls when navigating the organization tree
|
|
4
4
|
*/
|
|
5
5
|
class CacheManager {
|
|
6
|
+
cache = new Map();
|
|
7
|
+
ttl;
|
|
8
|
+
maxEntries;
|
|
6
9
|
constructor(options = {}) {
|
|
7
|
-
this.cache = new Map();
|
|
8
10
|
this.ttl = options.ttl ?? 5 * 60 * 1000; // 5 minutes default
|
|
9
11
|
this.maxEntries = options.maxEntries ?? 200; // 200 entries max
|
|
10
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheManager.js","sources":["../../../../../src/browser/ldap-resource-editor/cache/CacheManager.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;AAGG;MAmBU,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"CacheManager.js","sources":["../../../../../src/browser/ldap-resource-editor/cache/CacheManager.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;AAGG;MAmBU,YAAY,CAAA;AACf,IAAA,KAAK,GAAqC,IAAI,GAAG,EAAE;AACnD,IAAA,GAAG;AACH,IAAA,UAAU;AAElB,IAAA,WAAA,CAAY,UAAwB,EAAE,EAAA;AACpC,QAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC9C;AAEA;;;AAGG;AACH,IAAA,GAAG,CAAI,GAAW,EAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAA8B;AAC9D,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;;AAGvB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AAC5C,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACtB,YAAA,OAAO,IAAI;QACb;;QAGA,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;QAC5B,OAAO,KAAK,CAAC,IAAI;IACnB;AAEA;;;AAGG;IACH,GAAG,CAAI,GAAW,EAAE,IAAO,EAAA;;QAEzB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC9D,IAAI,CAAC,QAAQ,EAAE;QACjB;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI;AACJ,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,WAAW,EAAE,CAAC;AACf,SAAA,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,GAAW,EAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;IAC/B;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACxB;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,OAAe,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAC7D;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB;QACF;IACF;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AAEA;;AAEG;IACH,QAAQ,GAAA;QAMN,OAAO;AACL,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,OAAO,EAAE,IAAI,CAAC,UAAU;YACxB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACpC;IACH;AAEA;;AAEG;IACK,QAAQ,GAAA;QACd,IAAI,MAAM,GAAkB,IAAI;QAChC,IAAI,OAAO,GAAG,QAAQ;QACtB,IAAI,QAAQ,GAAG,QAAQ;AAEvB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;;AAE/C,YAAA,IACE,KAAK,CAAC,WAAW,GAAG,QAAQ;AAC5B,iBAAC,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,EAC7D;gBACA,MAAM,GAAG,GAAG;AACZ,gBAAA,OAAO,GAAG,KAAK,CAAC,SAAS;AACzB,gBAAA,QAAQ,GAAG,KAAK,CAAC,WAAW;YAC9B;QACF;QAEA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B;IACF;AAEA;;;AAGG;IACH,YAAY,GAAA;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,OAAO,GAAG,CAAC;AAEf,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AACrC,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACtB,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;AACD;;;;"}
|
|
@@ -8,9 +8,14 @@ import { TreeRoot } from './components/TreeRoot.js';
|
|
|
8
8
|
* Main LdapTreeViewer class
|
|
9
9
|
*/
|
|
10
10
|
class LdapTreeViewer {
|
|
11
|
+
options;
|
|
12
|
+
store;
|
|
13
|
+
api;
|
|
14
|
+
container;
|
|
15
|
+
rootComponent = null;
|
|
16
|
+
unsubscribe;
|
|
11
17
|
constructor(options) {
|
|
12
18
|
this.options = options;
|
|
13
|
-
this.rootComponent = null;
|
|
14
19
|
const container = document.getElementById(options.containerId);
|
|
15
20
|
if (!container) {
|
|
16
21
|
throw new Error(`Container element #${options.containerId} not found`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LdapTreeViewer.js","sources":["../../../../src/browser/ldap-tree-viewer/LdapTreeViewer.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;AAEG;MAiBU,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"LdapTreeViewer.js","sources":["../../../../src/browser/ldap-tree-viewer/LdapTreeViewer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LdapApiClient.js","sources":["../../../../../src/browser/ldap-tree-viewer/api/LdapApiClient.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;AAEG;MAmBU,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"LdapApiClient.js","sources":["../../../../../src/browser/ldap-tree-viewer/api/LdapApiClient.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;AAEG;MAmBU,aAAa,CAAA;AAEd,IAAA,OAAA;AACA,IAAA,SAAA;IAFV,WAAA,CACU,OAAe,EACf,SAAkB,EAAA;QADlB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,SAAS,GAAT,SAAS;IAChB;IAEK,MAAM,KAAK,CAAI,QAAgB,EAAA;AACrC,QAAA,MAAM,OAAO,GAAgB;AAC3B,YAAA,cAAc,EAAE,kBAAkB;SACnC;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,SAAS,CAAA,CAAE;QACvD;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AAEvE,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,YAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAC,MAAM,CAAA,GAAA,EAAM,SAAS,CAAA,CAAE,CAAC;QACjE;AAEA,QAAA,OAAO,QAAQ,CAAC,IAAI,EAAgB;IACtC;AAEA,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAmB,gCAAgC,CAAC;IACvE;IAEA,MAAM,eAAe,CAAC,EAAU,EAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CACf,8BAA8B,SAAS,CAAA,CAAE,CAC1C;IACH;IAEA,MAAM,uBAAuB,CAAC,EAAU,EAAA;AACtC,QAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,KAAK,CACf,8BAA8B,SAAS,CAAA,SAAA,CAAW,CACnD;IACH;AAEA,IAAA,MAAM,0BAA0B,CAC9B,EAAU,EACV,KAAa,EAAA;AAEb,QAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CACf,CAAA,2BAAA,EAA8B,SAAS,CAAA,mBAAA,EAAsB,YAAY,CAAA,CAAE,CAC5E;IACH;IAEA,MAAM,QAAQ,CAAC,MAAe,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAA,QAAA,EAAW,kBAAkB,CAAC,MAAM,CAAC,CAAA,CAAE,GAAG,EAAE;QACnE,OAAO,IAAI,CAAC,KAAK,CAAmB,qBAAqB,KAAK,CAAA,CAAE,CAAC;IACnE;IAEA,MAAM,SAAS,CAAC,MAAe,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAA,QAAA,EAAW,kBAAkB,CAAC,MAAM,CAAC,CAAA,CAAE,GAAG,EAAE;QACnE,OAAO,IAAI,CAAC,KAAK,CAAmB,sBAAsB,KAAK,CAAA,CAAE,CAAC;IACpE;AACD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNode.js","sources":["../../../../../src/browser/ldap-tree-viewer/components/TreeNode.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;AAEG;MAKU,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"TreeNode.js","sources":["../../../../../src/browser/ldap-tree-viewer/components/TreeNode.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRoot.js","sources":["../../../../../src/browser/ldap-tree-viewer/components/TreeRoot.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;AAEG;MAOU,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"TreeRoot.js","sources":["../../../../../src/browser/ldap-tree-viewer/components/TreeRoot.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Mini Store implementation (Redux-like pattern without dependencies)
|
|
3
3
|
*/
|
|
4
4
|
class Store {
|
|
5
|
+
state;
|
|
6
|
+
reducer;
|
|
7
|
+
listeners = new Set();
|
|
5
8
|
constructor(reducer, initialState) {
|
|
6
|
-
this.listeners = new Set();
|
|
7
9
|
this.reducer = reducer;
|
|
8
10
|
this.state = initialState;
|
|
9
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Store.js","sources":["../../../../../src/browser/ldap-tree-viewer/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;AAEG;MAUU,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"Store.js","sources":["../../../../../src/browser/ldap-tree-viewer/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;AAEG;MAUU,KAAK,CAAA;AACR,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,SAAS,GAAkB,IAAI,GAAG,EAAE;IAE5C,WAAA,CAAY,OAAmB,EAAE,YAAe,EAAA;AAC9C,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY;IAC3B;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;;AAG7C,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChD;IACF;AAEA,IAAA,SAAS,CAAC,QAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;;QAE5B,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C;AACD;;;;"}
|