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
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -22,42 +22,7 @@ export declare function getCompiledRegex(pattern: string, flags?: string): RegEx
|
|
|
22
22
|
* @returns The escaped string safe for use in RegExp
|
|
23
23
|
*/
|
|
24
24
|
export declare function escapeRegex(str: string): string;
|
|
25
|
-
|
|
26
|
-
* Run a hook under its plugin's name and its own, for the lines it logs:
|
|
27
|
-
* what `launchHooks` does, for a caller walking the hooks itself.
|
|
28
|
-
*
|
|
29
|
-
* @param hook the registered function
|
|
30
|
-
* @param fn its run
|
|
31
|
-
* @returns what `fn` returns
|
|
32
|
-
*/
|
|
33
|
-
export declare const runAsHookOwner: <T>(hook: Function, fn: () => T) => T;
|
|
34
|
-
export declare const launchHooks: (hooks: Function[] | undefined, ...args: unknown[]) => Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Record the plugin a hook function belongs to.
|
|
37
|
-
*
|
|
38
|
-
* @param fn the registered function
|
|
39
|
-
* @param plugin the plugin's instance name
|
|
40
|
-
* @param hook the hook it is registered under
|
|
41
|
-
*/
|
|
42
|
-
export declare const recordHookOwner: (fn: Function, plugin: string, hook: string) => void;
|
|
43
|
-
/**
|
|
44
|
-
* The plugin a hook function belongs to, and the hook it is registered
|
|
45
|
-
* under, when `registerPlugin` registered it.
|
|
46
|
-
*
|
|
47
|
-
* @param fn a hook function
|
|
48
|
-
* @returns its plugin's instance name and hook name, or undefined
|
|
49
|
-
*/
|
|
50
|
-
export declare const hookOwner: (fn: Function) => {
|
|
51
|
-
plugin: string;
|
|
52
|
-
hook: string;
|
|
53
|
-
} | undefined;
|
|
54
|
-
/**
|
|
55
|
-
* Whether an error is an authorization plugin's refusal, by the marker its
|
|
56
|
-
* message carries: a plain `Error` wrapping it keeps the message only. Its
|
|
57
|
-
* message names the branch, so the client is told `AUTHZ_REFUSED` instead.
|
|
58
|
-
*/
|
|
59
|
-
export declare const isAuthzRefusal: (err: unknown) => boolean;
|
|
60
|
-
export declare const launchHooksChained: <T>(hooks: Function[] | undefined, args: T) => Promise<T>;
|
|
25
|
+
export { hookOwner, recordHookOwner, runAsHookOwner } from './hookBus';
|
|
61
26
|
export declare const transformSchemas: (schemas: string | Buffer, config: Config) => string;
|
|
62
27
|
/**
|
|
63
28
|
* Escape special characters in LDAP filter values according to RFC 4515
|
|
@@ -237,6 +202,36 @@ export declare function getRdn(dn: string): string;
|
|
|
237
202
|
* ```
|
|
238
203
|
*/
|
|
239
204
|
export declare function rdnValue(dn: string): string;
|
|
205
|
+
/**
|
|
206
|
+
* Read the name of an entry written as a DN: the value of its first RDN when
|
|
207
|
+
* that RDN asserts `attribute` alone, under `base` when one is given.
|
|
208
|
+
*
|
|
209
|
+
* The value is decoded exactly as {@link rdnValue} decodes it: it is the
|
|
210
|
+
* naming attribute's value, the one a write puts back in
|
|
211
|
+
* `attribute=…,base`.
|
|
212
|
+
*
|
|
213
|
+
* @param dn - The DN to read
|
|
214
|
+
* @param attribute - The attribute the first RDN must assert
|
|
215
|
+
* @param base - The branch the entry belongs to, when the DN names it whole
|
|
216
|
+
* @returns The name, or `null` when the RDN asserts another attribute, names
|
|
217
|
+
* another branch, or is no DN
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* assertedRdnValue('uid=Smith\\,John,ou=users,dc=example,dc=com', 'uid')
|
|
222
|
+
* // => 'Smith,John'
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
export declare function assertedRdnValue(dn: string, attribute: string, base?: string): string | null;
|
|
226
|
+
/**
|
|
227
|
+
* Whether `attribute=` starts `id`: the caller sent a DN rather than a bare
|
|
228
|
+
* naming value.
|
|
229
|
+
*
|
|
230
|
+
* Deciding this before `assertedRdnValue` matters: a string it refuses — a
|
|
231
|
+
* multi-valued RDN, another branch — is still a DN, and read as a bare value
|
|
232
|
+
* it would be written whole.
|
|
233
|
+
*/
|
|
234
|
+
export declare function namesByDn(id: string, attribute: string): boolean;
|
|
240
235
|
/**
|
|
241
236
|
* Check if a DN is a child of another DN
|
|
242
237
|
*
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The version of this package, read from the `package.json` that ships with
|
|
3
|
+
* it: the repository root when run from the sources, the installed package
|
|
4
|
+
* when run from the bundle. A build that moved the file elsewhere leaves it
|
|
5
|
+
* unknown rather than guessing.
|
|
6
|
+
*
|
|
7
|
+
* `start` is the directory the walk begins from; it defaults to this
|
|
8
|
+
* module's own and exists so the walk can be exercised on a fixture.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readVersion(start?: string): string | undefined;
|
|
11
|
+
/** The server's version, as its package declares it */
|
|
12
|
+
export declare const SERVER_VERSION: string | undefined;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication and authorization plugin options, see
|
|
3
|
+
* `docs/plugin-development/options.md`.
|
|
4
|
+
*/
|
|
5
|
+
import type { AuthConfig, Config } from '../../config/args';
|
|
6
|
+
import { type OptionsOf } from '../../config/options';
|
|
7
|
+
export declare const tokenOptions: {
|
|
8
|
+
auth_token: import("../../config/options").ArrayOption;
|
|
9
|
+
};
|
|
10
|
+
export type TokenOptions = OptionsOf<typeof tokenOptions>;
|
|
11
|
+
export declare const fakeOptions: {
|
|
12
|
+
auth_fake_user: import("../../config/options").StringOption;
|
|
13
|
+
};
|
|
14
|
+
export type FakeOptions = OptionsOf<typeof fakeOptions>;
|
|
15
|
+
export declare const totpOptions: {
|
|
16
|
+
auth_totp: import("../../config/options").ArrayOption;
|
|
17
|
+
auth_totp_window: import("../../config/options").NumberOption;
|
|
18
|
+
auth_totp_step: import("../../config/options").NumberOption;
|
|
19
|
+
};
|
|
20
|
+
export type TotpOptions = OptionsOf<typeof totpOptions>;
|
|
21
|
+
export declare const hmacOptions: {
|
|
22
|
+
auth_hmac: import("../../config/options").ArrayOption;
|
|
23
|
+
auth_hmac_window: import("../../config/options").NumberOption;
|
|
24
|
+
};
|
|
25
|
+
export type HmacOptions = OptionsOf<typeof hmacOptions>;
|
|
26
|
+
export declare const llngOptions: {
|
|
27
|
+
llng_ini: import("../../config/options").StringOption;
|
|
28
|
+
llng_username_header: import("../../config/options").StringOption;
|
|
29
|
+
};
|
|
30
|
+
export type LlngOptions = OptionsOf<typeof llngOptions>;
|
|
31
|
+
export declare const perRouteOptions: {
|
|
32
|
+
authz_per_route: import("../../config/options").ArrayOption;
|
|
33
|
+
};
|
|
34
|
+
export type PerRouteOptions = OptionsOf<typeof perRouteOptions>;
|
|
35
|
+
export declare const perBranchOptions: {
|
|
36
|
+
authz_per_branch_config: import("../../config/options").JsonOption<AuthConfig>;
|
|
37
|
+
authz_per_branch_cache_ttl: import("../../config/options").NumberOption;
|
|
38
|
+
ldap_group_member_attribute: import("../../config/options").StringOption;
|
|
39
|
+
};
|
|
40
|
+
export type PerBranchOptions = OptionsOf<typeof perBranchOptions>;
|
|
41
|
+
export declare const dynamicOptions: {
|
|
42
|
+
authz_dynamic_bypass: import("../../config/options").ArrayOption;
|
|
43
|
+
authz_dynamic_base: import("../../config/options").StringOption;
|
|
44
|
+
authz_dynamic_cache_ttl: import("../../config/options").NumberOption;
|
|
45
|
+
authz_dynamic_token_attribute: import("../../config/options").StringOption;
|
|
46
|
+
authz_dynamic_config_attribute: import("../../config/options").StringOption;
|
|
47
|
+
authz_dynamic_tenant_attribute: import("../../config/options").StringOption;
|
|
48
|
+
authz_dynamic_reload_endpoint: import("../../config/options").BooleanOption;
|
|
49
|
+
};
|
|
50
|
+
export type DynamicOptions = OptionsOf<typeof dynamicOptions>;
|
|
51
|
+
export declare const linid1Options: {
|
|
52
|
+
authz_local_admin_attribute: import("../../config/options").StringOption;
|
|
53
|
+
authz_global_branch: import("../../config/options").ArrayOption;
|
|
54
|
+
authz_global_write_branch: import("../../config/options").ArrayOption;
|
|
55
|
+
authz_global_organization: import("../../config/options").StringOption;
|
|
56
|
+
};
|
|
57
|
+
export type Linid1Options = OptionsOf<typeof linid1Options>;
|
|
58
|
+
export declare const openidconnectOptions: {
|
|
59
|
+
oidc_server: import("../../config/options").StringOption;
|
|
60
|
+
oidc_username_claim: import("../../config/options").StringOption;
|
|
61
|
+
oidc_client_id: import("../../config/options").StringOption;
|
|
62
|
+
oidc_client_secret: import("../../config/options").StringOption;
|
|
63
|
+
base_url: import("../../config/options").StringOption;
|
|
64
|
+
};
|
|
65
|
+
export type OpenidconnectOptions = OptionsOf<typeof openidconnectOptions>;
|
|
66
|
+
export declare const rateLimitOptions: {
|
|
67
|
+
rate_limit_window_ms: import("../../config/options").NumberOption;
|
|
68
|
+
rate_limit_max: import("../../config/options").NumberOption;
|
|
69
|
+
};
|
|
70
|
+
export type RateLimitOptions = OptionsOf<typeof rateLimitOptions>;
|
|
71
|
+
export declare const crowdsecOptions: {
|
|
72
|
+
crowdsec_url: import("../../config/options").StringOption;
|
|
73
|
+
crowdsec_api_key: import("../../config/options").StringOption;
|
|
74
|
+
crowdsec_cache_ttl: import("../../config/options").NumberOption;
|
|
75
|
+
};
|
|
76
|
+
export type CrowdsecOptions = OptionsOf<typeof crowdsecOptions>;
|
|
77
|
+
export declare const trustedProxyOptions: {
|
|
78
|
+
trusted_proxy: import("../../config/options").ArrayOption;
|
|
79
|
+
trusted_proxy_auth_header: import("../../config/options").StringOption;
|
|
80
|
+
};
|
|
81
|
+
export type TrustedProxyOptions = OptionsOf<typeof trustedProxyOptions>;
|
|
82
|
+
/** The checked values for a caller that holds a Config instead of the plugin */
|
|
83
|
+
export declare function totpOptionsOf(config: Config): TotpOptions;
|
|
84
|
+
export declare function hmacOptionsOf(config: Config): HmacOptions;
|
|
85
|
+
export declare function perBranchOptionsOf(config: Config): PerBranchOptions;
|
|
86
|
+
export declare function dynamicOptionsOf(config: Config): DynamicOptions;
|
|
87
|
+
export declare function rateLimitOptionsOf(config: Config): RateLimitOptions;
|
|
88
|
+
export declare function crowdsecOptionsOf(config: Config): CrowdsecOptions;
|
|
@@ -51,6 +51,15 @@ export interface AuthzDynamicRequest extends DmRequest {
|
|
|
51
51
|
authzToken?: TokenEntry;
|
|
52
52
|
}
|
|
53
53
|
export default class AuthzDynamic extends AuthBase {
|
|
54
|
+
static optionDefinitions: {
|
|
55
|
+
authz_dynamic_bypass: import("../../config/options").ArrayOption;
|
|
56
|
+
authz_dynamic_base: import("../../config/options").StringOption;
|
|
57
|
+
authz_dynamic_cache_ttl: import("../../config/options").NumberOption;
|
|
58
|
+
authz_dynamic_token_attribute: import("../../config/options").StringOption;
|
|
59
|
+
authz_dynamic_config_attribute: import("../../config/options").StringOption;
|
|
60
|
+
authz_dynamic_tenant_attribute: import("../../config/options").StringOption;
|
|
61
|
+
authz_dynamic_reload_endpoint: import("../../config/options").BooleanOption;
|
|
62
|
+
};
|
|
54
63
|
name: string;
|
|
55
64
|
roles: Role[];
|
|
56
65
|
private tokens;
|
|
@@ -171,7 +180,7 @@ export default class AuthzDynamic extends AuthBase {
|
|
|
171
180
|
*/
|
|
172
181
|
private activeToken;
|
|
173
182
|
/**
|
|
174
|
-
* Throw
|
|
183
|
+
* Throw an AuthzRefusedError (403) if the token cannot perform `permission` on
|
|
175
184
|
* the branch containing `branchOrDn`. Any ACL entry that is `branchOrDn`
|
|
176
185
|
* itself or a parent of it (sub-branch match) qualifies.
|
|
177
186
|
*
|
|
@@ -14,6 +14,12 @@ interface CachedPermissions {
|
|
|
14
14
|
timestamp: number;
|
|
15
15
|
}
|
|
16
16
|
export default class AuthzLinid1 extends AuthzBase {
|
|
17
|
+
static optionDefinitions: {
|
|
18
|
+
authz_local_admin_attribute: import("../../config/options").StringOption;
|
|
19
|
+
authz_global_branch: import("../../config/options").ArrayOption;
|
|
20
|
+
authz_global_write_branch: import("../../config/options").ArrayOption;
|
|
21
|
+
authz_global_organization: import("../../config/options").StringOption;
|
|
22
|
+
};
|
|
17
23
|
name: string;
|
|
18
24
|
permissionsCache: Map<string, CachedPermissions>;
|
|
19
25
|
constructor(server: DM);
|
|
@@ -16,6 +16,11 @@ interface CachedGroups {
|
|
|
16
16
|
timestamp: number;
|
|
17
17
|
}
|
|
18
18
|
export default class AuthzPerBranch extends AuthzBase {
|
|
19
|
+
static optionDefinitions: {
|
|
20
|
+
authz_per_branch_config: import("../../config/options").JsonOption<AuthConfig>;
|
|
21
|
+
authz_per_branch_cache_ttl: import("../../config/options").NumberOption;
|
|
22
|
+
ldap_group_member_attribute: import("../../config/options").StringOption;
|
|
23
|
+
};
|
|
19
24
|
name: string;
|
|
20
25
|
authConfig?: AuthConfig;
|
|
21
26
|
groupCache: Map<string, CachedGroups>;
|
|
@@ -30,7 +35,11 @@ export default class AuthzPerBranch extends AuthzBase {
|
|
|
30
35
|
/** `authConfig.groups` keyed by normalized DN, and the object it was built from. */
|
|
31
36
|
private groupRulesIndex?;
|
|
32
37
|
hooks: AuthzBase['hooks'] & Pick<Hooks, 'ldapadddone' | 'ldapmodifydone' | 'ldapdeletedone'>;
|
|
38
|
+
/** What the classes above declared, read once this one is constructed */
|
|
39
|
+
private readonly declaredByBase;
|
|
33
40
|
constructor(server: DM);
|
|
41
|
+
/** The attribute a group lists its members in */
|
|
42
|
+
private get memberAttribute();
|
|
34
43
|
/**
|
|
35
44
|
* Whether a modify can change which groups a uid belongs to: it touches
|
|
36
45
|
* the member attribute, or the attribute a uid is resolved by.
|
|
@@ -11,6 +11,9 @@ import type { Express } from 'express';
|
|
|
11
11
|
import DmPlugin, { type Role } from '../../abstract/plugin';
|
|
12
12
|
export declare function globToRegex(glob: string): RegExp;
|
|
13
13
|
export default class AuthzPerRoute extends DmPlugin {
|
|
14
|
+
static optionDefinitions: {
|
|
15
|
+
authz_per_route: import("../../config/options").ArrayOption;
|
|
16
|
+
};
|
|
14
17
|
name: string;
|
|
15
18
|
roles: Role[];
|
|
16
19
|
private rules;
|
|
@@ -1,19 +1,28 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module plugins/auth/authzScope
|
|
3
|
-
* @author Xavier Guimard <xguimard@linagora.com>
|
|
4
|
-
*
|
|
5
|
-
* Tells a client what the signed-in administrator may actually do, before it
|
|
6
|
-
* offers them a button that will fail.
|
|
7
|
-
*
|
|
8
|
-
* In a local-administration model the scope *is* the interface: a manager
|
|
9
|
-
* administers a few branches of the tree and nothing else, and an application
|
|
10
|
-
* that cannot name those branches leaves them guessing. This endpoint answers
|
|
11
|
-
* both halves — which branches, and which entities can be created in them —
|
|
12
|
-
* by asking the authorization plugin in force, whichever one that is.
|
|
13
|
-
* @group Plugins
|
|
14
|
-
*/
|
|
15
1
|
import type { Express } from 'express';
|
|
16
2
|
import DmPlugin, { type Role } from '../../abstract/plugin';
|
|
3
|
+
export declare const ScopeResponse: import("@sinclair/typebox").TObject<{
|
|
4
|
+
user: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
5
|
+
unrestricted: import("@sinclair/typebox").TBoolean;
|
|
6
|
+
described: import("@sinclair/typebox").TBoolean;
|
|
7
|
+
source: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>;
|
|
8
|
+
sources: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
9
|
+
branches: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
10
|
+
dn: import("@sinclair/typebox").TString;
|
|
11
|
+
read: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
12
|
+
write: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
13
|
+
delete: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
14
|
+
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
|
+
path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
16
|
+
}>>;
|
|
17
|
+
transit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
|
|
18
|
+
linksAnyDomain: import("@sinclair/typebox").TBoolean;
|
|
19
|
+
passwordPolicies: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
20
|
+
entities: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
21
|
+
name: import("@sinclair/typebox").TString;
|
|
22
|
+
base: import("@sinclair/typebox").TString;
|
|
23
|
+
create: import("@sinclair/typebox").TBoolean;
|
|
24
|
+
}>>;
|
|
25
|
+
}>;
|
|
17
26
|
export default class AuthzScope extends DmPlugin {
|
|
18
27
|
name: string;
|
|
19
28
|
roles: Role[];
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
import type { Express } from 'express';
|
|
17
17
|
import DmPlugin, { Role } from '../../abstract/plugin';
|
|
18
18
|
export default class CrowdSec extends DmPlugin {
|
|
19
|
+
static optionDefinitions: {
|
|
20
|
+
crowdsec_url: import("../../config/options").StringOption;
|
|
21
|
+
crowdsec_api_key: import("../../config/options").StringOption;
|
|
22
|
+
crowdsec_cache_ttl: import("../../config/options").NumberOption;
|
|
23
|
+
};
|
|
19
24
|
name: string;
|
|
20
25
|
roles: Role[];
|
|
21
26
|
private apiUrl;
|
|
@@ -10,6 +10,9 @@ import type { Response } from 'express';
|
|
|
10
10
|
import AuthBase, { type DmRequest } from '../../lib/auth/base';
|
|
11
11
|
import type { Role } from '../../abstract/plugin';
|
|
12
12
|
export default class AuthFake extends AuthBase {
|
|
13
|
+
static optionDefinitions: {
|
|
14
|
+
auth_fake_user: import("../../config/options").StringOption;
|
|
15
|
+
};
|
|
13
16
|
name: string;
|
|
14
17
|
roles: Role[];
|
|
15
18
|
private readonly user;
|
|
@@ -2,6 +2,10 @@ import type { Response } from 'express';
|
|
|
2
2
|
import AuthBase, { type DmRequest } from '../../lib/auth/base';
|
|
3
3
|
import type { Role } from '../../abstract/plugin';
|
|
4
4
|
export default class AuthHmac extends AuthBase {
|
|
5
|
+
static optionDefinitions: {
|
|
6
|
+
auth_hmac: import("../../config/options").ArrayOption;
|
|
7
|
+
auth_hmac_window: import("../../config/options").NumberOption;
|
|
8
|
+
};
|
|
5
9
|
protected knownIdentities(): string[];
|
|
6
10
|
protected identitySource(): string;
|
|
7
11
|
name: string;
|
|
@@ -11,6 +11,10 @@ import AuthBase, { DmRequest } from '../../lib/auth/base';
|
|
|
11
11
|
import type { Role } from '../../abstract/plugin';
|
|
12
12
|
type LlngHandler = typeof import('lemonldap-ng-handler');
|
|
13
13
|
export default class AuthLLNG extends AuthBase {
|
|
14
|
+
static optionDefinitions: {
|
|
15
|
+
llng_ini: import("../../config/options").StringOption;
|
|
16
|
+
llng_username_header: import("../../config/options").StringOption;
|
|
17
|
+
};
|
|
14
18
|
name: string;
|
|
15
19
|
roles: Role[];
|
|
16
20
|
private handler?;
|
|
@@ -4,6 +4,13 @@ import AuthBase, { DmRequest } from '../../lib/auth/base';
|
|
|
4
4
|
import { type Role } from '../../abstract/plugin';
|
|
5
5
|
import { DM } from '../../bin';
|
|
6
6
|
export default class OpenIDConnect extends AuthBase {
|
|
7
|
+
static optionDefinitions: {
|
|
8
|
+
oidc_server: import("../../config/options").StringOption;
|
|
9
|
+
oidc_username_claim: import("../../config/options").StringOption;
|
|
10
|
+
oidc_client_id: import("../../config/options").StringOption;
|
|
11
|
+
oidc_client_secret: import("../../config/options").StringOption;
|
|
12
|
+
base_url: import("../../config/options").StringOption;
|
|
13
|
+
};
|
|
7
14
|
name: string;
|
|
8
15
|
configApiKey: string;
|
|
9
16
|
roles: Role[];
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
import type { Express } from 'express';
|
|
16
16
|
import DmPlugin, { type Role } from '../../abstract/plugin';
|
|
17
17
|
export default class RateLimit extends DmPlugin {
|
|
18
|
+
static optionDefinitions: {
|
|
19
|
+
rate_limit_window_ms: import("../../config/options").NumberOption;
|
|
20
|
+
rate_limit_max: import("../../config/options").NumberOption;
|
|
21
|
+
};
|
|
18
22
|
name: string;
|
|
19
23
|
roles: Role[];
|
|
20
24
|
private store;
|
|
@@ -9,6 +9,9 @@ import type { Response } from 'express';
|
|
|
9
9
|
import AuthBase, { type DmRequest } from '../../lib/auth/base';
|
|
10
10
|
import type { Role } from '../../abstract/plugin';
|
|
11
11
|
export default class AuthToken extends AuthBase {
|
|
12
|
+
static optionDefinitions: {
|
|
13
|
+
auth_token: import("../../config/options").ArrayOption;
|
|
14
|
+
};
|
|
12
15
|
protected knownIdentities(): string[];
|
|
13
16
|
protected identitySource(): string;
|
|
14
17
|
name: string;
|
|
@@ -2,6 +2,11 @@ import type { Response } from 'express';
|
|
|
2
2
|
import AuthBase, { type DmRequest } from '../../lib/auth/base';
|
|
3
3
|
import type { Role } from '../../abstract/plugin';
|
|
4
4
|
export default class AuthTotp extends AuthBase {
|
|
5
|
+
static optionDefinitions: {
|
|
6
|
+
auth_totp: import("../../config/options").ArrayOption;
|
|
7
|
+
auth_totp_window: import("../../config/options").NumberOption;
|
|
8
|
+
auth_totp_step: import("../../config/options").NumberOption;
|
|
9
|
+
};
|
|
5
10
|
protected knownIdentities(): string[];
|
|
6
11
|
protected identitySource(): string;
|
|
7
12
|
name: string;
|
|
@@ -34,6 +34,10 @@ declare global {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
export default class TrustedProxy extends DmPlugin {
|
|
37
|
+
static optionDefinitions: {
|
|
38
|
+
trusted_proxy: import("../../config/options").ArrayOption;
|
|
39
|
+
trusted_proxy_auth_header: import("../../config/options").StringOption;
|
|
40
|
+
};
|
|
37
41
|
name: string;
|
|
38
42
|
roles: Role[];
|
|
39
43
|
private trustedNetworks;
|
|
@@ -20,6 +20,9 @@ import DmPlugin from '../abstract/plugin';
|
|
|
20
20
|
import type { DM } from '../bin';
|
|
21
21
|
import type { OidcLogoutToken, OidcSessionClaims } from '../hooks';
|
|
22
22
|
export default class Bcl extends DmPlugin {
|
|
23
|
+
static optionDefinitions: {
|
|
24
|
+
bcl_retention: import("../config/options").NumberOption;
|
|
25
|
+
};
|
|
23
26
|
name: string;
|
|
24
27
|
dependencies: {
|
|
25
28
|
storage: string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Back-Channel Logout plugin options. */
|
|
2
|
+
import type { Config } from '../config/args';
|
|
3
|
+
import { type OptionsOf } from '../config/options';
|
|
4
|
+
export declare const bclOptions: {
|
|
5
|
+
bcl_retention: import("../config/options").NumberOption;
|
|
6
|
+
};
|
|
7
|
+
export type BclOptions = OptionsOf<typeof bclOptions>;
|
|
8
|
+
export declare function bclOptionsOf(config: Config): BclOptions;
|
|
@@ -10,16 +10,26 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { Express } from 'express';
|
|
12
12
|
import DmPlugin, { type Role } from '../abstract/plugin';
|
|
13
|
+
interface ConfigApiResponse {
|
|
14
|
+
apiPrefix: string;
|
|
15
|
+
ldapBase: string;
|
|
16
|
+
features: Record<string, unknown>;
|
|
17
|
+
/** Absent when the version could not be read at start-up */
|
|
18
|
+
version?: string;
|
|
19
|
+
}
|
|
20
|
+
/** The body of `GET /v1/config`, `version` left out when it is unknown. */
|
|
21
|
+
export declare function configApiResponse(apiPrefix: string, ldapBase: string, features: Record<string, unknown>, version: string | undefined): ConfigApiResponse;
|
|
13
22
|
/**
|
|
14
23
|
* @openapi-component
|
|
15
24
|
* Config:
|
|
16
25
|
* type: object
|
|
17
26
|
* description: |
|
|
18
|
-
* Aggregated server configuration.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
27
|
+
* Aggregated server configuration. `apiPrefix`, `ldapBase` and
|
|
28
|
+
* `features` are always present; `version` is present unless the server
|
|
29
|
+
* could not read it at start-up; `features` is a dynamic map whose keys
|
|
30
|
+
* are the names of loaded plugins that declare the `configurable` role.
|
|
31
|
+
* Each plugin contributes an arbitrary sub-object — consult the
|
|
32
|
+
* individual plugin documentation for its exact shape.
|
|
23
33
|
* additionalProperties: true
|
|
24
34
|
* properties:
|
|
25
35
|
* apiPrefix:
|
|
@@ -30,6 +40,13 @@ import DmPlugin, { type Role } from '../abstract/plugin';
|
|
|
30
40
|
* type: string
|
|
31
41
|
* description: The root LDAP suffix used by this server.
|
|
32
42
|
* example: dc=example,dc=com
|
|
43
|
+
* version:
|
|
44
|
+
* type: string
|
|
45
|
+
* description: |
|
|
46
|
+
* The server's version, as its package declares it. A client reads it
|
|
47
|
+
* to tell an administrator the server is older than it supports; a
|
|
48
|
+
* server that cannot tell its version leaves the field out.
|
|
49
|
+
* example: 1.2.1
|
|
33
50
|
* features:
|
|
34
51
|
* type: object
|
|
35
52
|
* description: |
|
|
@@ -52,6 +69,7 @@ import DmPlugin, { type Role } from '../abstract/plugin';
|
|
|
52
69
|
* example:
|
|
53
70
|
* apiPrefix: /api
|
|
54
71
|
* ldapBase: dc=example,dc=com
|
|
72
|
+
* version: 1.2.1
|
|
55
73
|
* features:
|
|
56
74
|
* ldapGroups:
|
|
57
75
|
* enabled: true
|
|
@@ -73,3 +91,4 @@ export default class ConfigApi extends DmPlugin {
|
|
|
73
91
|
*/
|
|
74
92
|
private collectPluginConfigs;
|
|
75
93
|
}
|
|
94
|
+
export {};
|
|
@@ -6,26 +6,15 @@
|
|
|
6
6
|
import type { Express } from 'express';
|
|
7
7
|
import DmPlugin, { type Role } from '../../abstract/plugin';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* properties:
|
|
14
|
-
* message:
|
|
15
|
-
* type: string
|
|
16
|
-
* description: Static greeting string.
|
|
17
|
-
* example: Hello
|
|
18
|
-
* hookResults:
|
|
19
|
-
* type: array
|
|
20
|
-
* description: |
|
|
21
|
-
* Results collected from every function registered on the `hello`
|
|
22
|
-
* hook. Empty when no hook listeners are installed.
|
|
23
|
-
* items: {}
|
|
24
|
-
* example: []
|
|
25
|
-
* example:
|
|
26
|
-
* message: Hello
|
|
27
|
-
* hookResults: []
|
|
9
|
+
* The answer of the hello-world endpoint.
|
|
10
|
+
*
|
|
11
|
+
* Exported because the OpenAPI generator reads it without running the
|
|
12
|
+
* plugin, as it reads every schema a route declares.
|
|
28
13
|
*/
|
|
14
|
+
export declare const HelloResponse: import("@sinclair/typebox").TObject<{
|
|
15
|
+
message: import("@sinclair/typebox").TString;
|
|
16
|
+
hookResults: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnknown>;
|
|
17
|
+
}>;
|
|
29
18
|
export default class HelloWorld extends DmPlugin {
|
|
30
19
|
name: string;
|
|
31
20
|
roles: Role[];
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import type { Express } from 'express';
|
|
2
2
|
import DmPlugin, { type Role } from '../../abstract/plugin';
|
|
3
|
+
export declare const StatusBody: import("@sinclair/typebox").TObject<{
|
|
4
|
+
state: import("@sinclair/typebox").TString;
|
|
5
|
+
}>;
|
|
6
|
+
export declare const PasswordBody: import("@sinclair/typebox").TObject<{
|
|
7
|
+
password: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
8
|
+
forceChange: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const StatusResponse: import("@sinclair/typebox").TObject<{
|
|
11
|
+
success: import("@sinclair/typebox").TBoolean;
|
|
12
|
+
state: import("@sinclair/typebox").TString;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const PasswordResponse: import("@sinclair/typebox").TObject<{
|
|
15
|
+
success: import("@sinclair/typebox").TBoolean;
|
|
16
|
+
generated: import("@sinclair/typebox").TBoolean;
|
|
17
|
+
forceChange: import("@sinclair/typebox").TBoolean;
|
|
18
|
+
password: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
|
+
}>;
|
|
3
20
|
/**
|
|
4
21
|
* Draw a password from {@link PASSWORD_ALPHABET} with a uniform distribution.
|
|
5
22
|
*
|
|
@@ -6,85 +6,15 @@
|
|
|
6
6
|
import type { Express } from 'express';
|
|
7
7
|
import DmPlugin, { type Role } from '../../abstract/plugin';
|
|
8
8
|
import type { DM } from '../../bin';
|
|
9
|
-
/**
|
|
10
|
-
* Shared OpenAPI schemas surfaced by this plugin. Picked up by
|
|
11
|
-
* scripts/generate-openapi.ts and merged into `components.schemas`.
|
|
12
|
-
*
|
|
13
|
-
* @openapi-component
|
|
14
|
-
* BulkImportResult:
|
|
15
|
-
* type: object
|
|
16
|
-
* description: Summary returned after a bulk import operation.
|
|
17
|
-
* required: [success, total, created, updated, skipped, failed, errors, details]
|
|
18
|
-
* properties:
|
|
19
|
-
* success:
|
|
20
|
-
* type: boolean
|
|
21
|
-
* description: True when no fatal error aborted the import early.
|
|
22
|
-
* total:
|
|
23
|
-
* type: integer
|
|
24
|
-
* description: Total number of CSV data rows (excluding header).
|
|
25
|
-
* example: 42
|
|
26
|
-
* created:
|
|
27
|
-
* type: integer
|
|
28
|
-
* description: Entries successfully created (or that would be, in a dry run).
|
|
29
|
-
* example: 38
|
|
30
|
-
* updated:
|
|
31
|
-
* type: integer
|
|
32
|
-
* description: Existing entries updated (or that would be, in a dry run).
|
|
33
|
-
* example: 2
|
|
34
|
-
* skipped:
|
|
35
|
-
* type: integer
|
|
36
|
-
* description: Existing entries skipped because `updateExisting` was false.
|
|
37
|
-
* example: 1
|
|
38
|
-
* failed:
|
|
39
|
-
* type: integer
|
|
40
|
-
* description: Rows that caused an error.
|
|
41
|
-
* example: 1
|
|
42
|
-
* errors:
|
|
43
|
-
* type: array
|
|
44
|
-
* items:
|
|
45
|
-
* type: object
|
|
46
|
-
* required: [line, error]
|
|
47
|
-
* properties:
|
|
48
|
-
* line:
|
|
49
|
-
* type: integer
|
|
50
|
-
* description: 1-based CSV line number (2 = first data row).
|
|
51
|
-
* identifier:
|
|
52
|
-
* type: string
|
|
53
|
-
* description: Value of the main attribute for the failing row (if known).
|
|
54
|
-
* error:
|
|
55
|
-
* type: string
|
|
56
|
-
* description: Error message.
|
|
57
|
-
* code:
|
|
58
|
-
* type: string
|
|
59
|
-
* description: |
|
|
60
|
-
* `unique` or `mailDomain`, with `attribute`, `value` and
|
|
61
|
-
* `domains`, as in the `Error` answer of a single write;
|
|
62
|
-
* `forbidden` when the caller may not write the row.
|
|
63
|
-
* attribute: { type: string }
|
|
64
|
-
* value: { type: string }
|
|
65
|
-
* domains:
|
|
66
|
-
* type: array
|
|
67
|
-
* items: { type: string }
|
|
68
|
-
* example:
|
|
69
|
-
* - line: 5
|
|
70
|
-
* identifier: bob
|
|
71
|
-
* error: 'Missing required attribute: mail'
|
|
72
|
-
* details:
|
|
73
|
-
* type: object
|
|
74
|
-
* required: [duration, linesProcessed]
|
|
75
|
-
* properties:
|
|
76
|
-
* duration:
|
|
77
|
-
* type: string
|
|
78
|
-
* description: Wall-clock time for the import (e.g. `1.2s`).
|
|
79
|
-
* example: 1.2s
|
|
80
|
-
* linesProcessed:
|
|
81
|
-
* type: integer
|
|
82
|
-
* description: Total data rows attempted.
|
|
83
|
-
* example: 42
|
|
84
|
-
*/
|
|
85
9
|
export default class LdapBulkImport extends DmPlugin {
|
|
10
|
+
static optionDefinitions: {
|
|
11
|
+
bulk_import_schemas: import("../../config/options").StringOption;
|
|
12
|
+
bulk_import_max_file_size: import("../../config/options").StringOption;
|
|
13
|
+
bulk_import_batch_size: import("../../config/options").StringOption;
|
|
14
|
+
};
|
|
86
15
|
name: string;
|
|
87
16
|
roles: Role[];
|
|
17
|
+
private readonly settings;
|
|
88
18
|
private resources;
|
|
89
19
|
private upload;
|
|
90
20
|
constructor(parent: DM);
|