ldap-rest 0.0.1
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/LICENSE +661 -0
- package/README.md +48 -0
- package/bin/cleanup-external-users.mjs +219 -0
- package/bin/index.mjs +54 -0
- package/bin/sync-james.mjs +190 -0
- package/dist/abstract/ldapFlat.js +1 -0
- package/dist/abstract/plugin.js +1 -0
- package/dist/abstract/twakePlugin.js +1 -0
- package/dist/bin/index.js +1 -0
- package/dist/config/args.js +1 -0
- package/dist/lib/auth/base.js +1 -0
- package/dist/lib/authz/base.js +1 -0
- package/dist/lib/expressFormatedResponses.js +1 -0
- package/dist/lib/ldapActions.js +1 -0
- package/dist/lib/parseConfig.js +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/logger/winston.js +1 -0
- package/dist/plugins/auth/authzLinid1.js +1 -0
- package/dist/plugins/auth/authzPerBranch.js +1 -0
- package/dist/plugins/auth/crowdsec.js +1 -0
- package/dist/plugins/auth/llng.js +1 -0
- package/dist/plugins/auth/openidconnect.js +1 -0
- package/dist/plugins/auth/rateLimit.js +1 -0
- package/dist/plugins/auth/token.js +1 -0
- package/dist/plugins/configApi.js +1 -0
- package/dist/plugins/demo/helloworld.js +1 -0
- package/dist/plugins/ldap/bulkImport.js +1 -0
- package/dist/plugins/ldap/departmentSync.js +1 -0
- package/dist/plugins/ldap/externalUsersInGroups.js +1 -0
- package/dist/plugins/ldap/flatGeneric.js +1 -0
- package/dist/plugins/ldap/groups.js +1 -0
- package/dist/plugins/ldap/onChange.js +1 -0
- package/dist/plugins/ldap/organization.js +1 -0
- package/dist/plugins/ldap/trash.js +1 -0
- package/dist/plugins/priority.json.js +1 -0
- package/dist/plugins/static.js +1 -0
- package/dist/plugins/twake/calendarResources.js +1 -0
- package/dist/plugins/twake/james.js +1 -0
- package/dist/plugins/weblogs.js +1 -0
- package/dist/src/abstract/ldapFlat.d.ts +94 -0
- package/dist/src/abstract/plugin.d.ts +43 -0
- package/dist/src/abstract/twakePlugin.d.ts +90 -0
- package/dist/src/bin/index.d.ts +43 -0
- package/dist/src/browser/ldap-group-editor/LdapGroupEditor.d.ts +31 -0
- package/dist/src/browser/ldap-group-editor/api/GroupApiClient.d.ts +23 -0
- package/dist/src/browser/ldap-group-editor/components/CreateGroupModal.d.ts +19 -0
- package/dist/src/browser/ldap-group-editor/components/GroupPropertyEditor.d.ts +30 -0
- package/dist/src/browser/ldap-group-editor/components/GroupTree.d.ts +17 -0
- package/dist/src/browser/ldap-group-editor/components/MoveGroupModal.d.ts +20 -0
- package/dist/src/browser/ldap-group-editor/index.d.ts +6 -0
- package/dist/src/browser/ldap-group-editor/types.d.ts +58 -0
- package/dist/src/browser/ldap-resource-editor/api/ResourceApiClient.d.ts +53 -0
- package/dist/src/browser/ldap-resource-editor/cache/CacheManager.d.ts +65 -0
- package/dist/src/browser/ldap-resource-editor/index.d.ts +6 -0
- package/dist/src/browser/ldap-resource-editor/types.d.ts +78 -0
- package/dist/src/browser/ldap-tree-viewer/LdapTreeViewer.d.ts +26 -0
- package/dist/src/browser/ldap-tree-viewer/api/LdapApiClient.d.ts +30 -0
- package/dist/src/browser/ldap-tree-viewer/components/TreeNode.d.ts +17 -0
- package/dist/src/browser/ldap-tree-viewer/components/TreeRoot.d.ts +14 -0
- package/dist/src/browser/ldap-tree-viewer/index.d.ts +7 -0
- package/dist/src/browser/ldap-tree-viewer/store/Store.d.ts +18 -0
- package/dist/src/browser/ldap-tree-viewer/store/actions.d.ts +28 -0
- package/dist/src/browser/ldap-tree-viewer/store/reducers.d.ts +7 -0
- package/dist/src/browser/ldap-tree-viewer/types.d.ts +34 -0
- package/dist/src/browser/ldap-unit-editor/LdapUnitEditor.d.ts +27 -0
- package/dist/src/browser/ldap-unit-editor/api/UnitApiClient.d.ts +24 -0
- package/dist/src/browser/ldap-unit-editor/components/MoveUnitModal.d.ts +28 -0
- package/dist/src/browser/ldap-unit-editor/components/UnitPropertyEditor.d.ts +28 -0
- package/dist/src/browser/ldap-unit-editor/components/UnitTree.d.ts +18 -0
- package/dist/src/browser/ldap-unit-editor/index.d.ts +6 -0
- package/dist/src/browser/ldap-unit-editor/types.d.ts +55 -0
- package/dist/src/browser/ldap-user-editor/LdapUserEditor.d.ts +32 -0
- package/dist/src/browser/ldap-user-editor/api/UserApiClient.d.ts +55 -0
- package/dist/src/browser/ldap-user-editor/cache/CacheManager.d.ts +65 -0
- package/dist/src/browser/ldap-user-editor/components/MoveUserModal.d.ts +28 -0
- package/dist/src/browser/ldap-user-editor/components/PointerField.d.ts +22 -0
- package/dist/src/browser/ldap-user-editor/components/UserEditor.d.ts +46 -0
- package/dist/src/browser/ldap-user-editor/components/UserList.d.ts +24 -0
- package/dist/src/browser/ldap-user-editor/components/UserTree.d.ts +24 -0
- package/dist/src/browser/ldap-user-editor/index.d.ts +7 -0
- package/dist/src/browser/ldap-user-editor/types.d.ts +67 -0
- package/dist/src/browser/shared/components/Modal.d.ts +38 -0
- package/dist/src/browser/shared/components/StatusMessage.d.ts +48 -0
- package/dist/src/browser/shared/index.d.ts +10 -0
- package/dist/src/browser/shared/types/index.d.ts +65 -0
- package/dist/src/browser/shared/utils/dom.d.ts +33 -0
- package/dist/src/browser/shared/utils/form.d.ts +28 -0
- package/dist/src/browser/shared/utils/schema.d.ts +29 -0
- package/dist/src/config/args.d.ts +128 -0
- package/dist/src/config/schema.d.ts +18 -0
- package/dist/src/hooks.d.ts +76 -0
- package/dist/src/lib/auth/base.d.ts +9 -0
- package/dist/src/lib/authz/base.d.ts +63 -0
- package/dist/src/lib/expressFormatedResponses.d.ts +26 -0
- package/dist/src/lib/ldapActions.d.ts +91 -0
- package/dist/src/lib/parseConfig.d.ts +23 -0
- package/dist/src/lib/utils.d.ts +73 -0
- package/dist/src/logger/winston.d.ts +3 -0
- package/dist/src/plugins/auth/authzLinid1.d.ts +46 -0
- package/dist/src/plugins/auth/authzPerBranch.d.ts +59 -0
- package/dist/src/plugins/auth/crowdsec.d.ts +29 -0
- package/dist/src/plugins/auth/llng.d.ts +8 -0
- package/dist/src/plugins/auth/openidconnect.d.ts +11 -0
- package/dist/src/plugins/auth/rateLimit.d.ts +24 -0
- package/dist/src/plugins/auth/token.d.ts +17 -0
- package/dist/src/plugins/configApi.d.ts +24 -0
- package/dist/src/plugins/demo/helloworld.d.ts +12 -0
- package/dist/src/plugins/ldap/bulkImport.d.ts +48 -0
- package/dist/src/plugins/ldap/departmentSync.d.ts +35 -0
- package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +21 -0
- package/dist/src/plugins/ldap/flatGeneric.d.ts +31 -0
- package/dist/src/plugins/ldap/groups.d.ts +95 -0
- package/dist/src/plugins/ldap/onChange.d.ts +32 -0
- package/dist/src/plugins/ldap/organization.d.ts +65 -0
- package/dist/src/plugins/ldap/trash.d.ts +52 -0
- package/dist/src/plugins/static.d.ts +7 -0
- package/dist/src/plugins/twake/calendarResources.d.ts +31 -0
- package/dist/src/plugins/twake/james.d.ts +83 -0
- package/dist/src/plugins/weblogs.d.ts +8 -0
- package/docs/DEVELOPER_GUIDE.md +298 -0
- package/docs/OPENAPI.md +440 -0
- package/docs/PLUGIN_DEPENDENCIES.md +612 -0
- package/docs/README.md +466 -0
- package/docs/api/REFERENCE.md +983 -0
- package/docs/api/REST_API.md +1237 -0
- package/docs/authentication.md +469 -0
- package/docs/authzLinid1.md +521 -0
- package/docs/authzPerBranch.md +596 -0
- package/docs/browser/LIBRARIES.md +1196 -0
- package/docs/examples/EXAMPLES.md +1659 -0
- package/docs/examples/twake-mailbox-type-nomenclature.ldif +37 -0
- package/docs/examples/twake-mailbox-type-schema-amendment.ldif +30 -0
- package/docs/jamesTeamMailboxes.md +343 -0
- package/docs/ldapBulkImport.md +722 -0
- package/docs/ldapExternalUsersInGroups.md +325 -0
- package/docs/ldapFlatGeneric.md +444 -0
- package/docs/ldapGroups.md +589 -0
- package/docs/ldapOrganizations.md +659 -0
- package/docs/ldapTrash.md +260 -0
- package/docs/linagora.png +0 -0
- package/docs/onChange.md +318 -0
- package/docs/plugins/DEVELOPMENT.md +1219 -0
- package/docs/presenterm-fr.md +721 -0
- package/docs/presenterm.md +721 -0
- package/docs/schemas/SCHEMAS.md +1212 -0
- package/docs/static.md +410 -0
- package/docs/twakeCalendarResources.md +148 -0
- package/docs/twakeJames.md +661 -0
- package/docs/weblogs.md +399 -0
- package/examples/web/ldap-group-editor.html +113 -0
- package/examples/web/ldap-tree-viewer.html +368 -0
- package/examples/web/ldap-unit-editor.html +108 -0
- package/examples/web/ldap-user-editor.html +412 -0
- package/package.json +458 -0
- package/static/browser/common-demo.css +450 -0
- package/static/browser/ldap-group-editor/LdapGroupEditor.js +207 -0
- package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -0
- package/static/browser/ldap-group-editor/api/GroupApiClient.js +112 -0
- package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -0
- package/static/browser/ldap-group-editor/components/CreateGroupModal.js +212 -0
- package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -0
- package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +497 -0
- package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -0
- package/static/browser/ldap-group-editor/components/GroupTree.js +153 -0
- package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -0
- package/static/browser/ldap-group-editor/components/MoveGroupModal.js +235 -0
- package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -0
- package/static/browser/ldap-group-editor/index.js +2 -0
- package/static/browser/ldap-group-editor/index.js.map +1 -0
- package/static/browser/ldap-group-editor/types.js +2 -0
- package/static/browser/ldap-group-editor/types.js.map +1 -0
- package/static/browser/ldap-group-editor.esm.js +1399 -0
- package/static/browser/ldap-group-editor.esm.js.map +1 -0
- package/static/browser/ldap-group-editor.js +1407 -0
- package/static/browser/ldap-group-editor.js.map +1 -0
- package/static/browser/ldap-group-editor.min.js +2 -0
- package/static/browser/ldap-group-editor.min.js.map +1 -0
- package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +226 -0
- package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -0
- package/static/browser/ldap-resource-editor/cache/CacheManager.js +123 -0
- package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -0
- package/static/browser/ldap-resource-editor/index.js +2 -0
- package/static/browser/ldap-resource-editor/index.js.map +1 -0
- package/static/browser/ldap-resource-editor/types.js +2 -0
- package/static/browser/ldap-resource-editor/types.js.map +1 -0
- package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +187 -0
- package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -0
- package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +50 -0
- package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -0
- package/static/browser/ldap-tree-viewer/components/TreeNode.js +140 -0
- package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -0
- package/static/browser/ldap-tree-viewer/components/TreeRoot.js +98 -0
- package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -0
- package/static/browser/ldap-tree-viewer/index.js +2 -0
- package/static/browser/ldap-tree-viewer/index.js.map +1 -0
- package/static/browser/ldap-tree-viewer/store/Store.js +29 -0
- package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -0
- package/static/browser/ldap-tree-viewer/store/actions.js +53 -0
- package/static/browser/ldap-tree-viewer/store/actions.js.map +1 -0
- package/static/browser/ldap-tree-viewer/store/reducers.js +79 -0
- package/static/browser/ldap-tree-viewer/store/reducers.js.map +1 -0
- package/static/browser/ldap-tree-viewer/types.js +2 -0
- package/static/browser/ldap-tree-viewer/types.js.map +1 -0
- package/static/browser/ldap-tree-viewer.css +2 -0
- package/static/browser/ldap-tree-viewer.css.map +1 -0
- package/static/browser/ldap-tree-viewer.esm.js +606 -0
- package/static/browser/ldap-tree-viewer.esm.js.map +1 -0
- package/static/browser/ldap-tree-viewer.js +614 -0
- package/static/browser/ldap-tree-viewer.js.map +1 -0
- package/static/browser/ldap-tree-viewer.min.js +2 -0
- package/static/browser/ldap-tree-viewer.min.js.map +1 -0
- package/static/browser/ldap-unit-editor/LdapUnitEditor.js +119 -0
- package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -0
- package/static/browser/ldap-unit-editor/api/UnitApiClient.js +95 -0
- package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -0
- package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +295 -0
- package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -0
- package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +321 -0
- package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -0
- package/static/browser/ldap-unit-editor/components/UnitTree.js +197 -0
- package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -0
- package/static/browser/ldap-unit-editor/index.js +2 -0
- package/static/browser/ldap-unit-editor/index.js.map +1 -0
- package/static/browser/ldap-unit-editor/types.js +2 -0
- package/static/browser/ldap-unit-editor/types.js.map +1 -0
- package/static/browser/ldap-unit-editor.esm.js +1013 -0
- package/static/browser/ldap-unit-editor.esm.js.map +1 -0
- package/static/browser/ldap-unit-editor.js +1021 -0
- package/static/browser/ldap-unit-editor.js.map +1 -0
- package/static/browser/ldap-unit-editor.min.js +2 -0
- package/static/browser/ldap-unit-editor.min.js.map +1 -0
- package/static/browser/ldap-user-editor/LdapUserEditor.js +184 -0
- package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -0
- package/static/browser/ldap-user-editor/api/UserApiClient.js +209 -0
- package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -0
- package/static/browser/ldap-user-editor/cache/CacheManager.js +123 -0
- package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -0
- package/static/browser/ldap-user-editor/components/MoveUserModal.js +302 -0
- package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -0
- package/static/browser/ldap-user-editor/components/PointerField.js +152 -0
- package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -0
- package/static/browser/ldap-user-editor/components/UserEditor.js +608 -0
- package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -0
- package/static/browser/ldap-user-editor/components/UserList.js +181 -0
- package/static/browser/ldap-user-editor/components/UserList.js.map +1 -0
- package/static/browser/ldap-user-editor/components/UserTree.js +164 -0
- package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -0
- package/static/browser/ldap-user-editor/index.js +2 -0
- package/static/browser/ldap-user-editor/index.js.map +1 -0
- package/static/browser/ldap-user-editor/types.js +2 -0
- package/static/browser/ldap-user-editor/types.js.map +1 -0
- package/static/browser/ldap-user-editor.css +2 -0
- package/static/browser/ldap-user-editor.css.map +1 -0
- package/static/browser/ldap-user-editor.esm.js +1897 -0
- package/static/browser/ldap-user-editor.esm.js.map +1 -0
- package/static/browser/ldap-user-editor.js +1905 -0
- package/static/browser/ldap-user-editor.js.map +1 -0
- package/static/browser/ldap-user-editor.min.js +2 -0
- package/static/browser/ldap-user-editor.min.js.map +1 -0
- package/static/browser/shared/components/Modal.js +121 -0
- package/static/browser/shared/components/Modal.js.map +1 -0
- package/static/browser/shared/components/StatusMessage.js +119 -0
- package/static/browser/shared/components/StatusMessage.js.map +1 -0
- package/static/browser/shared/index.js +7 -0
- package/static/browser/shared/index.js.map +1 -0
- package/static/browser/shared/types/index.js +37 -0
- package/static/browser/shared/types/index.js.map +1 -0
- package/static/browser/shared/utils/dom.js +78 -0
- package/static/browser/shared/utils/dom.js.map +1 -0
- package/static/browser/shared/utils/form.js +234 -0
- package/static/browser/shared/utils/form.js.map +1 -0
- package/static/browser/shared/utils/schema.js +121 -0
- package/static/browser/shared/utils/schema.js.map +1 -0
- package/static/browser/shared.esm.js +694 -0
- package/static/browser/shared.esm.js.map +1 -0
- package/static/browser/shared.js +723 -0
- package/static/browser/shared.js.map +1 -0
- package/static/browser/shared.min.js +2 -0
- package/static/browser/shared.min.js.map +1 -0
- package/static/schemas/ad/computers.json +92 -0
- package/static/schemas/ad/groups.json +55 -0
- package/static/schemas/ad/organizations.json +66 -0
- package/static/schemas/ad/users.json +116 -0
- package/static/schemas/standard/devices.json +72 -0
- package/static/schemas/standard/groups.json +54 -0
- package/static/schemas/standard/organizations.json +49 -0
- package/static/schemas/standard/users.json +86 -0
- package/static/schemas/twake/groups.json +75 -0
- package/static/schemas/twake/nomenclature/twakeAccountStatus.json +31 -0
- package/static/schemas/twake/nomenclature/twakeDeliveryMode.json +31 -0
- package/static/schemas/twake/nomenclature/twakeListType.json +31 -0
- package/static/schemas/twake/nomenclature/twakeMailboxType.json +31 -0
- package/static/schemas/twake/nomenclature/twakeTitle.json +31 -0
- package/static/schemas/twake/organizations.json +52 -0
- package/static/schemas/twake/positions.json +32 -0
- package/static/schemas/twake/users.json +112 -0
|
@@ -0,0 +1,721 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: LDAP-Rest
|
|
3
|
+
sub_title: Gestionnaire d'annuaire léger avec architecture à plugins
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# LDAP-Rest
|
|
7
|
+
|
|
8
|
+
## Gestionnaire d'annuaire léger avec architecture à plugins
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
<!-- end_slide -->
|
|
13
|
+
|
|
14
|
+
# Qu'est-ce que LDAP-Rest ?
|
|
15
|
+
|
|
16
|
+
Un gestionnaire d'annuaire **léger** et **extensible** pour LDAP
|
|
17
|
+
|
|
18
|
+
## Caractéristiques principales
|
|
19
|
+
|
|
20
|
+
- 🔌 **Architecture à plugins** - Fonctionnalités modulaires et extensibles
|
|
21
|
+
- 🔄 **Cohérence LDAP automatique** - Plugins de cohérence des données
|
|
22
|
+
- 🌐 **API REST complète** - Gestion LDAP via HTTP
|
|
23
|
+
- 🎨 **Bibliothèques browser** - Composants UI prêts à l'emploi
|
|
24
|
+
- 🔐 **Authentification configurable** - Token, OIDC, LLNG, etc.
|
|
25
|
+
- ⚡ **Léger et rapide** - Empreinte mémoire minimale
|
|
26
|
+
- 📦 **TypeScript** - Typage strict et sécurité
|
|
27
|
+
|
|
28
|
+
<!-- end_slide -->
|
|
29
|
+
|
|
30
|
+
# Architecture
|
|
31
|
+
|
|
32
|
+
## Stack technique
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
┌─────────────────────────────────────┐
|
|
36
|
+
│ API REST (Express) │
|
|
37
|
+
├─────────────────────────────────────┤
|
|
38
|
+
│ Système de Plugins │
|
|
39
|
+
│ ┌──────────┬──────────┬─────────┐ │
|
|
40
|
+
│ │ Auth │ LDAP │ Twake │ │
|
|
41
|
+
│ └──────────┴──────────┴─────────┘ │
|
|
42
|
+
├─────────────────────────────────────┤
|
|
43
|
+
│ Client LDAP (ldapts) │
|
|
44
|
+
└─────────────────────────────────────┘
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- **Runtime**: Node.js + TypeScript (ES Modules)
|
|
48
|
+
- **Build**: Rollup (dual config: server + browser)
|
|
49
|
+
- **Test**: Mocha + Chai
|
|
50
|
+
- **LDAP**: ldapts (client moderne)
|
|
51
|
+
|
|
52
|
+
<!-- end_slide -->
|
|
53
|
+
|
|
54
|
+
# Architecture des Plugins
|
|
55
|
+
|
|
56
|
+
## Système d'événements et hooks
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
export default class MyPlugin extends DmPlugin {
|
|
60
|
+
name = 'myPlugin';
|
|
61
|
+
dependencies = { onChange: 'core/ldap/onChange' };
|
|
62
|
+
|
|
63
|
+
hooks: Hooks = {
|
|
64
|
+
onLdapChange: async (dn, changes) => {
|
|
65
|
+
// Réagir aux changements LDAP
|
|
66
|
+
},
|
|
67
|
+
onBeforeResponse: async (req, res, data) => {
|
|
68
|
+
// Modifier les réponses API
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
<!-- end_slide -->
|
|
75
|
+
|
|
76
|
+
# Plugins Disponibles
|
|
77
|
+
|
|
78
|
+
## Authentification
|
|
79
|
+
|
|
80
|
+
- **token** - Authentification Bearer Token
|
|
81
|
+
- **openidconnect** - OpenID Connect / OAuth2
|
|
82
|
+
- **llng** - LemonLDAP::NG SSO
|
|
83
|
+
- **crowdsec** - Protection contre les abus
|
|
84
|
+
- **rateLimit** - Limitation de débit
|
|
85
|
+
- **authzPerBranch** - Autorisation par branche LDAP
|
|
86
|
+
- **authzLinid1** - Autorisation LinID v1
|
|
87
|
+
|
|
88
|
+
<!-- end_slide -->
|
|
89
|
+
|
|
90
|
+
# Plugins Disponibles (suite)
|
|
91
|
+
|
|
92
|
+
## LDAP Core
|
|
93
|
+
|
|
94
|
+
- **onChange** - Détection et notification des changements
|
|
95
|
+
- **flatGeneric** - Gestion générique pilotée par schémas
|
|
96
|
+
- **groups** - Gestion des groupes LDAP
|
|
97
|
+
- **organization** - Hiérarchie organisationnelle
|
|
98
|
+
- **externalUsersInGroups** - Utilisateurs externes dans les groupes
|
|
99
|
+
|
|
100
|
+
## Intégrations
|
|
101
|
+
|
|
102
|
+
- **twake/james** - Synchronisation Apache James (mail)
|
|
103
|
+
- **twake/calendarResources** - Ressources calendrier
|
|
104
|
+
|
|
105
|
+
<!-- end_slide -->
|
|
106
|
+
|
|
107
|
+
# Plugin Apache James
|
|
108
|
+
|
|
109
|
+
## Plugin de cohérence LDAP ↔ Messagerie
|
|
110
|
+
|
|
111
|
+
[Apache James](https://james.apache.org/) est un serveur de messagerie open source (SMTP, IMAP, POP3)
|
|
112
|
+
|
|
113
|
+
### Fonctionnalités du plugin
|
|
114
|
+
|
|
115
|
+
- 📧 **Synchronisation automatique LDAP → James**
|
|
116
|
+
- 🔄 **Changement d'adresse mail** - Renommage compte + données
|
|
117
|
+
- 💾 **Gestion des quotas** - Mise à jour automatique
|
|
118
|
+
- 👥 **Listes de diffusion** - Groupes LDAP → Address Groups
|
|
119
|
+
- 📨 **Alias mail** - mailAlternateAddress → James aliases
|
|
120
|
+
- 🎯 **WebAdmin API** - Communication via REST
|
|
121
|
+
|
|
122
|
+
### 🔐 Garantie de cohérence
|
|
123
|
+
|
|
124
|
+
**Toute modification LDAP est automatiquement propagée à James**
|
|
125
|
+
|
|
126
|
+
- ✅ Pas de désynchronisation
|
|
127
|
+
- ✅ Pas d'intervention manuelle
|
|
128
|
+
- ✅ Cohérence temps réel
|
|
129
|
+
|
|
130
|
+
<!-- end_slide -->
|
|
131
|
+
|
|
132
|
+
# Plugin James - Scénarios de cohérence
|
|
133
|
+
|
|
134
|
+
## 1. Changement d'adresse mail
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
LDAP: mail = alice@example.com → alice.smith@example.com
|
|
138
|
+
↓ onChange détecte le changement
|
|
139
|
+
↓ Hook onLdapMailChange déclenché
|
|
140
|
+
↓
|
|
141
|
+
James WebAdmin: POST /users/alice@.../rename/alice.smith@...
|
|
142
|
+
→ Compte renommé
|
|
143
|
+
→ Boîte mail préservée (inbox, sent, folders)
|
|
144
|
+
→ Ancien alias créé automatiquement
|
|
145
|
+
✅ COHÉRENCE GARANTIE
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 2. Mise à jour de quota
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
LDAP: mailQuota = 1000000000 → 5000000000 (1GB → 5GB)
|
|
152
|
+
↓ onChange détecte le changement
|
|
153
|
+
↓ Hook onLdapQuotaChange déclenché
|
|
154
|
+
↓
|
|
155
|
+
James WebAdmin: PUT /quota/users/alice@.../size
|
|
156
|
+
→ Quota mis à jour immédiatement
|
|
157
|
+
✅ COHÉRENCE GARANTIE
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
<!-- end_slide -->
|
|
161
|
+
|
|
162
|
+
# Plugin James - Cohérence des listes
|
|
163
|
+
|
|
164
|
+
## Groupes LDAP → James Address Groups
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# Création d'un groupe avec attribut mail
|
|
168
|
+
POST /api/v1/ldap/groups
|
|
169
|
+
{
|
|
170
|
+
"cn": "engineering",
|
|
171
|
+
"mail": "engineering@company.com",
|
|
172
|
+
"member": ["uid=alice,...", "uid=bob,..."]
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Cohérence automatique des listes
|
|
177
|
+
|
|
178
|
+
1. ✅ **Création** → Groupe créé dans James + membres ajoutés
|
|
179
|
+
2. ✅ **Ajout membre** → Membre ajouté à la liste James
|
|
180
|
+
3. ✅ **Retrait membre** → Membre retiré de la liste James
|
|
181
|
+
4. ✅ **Suppression groupe** → Liste supprimée dans James
|
|
182
|
+
|
|
183
|
+
### Garantie
|
|
184
|
+
|
|
185
|
+
**LDAP est la source de vérité, James reste synchronisé**
|
|
186
|
+
|
|
187
|
+
<!-- end_slide -->
|
|
188
|
+
|
|
189
|
+
# Cohérence LDAP
|
|
190
|
+
|
|
191
|
+
## Plugins de cohérence automatique
|
|
192
|
+
|
|
193
|
+
LDAP-Rest maintient automatiquement la **cohérence** entre LDAP et les systèmes externes
|
|
194
|
+
|
|
195
|
+
### Mécanismes
|
|
196
|
+
|
|
197
|
+
1. **onChange** détecte tous les changements LDAP
|
|
198
|
+
2. Les plugins réagissent via hooks
|
|
199
|
+
3. Actions correctives automatiques
|
|
200
|
+
4. **Garantie de l'intégrité référentielle**
|
|
201
|
+
|
|
202
|
+
### Exemples - Cohérence LDAP
|
|
203
|
+
|
|
204
|
+
- **Suppression d'utilisateur** → Retrait automatique des groupes
|
|
205
|
+
- **Changement de DN** → Mise à jour des références
|
|
206
|
+
- **Utilisateurs externes** → Maintien dans les groupes
|
|
207
|
+
|
|
208
|
+
### Exemples - Cohérence LDAP ↔ James
|
|
209
|
+
|
|
210
|
+
- **Changement mail** → Renommage compte + alias James
|
|
211
|
+
- **Modification quotas** → Propagation immédiate
|
|
212
|
+
- **Gestion alias** → Synchronisation bidirectionnelle LDAP/James
|
|
213
|
+
|
|
214
|
+
<!-- end_slide -->
|
|
215
|
+
|
|
216
|
+
# API REST
|
|
217
|
+
|
|
218
|
+
## Endpoints principaux
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
# Organisations
|
|
222
|
+
GET /api/v1/ldap/organizations/:dn
|
|
223
|
+
GET /api/v1/ldap/organizations/:dn/subnodes
|
|
224
|
+
GET /api/v1/ldap/organizations/:dn/subnodes/search
|
|
225
|
+
|
|
226
|
+
# Utilisateurs (flatGeneric)
|
|
227
|
+
GET /api/v1/ldap/users
|
|
228
|
+
POST /api/v1/ldap/users
|
|
229
|
+
GET /api/v1/ldap/users/:dn
|
|
230
|
+
PUT /api/v1/ldap/users/:dn
|
|
231
|
+
DELETE /api/v1/ldap/users/:dn
|
|
232
|
+
|
|
233
|
+
# Groupes
|
|
234
|
+
GET /api/v1/ldap/groups
|
|
235
|
+
POST /api/v1/ldap/groups
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
<!-- end_slide -->
|
|
239
|
+
|
|
240
|
+
# Schémas JSON
|
|
241
|
+
|
|
242
|
+
## Architecture pilotée par schémas
|
|
243
|
+
|
|
244
|
+
Les schémas définissent :
|
|
245
|
+
|
|
246
|
+
- Structure des objets LDAP
|
|
247
|
+
- Validation des données
|
|
248
|
+
- UI auto-générée (browser)
|
|
249
|
+
- Documentation automatique
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"objectClass": "inetOrgPerson",
|
|
254
|
+
"fields": {
|
|
255
|
+
"uid": { "type": "string", "required": true },
|
|
256
|
+
"mail": { "type": "string", "format": "email" },
|
|
257
|
+
"displayName": { "type": "string" }
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
<!-- end_slide -->
|
|
263
|
+
|
|
264
|
+
# Schémas Disponibles
|
|
265
|
+
|
|
266
|
+
## Standard LDAP
|
|
267
|
+
|
|
268
|
+
- **users** - Utilisateurs (inetOrgPerson)
|
|
269
|
+
- **groups** - Groupes (groupOfNames)
|
|
270
|
+
- **organizations** - Organisations (organizationalUnit)
|
|
271
|
+
|
|
272
|
+
## Active Directory
|
|
273
|
+
|
|
274
|
+
- **ad/users** - Utilisateurs AD
|
|
275
|
+
- **ad/groups** - Groupes AD
|
|
276
|
+
|
|
277
|
+
## Twake
|
|
278
|
+
|
|
279
|
+
- **twake/users** - Extensions Twake
|
|
280
|
+
- **twake/groups** - Groupes Twake
|
|
281
|
+
- **twake/positions** - Postes/Fonctions
|
|
282
|
+
|
|
283
|
+
<!-- end_slide -->
|
|
284
|
+
|
|
285
|
+
# Bibliothèques Browser
|
|
286
|
+
|
|
287
|
+
## Composants UI prêts à l'emploi
|
|
288
|
+
|
|
289
|
+
### LdapTreeViewer
|
|
290
|
+
|
|
291
|
+
Arbre interactif de navigation dans les organisations LDAP
|
|
292
|
+
|
|
293
|
+
### LdapUserEditor
|
|
294
|
+
|
|
295
|
+
Interface complète de gestion d'utilisateurs
|
|
296
|
+
|
|
297
|
+
- Arbre organisationnel
|
|
298
|
+
- Liste d'utilisateurs
|
|
299
|
+
- Formulaire d'édition
|
|
300
|
+
|
|
301
|
+
<!-- end_slide -->
|
|
302
|
+
|
|
303
|
+
# LdapTreeViewer
|
|
304
|
+
|
|
305
|
+
## Utilisation
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
import LdapTreeViewer from 'ldap-rest/browser-ldap-tree-viewer-index';
|
|
309
|
+
|
|
310
|
+
const viewer = new LdapTreeViewer({
|
|
311
|
+
containerId: 'tree-container',
|
|
312
|
+
apiBaseUrl: 'http://localhost:8081',
|
|
313
|
+
onNodeClick: node => {
|
|
314
|
+
console.log('Sélection:', node.dn);
|
|
315
|
+
},
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
await viewer.init();
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
<!-- end_slide -->
|
|
322
|
+
|
|
323
|
+
# LdapUserEditor
|
|
324
|
+
|
|
325
|
+
## Utilisation
|
|
326
|
+
|
|
327
|
+
```typescript
|
|
328
|
+
import LdapUserEditor from 'ldap-rest/browser-ldap-user-editor-index';
|
|
329
|
+
|
|
330
|
+
const editor = new LdapUserEditor({
|
|
331
|
+
containerId: 'editor-container',
|
|
332
|
+
apiBaseUrl: 'http://localhost:8081',
|
|
333
|
+
onUserSaved: userDn => {
|
|
334
|
+
console.log('Utilisateur sauvegardé:', userDn);
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
await editor.init();
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
<!-- end_slide -->
|
|
342
|
+
|
|
343
|
+
# Installation et Démarrage
|
|
344
|
+
|
|
345
|
+
## Installation
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
npm install ldap-rest
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Démarrage rapide
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
npx ldap-rest \
|
|
355
|
+
--ldap-base 'dc=example,dc=com' \
|
|
356
|
+
--ldap-dn 'cn=admin,dc=example,dc=com' \
|
|
357
|
+
--ldap-pwd admin \
|
|
358
|
+
--ldap-url ldap://localhost \
|
|
359
|
+
--plugin core/ldap/groups \
|
|
360
|
+
--plugin core/ldap/organization
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
<!-- end_slide -->
|
|
364
|
+
|
|
365
|
+
# Configuration
|
|
366
|
+
|
|
367
|
+
## Variables d'environnement
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
# Connexion LDAP
|
|
371
|
+
DM_LDAP_URL=ldap://localhost:389
|
|
372
|
+
DM_LDAP_DN=cn=admin,dc=example,dc=com
|
|
373
|
+
DM_LDAP_PWD=adminpassword
|
|
374
|
+
DM_LDAP_BASE=ou=users,dc=example,dc=com
|
|
375
|
+
|
|
376
|
+
# Serveur HTTP
|
|
377
|
+
DM_PORT=8081
|
|
378
|
+
DM_HOST=0.0.0.0
|
|
379
|
+
|
|
380
|
+
# Logging
|
|
381
|
+
DM_LOG_LEVEL=info # debug, info, warn, error
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
<!-- end_slide -->
|
|
385
|
+
|
|
386
|
+
# Développement
|
|
387
|
+
|
|
388
|
+
## Commandes principales
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Développement
|
|
392
|
+
npm run build:dev # Build dev rapide
|
|
393
|
+
npm run start:dev # Démarrer serveur dev
|
|
394
|
+
npm run dev # build + start
|
|
395
|
+
|
|
396
|
+
# Tests
|
|
397
|
+
npm test # Tous les tests
|
|
398
|
+
npm run test:one <file> # Test unique
|
|
399
|
+
|
|
400
|
+
# Qualité
|
|
401
|
+
npm run check # lint + format check
|
|
402
|
+
npm run fix # lint + format fix
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
<!-- end_slide -->
|
|
406
|
+
|
|
407
|
+
# Build et Déploiement
|
|
408
|
+
|
|
409
|
+
## Build Production
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
npm run build:prod
|
|
413
|
+
# → Génère dist/, static/browser/, Dockerfile
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Docker
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
npm run build:docker # Build image
|
|
420
|
+
docker run -p 8081:8081 ldap-rest
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
## Distribution
|
|
424
|
+
|
|
425
|
+
- Package NPM avec exports TypeScript
|
|
426
|
+
- Binaires CLI: `ldap-rest`, `sync-james`, `cleanup-external-users`
|
|
427
|
+
- Fichiers statiques prêts pour CDN
|
|
428
|
+
|
|
429
|
+
<!-- end_slide -->
|
|
430
|
+
|
|
431
|
+
# Cas d'Usage
|
|
432
|
+
|
|
433
|
+
## Scénarios d'utilisation
|
|
434
|
+
|
|
435
|
+
✅ **Annuaire d'entreprise**
|
|
436
|
+
|
|
437
|
+
- Gestion centralisée des utilisateurs
|
|
438
|
+
- **Synchronisation messagerie (Apache James)**
|
|
439
|
+
- Interface web de gestion
|
|
440
|
+
- **Cohérence automatique des données**
|
|
441
|
+
|
|
442
|
+
✅ **Plateforme collaborative (Twake)**
|
|
443
|
+
|
|
444
|
+
- Multi-tenant avec authzPerBranch
|
|
445
|
+
- **Mail, calendrier, listes de diffusion**
|
|
446
|
+
- Composants UI réutilisables
|
|
447
|
+
- **Intégrité référentielle garantie**
|
|
448
|
+
|
|
449
|
+
✅ **Service de provisioning**
|
|
450
|
+
|
|
451
|
+
- **Hooks pour synchronisation externe (James, etc.)**
|
|
452
|
+
- **Cohérence LDAP automatique**
|
|
453
|
+
- Audit des changements
|
|
454
|
+
- **Nettoyage automatique des incohérences**
|
|
455
|
+
|
|
456
|
+
<!-- end_slide -->
|
|
457
|
+
|
|
458
|
+
# Extensibilité
|
|
459
|
+
|
|
460
|
+
## Créer un plugin personnalisé
|
|
461
|
+
|
|
462
|
+
```typescript
|
|
463
|
+
import DmPlugin from 'ldap-rest/plugin-abstract';
|
|
464
|
+
import { Hooks } from 'ldap-rest/hooks';
|
|
465
|
+
|
|
466
|
+
export default class CustomPlugin extends DmPlugin {
|
|
467
|
+
name = 'custom/myPlugin';
|
|
468
|
+
|
|
469
|
+
hooks: Hooks = {
|
|
470
|
+
onLdapChange: async (dn, changes) => {
|
|
471
|
+
// Votre logique métier
|
|
472
|
+
await this.syncToExternalSystem(dn, changes);
|
|
473
|
+
},
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
routes() {
|
|
477
|
+
return [
|
|
478
|
+
{
|
|
479
|
+
method: 'get',
|
|
480
|
+
path: '/api/v1/custom/stats',
|
|
481
|
+
handler: async (req, res) => {
|
|
482
|
+
res.json({ stats: await this.getStats() });
|
|
483
|
+
},
|
|
484
|
+
},
|
|
485
|
+
];
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
<!-- end_slide -->
|
|
491
|
+
|
|
492
|
+
# Sécurité
|
|
493
|
+
|
|
494
|
+
## Mécanismes de sécurité
|
|
495
|
+
|
|
496
|
+
- 🔐 **Authentification multi-méthodes** (Token, OIDC, LLNG)
|
|
497
|
+
- 🛡️ **Autorisation granulaire** (par branche, par utilisateur)
|
|
498
|
+
- 🚦 **Rate limiting** (protection DoS)
|
|
499
|
+
- 🔒 **CrowdSec** (détection d'intrusion)
|
|
500
|
+
- 📝 **Audit des changements** (via onChange)
|
|
501
|
+
- 🔑 **LDAP bind sécurisé** (TLS supporté)
|
|
502
|
+
|
|
503
|
+
<!-- end_slide -->
|
|
504
|
+
|
|
505
|
+
# Performance
|
|
506
|
+
|
|
507
|
+
## Optimisations
|
|
508
|
+
|
|
509
|
+
- ⚡ **Lazy loading** - Chargement à la demande
|
|
510
|
+
- 🎯 **Cache intelligent** - Réduction des requêtes LDAP
|
|
511
|
+
- 📦 **Bundle optimisé** - Tree-shaking, minification
|
|
512
|
+
- 🔄 **Connexions persistantes** - Pool LDAP
|
|
513
|
+
- 🎨 **Rendering efficace** - Virtual DOM (browser libs)
|
|
514
|
+
|
|
515
|
+
## Métriques typiques
|
|
516
|
+
|
|
517
|
+
- Démarrage: < 500ms
|
|
518
|
+
- Requête API: < 50ms
|
|
519
|
+
- Empreinte mémoire: ~50MB
|
|
520
|
+
|
|
521
|
+
<!-- end_slide -->
|
|
522
|
+
|
|
523
|
+
# Roadmap
|
|
524
|
+
|
|
525
|
+
## Fonctionnalités à venir
|
|
526
|
+
|
|
527
|
+
- 🔍 **Recherche avancée** - Filtres LDAP complexes
|
|
528
|
+
- 📊 **Dashboard admin** - Monitoring et statistiques
|
|
529
|
+
- 🌍 **i18n** - Internationalisation complète
|
|
530
|
+
- 🔔 **Webhooks** - Notifications externes
|
|
531
|
+
- 📱 **Mobile-first UI** - Responsive design amélioré
|
|
532
|
+
- 🧪 **Playground interactif** - Démo en ligne
|
|
533
|
+
|
|
534
|
+
<!-- end_slide -->
|
|
535
|
+
|
|
536
|
+
# Documentation
|
|
537
|
+
|
|
538
|
+
## Ressources disponibles
|
|
539
|
+
|
|
540
|
+
📚 **Guides**
|
|
541
|
+
|
|
542
|
+
- [Developer Guide](./DEVELOPER_GUIDE.md)
|
|
543
|
+
- [Browser Libraries](./browser/LIBRARIES.md)
|
|
544
|
+
- [REST API Reference](./api/REST_API.md)
|
|
545
|
+
|
|
546
|
+
🔌 **Plugins**
|
|
547
|
+
|
|
548
|
+
- [Plugin Development](./plugins/DEVELOPMENT.md)
|
|
549
|
+
- [Hooks Reference](HOOKS.md)
|
|
550
|
+
|
|
551
|
+
📦 **Schémas**
|
|
552
|
+
|
|
553
|
+
- [JSON Schemas Guide](./schemas/SCHEMAS.md)
|
|
554
|
+
|
|
555
|
+
<!-- end_slide -->
|
|
556
|
+
|
|
557
|
+
# Communauté
|
|
558
|
+
|
|
559
|
+
## Contribuer
|
|
560
|
+
|
|
561
|
+
- 🐛 **Issues**: https://github.com/linagora/ldap-rest/issues
|
|
562
|
+
- 💡 **Discussions**: GitHub Discussions
|
|
563
|
+
- 📖 **Wiki**: https://deepwiki.com/linagora/ldap-rest
|
|
564
|
+
- 🤝 **Contributions**: Voir [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
565
|
+
|
|
566
|
+
## License
|
|
567
|
+
|
|
568
|
+
**AGPL-3.0** - Copyright 2025-present LINAGORA
|
|
569
|
+
|
|
570
|
+
Logiciel libre et open source
|
|
571
|
+
|
|
572
|
+
<!-- end_slide -->
|
|
573
|
+
|
|
574
|
+
# Exemples Concrets
|
|
575
|
+
|
|
576
|
+
## Intégration Twake + Apache James
|
|
577
|
+
|
|
578
|
+
```bash
|
|
579
|
+
# Configuration complète
|
|
580
|
+
npx ldap-rest \
|
|
581
|
+
--plugin core/ldap/onChange \
|
|
582
|
+
--plugin core/ldap/groups \
|
|
583
|
+
--plugin twake/james \
|
|
584
|
+
--james-webadmin-url http://james:8000 \
|
|
585
|
+
--james-webadmin-token "admin-token" \
|
|
586
|
+
--mail-attribute mail \
|
|
587
|
+
--quota-attribute mailQuota \
|
|
588
|
+
--alias-attribute mailAlternateAddress
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
### Flux de synchronisation
|
|
592
|
+
|
|
593
|
+
```
|
|
594
|
+
Changement LDAP → onChange → Hook → James WebAdmin API
|
|
595
|
+
↓
|
|
596
|
+
Logging + Audit
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
## Plugins de cohérence - Exemples
|
|
600
|
+
|
|
601
|
+
```typescript
|
|
602
|
+
// 1. Cohérence des groupes LDAP
|
|
603
|
+
import groups from 'ldap-rest/plugin-ldap-groups';
|
|
604
|
+
dm.registerPlugin('groups', groups);
|
|
605
|
+
|
|
606
|
+
// Suppression utilisateur:
|
|
607
|
+
// → Retrait automatique de tous ses groupes
|
|
608
|
+
// → Mise à jour des attributs member/uniqueMember
|
|
609
|
+
|
|
610
|
+
// 2. Cohérence LDAP ↔ James
|
|
611
|
+
import james from 'ldap-rest/plugin-twake-james';
|
|
612
|
+
dm.registerPlugin('james', james);
|
|
613
|
+
|
|
614
|
+
// Changement mail LDAP:
|
|
615
|
+
// → Renommage compte James
|
|
616
|
+
// → Mise à jour alias
|
|
617
|
+
// → Propagation quota
|
|
618
|
+
// → Cohérence garantie sans intervention manuelle
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
<!-- end_slide -->
|
|
622
|
+
|
|
623
|
+
# Exemples Concrets (suite)
|
|
624
|
+
|
|
625
|
+
## Interface Web Custom
|
|
626
|
+
|
|
627
|
+
```typescript
|
|
628
|
+
import LdapUserEditor from 'ldap-rest/browser-ldap-user-editor-index';
|
|
629
|
+
|
|
630
|
+
// Intégration dans votre app React/Vue/Angular
|
|
631
|
+
const editor = new LdapUserEditor({
|
|
632
|
+
containerId: 'users',
|
|
633
|
+
apiBaseUrl: process.env.API_URL,
|
|
634
|
+
onUserSaved: dn => {
|
|
635
|
+
analytics.track('user_updated', { dn });
|
|
636
|
+
notifications.success('Utilisateur sauvegardé');
|
|
637
|
+
},
|
|
638
|
+
onError: err => {
|
|
639
|
+
errorTracker.capture(err);
|
|
640
|
+
},
|
|
641
|
+
});
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
<!-- end_slide -->
|
|
645
|
+
|
|
646
|
+
# Comparaison
|
|
647
|
+
|
|
648
|
+
## LDAP-Rest vs Alternatives
|
|
649
|
+
|
|
650
|
+
| Fonctionnalité | LDAP-Rest | LDAP Account Manager | phpLDAPadmin |
|
|
651
|
+
| -------------------- | --------- | -------------------- | ------------ |
|
|
652
|
+
| TypeScript | ✅ | ❌ | ❌ |
|
|
653
|
+
| Architecture Plugins | ✅ | ⚠️ | ❌ |
|
|
654
|
+
| API REST | ✅ | ⚠️ | ❌ |
|
|
655
|
+
| Browser Libraries | ✅ | ❌ | ❌ |
|
|
656
|
+
| Modern Stack | ✅ | ⚠️ | ❌ |
|
|
657
|
+
| Extensibilité | ✅✅ | ⚠️ | ⚠️ |
|
|
658
|
+
| Sync James | ✅ | ❌ | ❌ |
|
|
659
|
+
| Cohérence auto | ✅ | ❌ | ❌ |
|
|
660
|
+
|
|
661
|
+
<!-- end_slide -->
|
|
662
|
+
|
|
663
|
+
# Pourquoi LDAP-Rest ?
|
|
664
|
+
|
|
665
|
+
## Avantages clés
|
|
666
|
+
|
|
667
|
+
🎯 **Moderne**
|
|
668
|
+
|
|
669
|
+
- Stack JavaScript moderne
|
|
670
|
+
- TypeScript first
|
|
671
|
+
- ES Modules natifs
|
|
672
|
+
|
|
673
|
+
🔧 **Flexible**
|
|
674
|
+
|
|
675
|
+
- Plugins personnalisables
|
|
676
|
+
- Hooks extensibles
|
|
677
|
+
- Schémas configurables
|
|
678
|
+
|
|
679
|
+
🚀 **Productif**
|
|
680
|
+
|
|
681
|
+
- API REST complète
|
|
682
|
+
- Composants UI prêts
|
|
683
|
+
- Documentation riche
|
|
684
|
+
|
|
685
|
+
<!-- end_slide -->
|
|
686
|
+
|
|
687
|
+
# Questions & Démo
|
|
688
|
+
|
|
689
|
+
## Contact
|
|
690
|
+
|
|
691
|
+
- 📧 Email: yadd@debian.org
|
|
692
|
+
- 🐙 GitHub: https://github.com/linagora/ldap-rest
|
|
693
|
+
- 🏢 LINAGORA: https://linagora.com
|
|
694
|
+
|
|
695
|
+
## Démo Live
|
|
696
|
+
|
|
697
|
+
```bash
|
|
698
|
+
# Lancer la démo
|
|
699
|
+
git clone https://github.com/linagora/ldap-rest
|
|
700
|
+
cd ldap-rest
|
|
701
|
+
npm install
|
|
702
|
+
npm run dev
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
Ouvrez http://localhost:8081
|
|
706
|
+
|
|
707
|
+
<!-- end_slide -->
|
|
708
|
+
|
|
709
|
+
# Merci !
|
|
710
|
+
|
|
711
|
+
## LDAP-Rest - Gestionnaire d'annuaire léger
|
|
712
|
+
|
|
713
|
+
[](https://linagora.com)
|
|
714
|
+
|
|
715
|
+
**GitHub**: https://github.com/linagora/ldap-rest
|
|
716
|
+
|
|
717
|
+
**License**: AGPL-3.0
|
|
718
|
+
|
|
719
|
+
---
|
|
720
|
+
|
|
721
|
+
_Questions ?_
|