ldap-rest 1.2.1 → 2.0.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/ldap/callerView.js +1 -0
- package/dist/lib/ldap/pool.js +1 -0
- package/dist/lib/ldap/schema.js +1 -0
- package/dist/lib/ldap/searchCache.js +1 -0
- 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/services/index.js +1 -0
- 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 +41 -10
- package/dist/src/abstract/plugin.d.ts +31 -5
- package/dist/src/abstract/twakePlugin.d.ts +14 -4
- package/dist/src/bin/index.d.ts +35 -4
- package/dist/src/config/args.d.ts +2 -4
- package/dist/src/config/options.d.ts +104 -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 +57 -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/ldap/callerView.d.ts +45 -0
- package/dist/src/lib/ldap/pool.d.ts +108 -0
- package/dist/src/lib/ldap/schema.d.ts +157 -0
- package/dist/src/lib/ldap/searchCache.d.ts +112 -0
- package/dist/src/lib/ldapActions.d.ts +26 -256
- package/dist/src/lib/parseConfig.d.ts +31 -2
- package/dist/src/lib/route.d.ts +99 -0
- package/dist/src/lib/services/index.d.ts +56 -0
- package/dist/src/lib/utils.d.ts +100 -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 -15
- 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 +35 -3
- 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/mapping.d.ts +16 -3
- 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/types.d.ts +2 -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 +74 -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/lifecycleAttributes.d.ts +13 -2
- 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 +25 -16
- 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 +17 -2
- package/docs/client-development/api/rest-api.md +13 -3
- package/docs/client-development/schemas/README.md +96 -32
- package/docs/development/contracts.md +109 -0
- package/docs/plugin-development/README.md +53 -95
- package/docs/plugin-development/dependencies.md +24 -8
- package/docs/plugin-development/hooks.md +143 -23
- package/docs/plugin-development/openapi.md +14 -1
- package/docs/plugin-development/options.md +136 -0
- package/docs/plugin-development/routes.md +152 -0
- package/docs/plugin-development/services.md +95 -0
- package/docs/plugin-development/testing.md +3 -3
- package/docs/usage/configuration.md +18 -11
- package/docs/usage/operations.md +28 -4
- package/docs/usage/plugins/integrations/instances.md +11 -3
- package/docs/usage/plugins/integrations/lifecycle-events.md +4 -1
- package/docs/usage/plugins/integrations/scim.md +20 -18
- package/docs/usage/plugins/integrations/tombstone.md +10 -6
- package/docs/usage/plugins/ldap/enterprise-rules.md +10 -1
- package/docs/usage/plugins/ldap/flat-generic.md +11 -0
- package/docs/usage/plugins/ldap/groups.md +4 -1
- package/docs/usage/plugins/ldap/password-policy.md +7 -0
- package/docs/usage/plugins/ldap/raw.md +17 -1
- package/docs/usage/upgrading.md +253 -0
- package/package.json +372 -286
- 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
package/docs/usage/upgrading.md
CHANGED
|
@@ -4,6 +4,259 @@ What to check before deploying, newest first. Only releases that need a
|
|
|
4
4
|
decision or a configuration change appear here; see the
|
|
5
5
|
[CHANGELOG](../../CHANGELOG.md) for everything else.
|
|
6
6
|
|
|
7
|
+
## From 1.3.0
|
|
8
|
+
|
|
9
|
+
### A plugin with its own `service` member
|
|
10
|
+
|
|
11
|
+
**Who is affected:** a plugin built outside this repository that declares a
|
|
12
|
+
field, getter or method named `service`.
|
|
13
|
+
|
|
14
|
+
`DmPlugin` now has `service(token)`, which returns the instance another plugin
|
|
15
|
+
provides under a service token. Rename the plugin's own `service` member. See
|
|
16
|
+
[plugin services](../plugin-development/services.md).
|
|
17
|
+
|
|
18
|
+
### A plugin with its own `provides` member
|
|
19
|
+
|
|
20
|
+
**Who is affected:** a plugin built outside this repository that declares a
|
|
21
|
+
field named `provides`.
|
|
22
|
+
|
|
23
|
+
`DmPlugin` now has `provides`, the services a plugin offers to others. Rename
|
|
24
|
+
the plugin's own `provides` member, or it becomes the list of services the
|
|
25
|
+
plugin declares. See
|
|
26
|
+
[plugin services](../plugin-development/services.md#providing-a-service).
|
|
27
|
+
|
|
28
|
+
### A path parameter is percent-decoded once
|
|
29
|
+
|
|
30
|
+
**Who is affected:** a client that encoded a path parameter twice to reach an
|
|
31
|
+
identifier holding `%`, sending `/users/100%2525` for the entry `100%`.
|
|
32
|
+
|
|
33
|
+
The parameter is decoded once now, as RFC 3986 spells it: an identifier
|
|
34
|
+
holding `%` goes out as `100%25`. A parameter still encoded twice names the
|
|
35
|
+
escaped text, so `/users/100%2525` addresses the entry `100%25`
|
|
36
|
+
([details](../client-development/api/rest-api.md#url-encoding)).
|
|
37
|
+
|
|
38
|
+
### A paged search opens its connection on the first page
|
|
39
|
+
|
|
40
|
+
**Who is affected:** a plugin calling `ldap.search()` with paging, leaving the
|
|
41
|
+
returned generator unread and expecting a connection to have been opened, or
|
|
42
|
+
expecting a connection or hook error from the call itself.
|
|
43
|
+
|
|
44
|
+
A paged search takes its pooled connection when the first page is read, not
|
|
45
|
+
when `search()` is called. A generator that is never walked holds no
|
|
46
|
+
connection, and the next request can use the slot. A connection or bind
|
|
47
|
+
failure, the 30 s wait for a pooled connection and an `ldapsearchresult` hook
|
|
48
|
+
that refuses are answered on the first page, not by the call; a read that
|
|
49
|
+
must fail when it is made uses `paged: false`.
|
|
50
|
+
|
|
51
|
+
### A deletion date written in another shape
|
|
52
|
+
|
|
53
|
+
**Who is affected:** a deployment whose writer writes the lifecycle deletion
|
|
54
|
+
date as something other than an ISO 8601 date or a GeneralizedTime with its
|
|
55
|
+
zone — for example `date '+%F %T'` (`2025-01-01 12:00:00`), an RFC 2822 date,
|
|
56
|
+
or a US-style `01/02/2025`.
|
|
57
|
+
|
|
58
|
+
The deletion date is read only in those two shapes now, where the default
|
|
59
|
+
`iso8601` mode handed anything else to `new Date()`. An unreadable date makes
|
|
60
|
+
`erase` answer `409` without `force`, leaves `deletedAt` out of the events,
|
|
61
|
+
and a rule whose payload holds only `$changed.<date>` publishes nothing. Write
|
|
62
|
+
an ISO 8601 date, such as with `date -u '+%Y-%m-%dT%H:%M:%SZ'`, or a
|
|
63
|
+
GeneralizedTime with its zone, and see
|
|
64
|
+
[lifecycle events](plugins/integrations/lifecycle-events.md#configuration).
|
|
65
|
+
|
|
66
|
+
## From 1.2.1
|
|
67
|
+
|
|
68
|
+
### A plugin written against the old hooks API
|
|
69
|
+
|
|
70
|
+
**Who is affected:** a deployment loading a plugin built outside this
|
|
71
|
+
repository that calls `launchHooks` / `launchHooksChained`, or subscribes
|
|
72
|
+
to a `*done` hook with its arguments packed in one tuple.
|
|
73
|
+
|
|
74
|
+
Hooks are raised through `this.hookBus`, and every hook is declared in
|
|
75
|
+
`src/hooks.ts`: a plugin raising or subscribing to a hook the server does
|
|
76
|
+
not declare no longer compiles. A notified hook — `ldapadddone`,
|
|
77
|
+
`ldapaddafter`, `ldapmodifydone`, `ldaprenamedone`, `ldapgroupadddone`,
|
|
78
|
+
`ldapgroupmodifydone`, `ldapgrouprenamedone`, `ldapexternaluseradded` — now
|
|
79
|
+
gets its arguments one by one: `(dn, entry, context) => …`, not
|
|
80
|
+
`([dn, entry], context) => …`. The packed form still compiles — parameters
|
|
81
|
+
are bivariant — and then reads the DN's first character, so a plugin left
|
|
82
|
+
as it was stops reacting without saying so. `ldapgroupdeletemember` threads
|
|
83
|
+
`[cn, member]`, a single member DN, as it always handed one.
|
|
84
|
+
|
|
85
|
+
A test waiting for a hook to land waits on `await server.hookBus.settled()`
|
|
86
|
+
rather than sleeping. See [hooks](../plugin-development/hooks.md#the-bus).
|
|
87
|
+
|
|
88
|
+
### A plugin with its own `options` or `optionDefinitions` member
|
|
89
|
+
|
|
90
|
+
**Who is affected:** a plugin built outside this repository that declares a
|
|
91
|
+
field, getter or method named `options`, or a static field named
|
|
92
|
+
`optionDefinitions`.
|
|
93
|
+
|
|
94
|
+
`DmPlugin` now has `options()`, which returns the values a plugin declared
|
|
95
|
+
through `optionDefinitions`. Rename the plugin's own `options` member; a
|
|
96
|
+
plugin that does not declare options keeps reading `this.config` as before.
|
|
97
|
+
|
|
98
|
+
### A plugin extending `TwakePlugin`
|
|
99
|
+
|
|
100
|
+
**Who is affected:** a plugin built outside this repository whose class extends
|
|
101
|
+
`TwakePlugin`.
|
|
102
|
+
|
|
103
|
+
The base constructor takes the WebAdmin URL, token and concurrency instead of
|
|
104
|
+
the names of the options holding them:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { jamesOptionsOf } from 'ldap-rest/plugin-twake-james.options';
|
|
108
|
+
|
|
109
|
+
const options = jamesOptionsOf(server.config);
|
|
110
|
+
super(server, {
|
|
111
|
+
url: options.james_webadmin_url,
|
|
112
|
+
token: options.james_webadmin_token,
|
|
113
|
+
concurrency: options.james_concurrency,
|
|
114
|
+
urlOption: 'james_webadmin_url',
|
|
115
|
+
tokenOption: 'james_webadmin_token',
|
|
116
|
+
concurrencyOption: 'james_concurrency',
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
The three `*Option` fields only name the option in the startup error and the
|
|
121
|
+
missing-token warning. `concurrency` must be a positive integer; the base
|
|
122
|
+
refuses anything else, naming `concurrencyOption`.
|
|
123
|
+
|
|
124
|
+
### A plugin building SCIM's exported helpers
|
|
125
|
+
|
|
126
|
+
**Who is affected:** a plugin built outside this repository that constructs
|
|
127
|
+
`ScimUsers`, `ScimGroups`, `ScimBulk`, `ScimDiscovery` or `BaseResolver`, or
|
|
128
|
+
calls `scimBodyParser`.
|
|
129
|
+
|
|
130
|
+
These take the SCIM options instead of a plain `Config`:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { scimOptionsOf } from 'ldap-rest/plugin-scim-scim.options';
|
|
134
|
+
|
|
135
|
+
const options = scimOptionsOf(config);
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`BaseResolver` keeps its `(config, options)` form; the others take the checked
|
|
139
|
+
values beside what they already require.
|
|
140
|
+
|
|
141
|
+
### An invalid SCIM or Twake value
|
|
142
|
+
|
|
143
|
+
**Who is affected:** a deployment setting a SCIM limit to zero or a negative
|
|
144
|
+
number, giving a per-instance override of the wrong JSON type, or setting the
|
|
145
|
+
James, Calendar, Drive or migration proxy concurrency to the wrong type.
|
|
146
|
+
|
|
147
|
+
These options now refuse a value below 1 when the plugin loads: a zero used
|
|
148
|
+
to be silently replaced by the default, and a negative value used as it was.
|
|
149
|
+
Remove the option to keep the default, or give it a positive number.
|
|
150
|
+
|
|
151
|
+
A per-instance override (`--plugin core/scim:name:{...}`) must also use the
|
|
152
|
+
option's JSON type: `{"scim_max_results": "50"}` and `{"scim_user_base":
|
|
153
|
+
null}` are refused, where the quoted number used to be coerced and the null
|
|
154
|
+
treated as unset. The applicative accounts options refuse the same:
|
|
155
|
+
`{"max_app_accounts": "5"}` used to be kept as the string, and
|
|
156
|
+
`{"applicative_account_attribute": "cn"}` was spread into `['c', 'n']`.
|
|
157
|
+
|
|
158
|
+
The James, Calendar, Drive and migration proxy concurrency used to replace a
|
|
159
|
+
value that was not a number with `10`, and now refuses it. A zero or a
|
|
160
|
+
negative value was already refused by `p-limit`, and the message now names
|
|
161
|
+
the option. The other Twake options also refuse a value of the wrong JSON
|
|
162
|
+
type in an override.
|
|
163
|
+
|
|
164
|
+
A zero `--twake-group-max-page-limit`, `--twake-instance-timeout`,
|
|
165
|
+
`--cloudery-workflow-poll-interval-ms` or
|
|
166
|
+
`--cloudery-workflow-max-attempts` used to be replaced by the default and is
|
|
167
|
+
now refused.
|
|
168
|
+
|
|
169
|
+
The authentication and authorization options are checked the same way. A zero
|
|
170
|
+
`--rate-limit-window-ms`, `--rate-limit-max`, `--crowdsec-cache-ttl`,
|
|
171
|
+
`--authz-per-branch-cache-ttl` or `--authz-dynamic-cache-ttl` used to be
|
|
172
|
+
replaced by the default and is now refused. A zero `--auth-totp-step` or
|
|
173
|
+
`--auth-hmac-window` was accepted and broke the plugin — every counter was
|
|
174
|
+
`Infinity`, every signature not made in the same millisecond was refused — and
|
|
175
|
+
is now refused at startup. A zero `--ldap-organization-max-subnodes`,
|
|
176
|
+
`--ldap-raw-max-results`, `--ppolicy-warn-days`, `--ppolicy-min-length` or
|
|
177
|
+
`--bcl-retention` used to be replaced by the default and is now refused.
|
|
178
|
+
|
|
179
|
+
`ConfigParser` keeps an empty string for a string option. A plugin reads the
|
|
180
|
+
declared default instead when that default is not empty, as its `|| default`
|
|
181
|
+
used to: `DM_COZY_ADMIN_USER=` gives `admin`, `DM_CLOUDERY_OFFER=` gives
|
|
182
|
+
`b2b_twake_default`. An option whose empty value means something says so in
|
|
183
|
+
its declaration (`--cozy-apps`, `--cozy-user-deleted-routing-key`,
|
|
184
|
+
`--twake-instance-cozy-apps`, `--twake-instance-cozy-context`,
|
|
185
|
+
`--twake-instance-cloudery-offer`) and keeps it; an option whose default is
|
|
186
|
+
empty keeps the empty string.
|
|
187
|
+
|
|
188
|
+
### The group member check option
|
|
189
|
+
|
|
190
|
+
**Who is affected:** a deployment passing `--group-allow-unexistent-members`.
|
|
191
|
+
|
|
192
|
+
That spelling was stored under a key the groups plugin never read, so it never
|
|
193
|
+
disabled member validation. The option is now `--groups-allow-unexistent-members`
|
|
194
|
+
and `DM_ALLOW_UNEXISTENT_MEMBERS`, which the plugin reads; the old spelling is
|
|
195
|
+
gone.
|
|
196
|
+
|
|
197
|
+
### A config key a plugin did not declare
|
|
198
|
+
|
|
199
|
+
**Who is affected:** a plugin built outside this repository reading an option
|
|
200
|
+
through `this.config.<name>` without declaring it.
|
|
201
|
+
|
|
202
|
+
`Config` no longer has an index signature, so such a read does not compile.
|
|
203
|
+
Declare the option with `defineOptions` and read it through `this.options()`
|
|
204
|
+
(see [plugin options](../plugin-development/options.md)); the declaration also
|
|
205
|
+
makes the option known to the startup report and its `env` variable read.
|
|
206
|
+
|
|
207
|
+
### Node 22 or later is required
|
|
208
|
+
|
|
209
|
+
**Who is affected:** a deployment running on Node 20 (end of life
|
|
210
|
+
2026-04-30). A deployment of the published image is not: it is built on Node 24.
|
|
211
|
+
|
|
212
|
+
`engines` declares `>=22`, and the CI runs the suite on 22, 24 and 26. Node
|
|
213
|
+
20 is neither tested nor supported.
|
|
214
|
+
|
|
215
|
+
### Values past 4096 characters, and an address with a trailing or empty label
|
|
216
|
+
|
|
217
|
+
**Who is affected:** a deployment whose schemas accept a value longer than
|
|
218
|
+
4096 characters, or an address such as `a@b.c.` or `a@b..c` in an attribute
|
|
219
|
+
whose pattern came with the shipped schemas.
|
|
220
|
+
|
|
221
|
+
A schema `test` pattern is no longer run on a value longer than 4096
|
|
222
|
+
characters; the value is answered 400, naming the length, before the pattern
|
|
223
|
+
sees it, so that a pattern cannot be made to walk several kilobytes. This
|
|
224
|
+
holds for every attribute in every schema which carries a pattern, a
|
|
225
|
+
deployment's own included, and none of the shipped schemas declares a longer
|
|
226
|
+
limit. An attribute holding longer values declares its own `maxLength`, a
|
|
227
|
+
whole number of characters, or the server refuses to load the schema:
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"sshPublicKey": {
|
|
232
|
+
"type": "array",
|
|
233
|
+
"items": { "type": "string", "maxLength": 16384, "test": "^[^\\r\\n]*$" }
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
The address patterns shipped with the schemas no longer accept a trailing dot
|
|
239
|
+
or an empty label: `a@b.c.`, `a@b..c` and `a@.b.c` are refused. Entries already holding
|
|
240
|
+
such a value stay as they are; the value is refused the next time that
|
|
241
|
+
attribute is written. A deployment that copied one of these patterns keeps
|
|
242
|
+
its own copy, unbounded only if it declares no `maxLength`; the patterns to
|
|
243
|
+
use are in the
|
|
244
|
+
[schema reference](../../docs/client-development/schemas/README.md#test-optional).
|
|
245
|
+
|
|
246
|
+
### A `null` under a name the schema does not declare
|
|
247
|
+
|
|
248
|
+
**Who is affected:** a client sending `null` to an entity whose schema does
|
|
249
|
+
not declare the attribute, or to an entity without a schema — the
|
|
250
|
+
`dhcpHosts` and `dnsRecords` schemas shipped with `"strict": false` among
|
|
251
|
+
them.
|
|
252
|
+
|
|
253
|
+
Such a write answered 500, with nothing written. It now succeeds: the key is
|
|
254
|
+
left out of a creation or an `add`, and clears the attribute in a `replace`.
|
|
255
|
+
No action is required. A strict schema still answers 400 for such a name, and
|
|
256
|
+
the value is written as if the key were left out, so a client relying on the
|
|
257
|
+
500 to notice a misspelt attribute no longer hears about it — see
|
|
258
|
+
[what a value must look like](../client-development/schemas/README.md#what-a-value-must-look-like).
|
|
259
|
+
|
|
7
260
|
## From 1.2.0 to 1.2.1
|
|
8
261
|
|
|
9
262
|
### `{org}` once in a Twake branch pattern
|