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.
Files changed (296) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +48 -0
  3. package/bin/cleanup-external-users.mjs +219 -0
  4. package/bin/index.mjs +54 -0
  5. package/bin/sync-james.mjs +190 -0
  6. package/dist/abstract/ldapFlat.js +1 -0
  7. package/dist/abstract/plugin.js +1 -0
  8. package/dist/abstract/twakePlugin.js +1 -0
  9. package/dist/bin/index.js +1 -0
  10. package/dist/config/args.js +1 -0
  11. package/dist/lib/auth/base.js +1 -0
  12. package/dist/lib/authz/base.js +1 -0
  13. package/dist/lib/expressFormatedResponses.js +1 -0
  14. package/dist/lib/ldapActions.js +1 -0
  15. package/dist/lib/parseConfig.js +1 -0
  16. package/dist/lib/utils.js +1 -0
  17. package/dist/logger/winston.js +1 -0
  18. package/dist/plugins/auth/authzLinid1.js +1 -0
  19. package/dist/plugins/auth/authzPerBranch.js +1 -0
  20. package/dist/plugins/auth/crowdsec.js +1 -0
  21. package/dist/plugins/auth/llng.js +1 -0
  22. package/dist/plugins/auth/openidconnect.js +1 -0
  23. package/dist/plugins/auth/rateLimit.js +1 -0
  24. package/dist/plugins/auth/token.js +1 -0
  25. package/dist/plugins/configApi.js +1 -0
  26. package/dist/plugins/demo/helloworld.js +1 -0
  27. package/dist/plugins/ldap/bulkImport.js +1 -0
  28. package/dist/plugins/ldap/departmentSync.js +1 -0
  29. package/dist/plugins/ldap/externalUsersInGroups.js +1 -0
  30. package/dist/plugins/ldap/flatGeneric.js +1 -0
  31. package/dist/plugins/ldap/groups.js +1 -0
  32. package/dist/plugins/ldap/onChange.js +1 -0
  33. package/dist/plugins/ldap/organization.js +1 -0
  34. package/dist/plugins/ldap/trash.js +1 -0
  35. package/dist/plugins/priority.json.js +1 -0
  36. package/dist/plugins/static.js +1 -0
  37. package/dist/plugins/twake/calendarResources.js +1 -0
  38. package/dist/plugins/twake/james.js +1 -0
  39. package/dist/plugins/weblogs.js +1 -0
  40. package/dist/src/abstract/ldapFlat.d.ts +94 -0
  41. package/dist/src/abstract/plugin.d.ts +43 -0
  42. package/dist/src/abstract/twakePlugin.d.ts +90 -0
  43. package/dist/src/bin/index.d.ts +43 -0
  44. package/dist/src/browser/ldap-group-editor/LdapGroupEditor.d.ts +31 -0
  45. package/dist/src/browser/ldap-group-editor/api/GroupApiClient.d.ts +23 -0
  46. package/dist/src/browser/ldap-group-editor/components/CreateGroupModal.d.ts +19 -0
  47. package/dist/src/browser/ldap-group-editor/components/GroupPropertyEditor.d.ts +30 -0
  48. package/dist/src/browser/ldap-group-editor/components/GroupTree.d.ts +17 -0
  49. package/dist/src/browser/ldap-group-editor/components/MoveGroupModal.d.ts +20 -0
  50. package/dist/src/browser/ldap-group-editor/index.d.ts +6 -0
  51. package/dist/src/browser/ldap-group-editor/types.d.ts +58 -0
  52. package/dist/src/browser/ldap-resource-editor/api/ResourceApiClient.d.ts +53 -0
  53. package/dist/src/browser/ldap-resource-editor/cache/CacheManager.d.ts +65 -0
  54. package/dist/src/browser/ldap-resource-editor/index.d.ts +6 -0
  55. package/dist/src/browser/ldap-resource-editor/types.d.ts +78 -0
  56. package/dist/src/browser/ldap-tree-viewer/LdapTreeViewer.d.ts +26 -0
  57. package/dist/src/browser/ldap-tree-viewer/api/LdapApiClient.d.ts +30 -0
  58. package/dist/src/browser/ldap-tree-viewer/components/TreeNode.d.ts +17 -0
  59. package/dist/src/browser/ldap-tree-viewer/components/TreeRoot.d.ts +14 -0
  60. package/dist/src/browser/ldap-tree-viewer/index.d.ts +7 -0
  61. package/dist/src/browser/ldap-tree-viewer/store/Store.d.ts +18 -0
  62. package/dist/src/browser/ldap-tree-viewer/store/actions.d.ts +28 -0
  63. package/dist/src/browser/ldap-tree-viewer/store/reducers.d.ts +7 -0
  64. package/dist/src/browser/ldap-tree-viewer/types.d.ts +34 -0
  65. package/dist/src/browser/ldap-unit-editor/LdapUnitEditor.d.ts +27 -0
  66. package/dist/src/browser/ldap-unit-editor/api/UnitApiClient.d.ts +24 -0
  67. package/dist/src/browser/ldap-unit-editor/components/MoveUnitModal.d.ts +28 -0
  68. package/dist/src/browser/ldap-unit-editor/components/UnitPropertyEditor.d.ts +28 -0
  69. package/dist/src/browser/ldap-unit-editor/components/UnitTree.d.ts +18 -0
  70. package/dist/src/browser/ldap-unit-editor/index.d.ts +6 -0
  71. package/dist/src/browser/ldap-unit-editor/types.d.ts +55 -0
  72. package/dist/src/browser/ldap-user-editor/LdapUserEditor.d.ts +32 -0
  73. package/dist/src/browser/ldap-user-editor/api/UserApiClient.d.ts +55 -0
  74. package/dist/src/browser/ldap-user-editor/cache/CacheManager.d.ts +65 -0
  75. package/dist/src/browser/ldap-user-editor/components/MoveUserModal.d.ts +28 -0
  76. package/dist/src/browser/ldap-user-editor/components/PointerField.d.ts +22 -0
  77. package/dist/src/browser/ldap-user-editor/components/UserEditor.d.ts +46 -0
  78. package/dist/src/browser/ldap-user-editor/components/UserList.d.ts +24 -0
  79. package/dist/src/browser/ldap-user-editor/components/UserTree.d.ts +24 -0
  80. package/dist/src/browser/ldap-user-editor/index.d.ts +7 -0
  81. package/dist/src/browser/ldap-user-editor/types.d.ts +67 -0
  82. package/dist/src/browser/shared/components/Modal.d.ts +38 -0
  83. package/dist/src/browser/shared/components/StatusMessage.d.ts +48 -0
  84. package/dist/src/browser/shared/index.d.ts +10 -0
  85. package/dist/src/browser/shared/types/index.d.ts +65 -0
  86. package/dist/src/browser/shared/utils/dom.d.ts +33 -0
  87. package/dist/src/browser/shared/utils/form.d.ts +28 -0
  88. package/dist/src/browser/shared/utils/schema.d.ts +29 -0
  89. package/dist/src/config/args.d.ts +128 -0
  90. package/dist/src/config/schema.d.ts +18 -0
  91. package/dist/src/hooks.d.ts +76 -0
  92. package/dist/src/lib/auth/base.d.ts +9 -0
  93. package/dist/src/lib/authz/base.d.ts +63 -0
  94. package/dist/src/lib/expressFormatedResponses.d.ts +26 -0
  95. package/dist/src/lib/ldapActions.d.ts +91 -0
  96. package/dist/src/lib/parseConfig.d.ts +23 -0
  97. package/dist/src/lib/utils.d.ts +73 -0
  98. package/dist/src/logger/winston.d.ts +3 -0
  99. package/dist/src/plugins/auth/authzLinid1.d.ts +46 -0
  100. package/dist/src/plugins/auth/authzPerBranch.d.ts +59 -0
  101. package/dist/src/plugins/auth/crowdsec.d.ts +29 -0
  102. package/dist/src/plugins/auth/llng.d.ts +8 -0
  103. package/dist/src/plugins/auth/openidconnect.d.ts +11 -0
  104. package/dist/src/plugins/auth/rateLimit.d.ts +24 -0
  105. package/dist/src/plugins/auth/token.d.ts +17 -0
  106. package/dist/src/plugins/configApi.d.ts +24 -0
  107. package/dist/src/plugins/demo/helloworld.d.ts +12 -0
  108. package/dist/src/plugins/ldap/bulkImport.d.ts +48 -0
  109. package/dist/src/plugins/ldap/departmentSync.d.ts +35 -0
  110. package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +21 -0
  111. package/dist/src/plugins/ldap/flatGeneric.d.ts +31 -0
  112. package/dist/src/plugins/ldap/groups.d.ts +95 -0
  113. package/dist/src/plugins/ldap/onChange.d.ts +32 -0
  114. package/dist/src/plugins/ldap/organization.d.ts +65 -0
  115. package/dist/src/plugins/ldap/trash.d.ts +52 -0
  116. package/dist/src/plugins/static.d.ts +7 -0
  117. package/dist/src/plugins/twake/calendarResources.d.ts +31 -0
  118. package/dist/src/plugins/twake/james.d.ts +83 -0
  119. package/dist/src/plugins/weblogs.d.ts +8 -0
  120. package/docs/DEVELOPER_GUIDE.md +298 -0
  121. package/docs/OPENAPI.md +440 -0
  122. package/docs/PLUGIN_DEPENDENCIES.md +612 -0
  123. package/docs/README.md +466 -0
  124. package/docs/api/REFERENCE.md +983 -0
  125. package/docs/api/REST_API.md +1237 -0
  126. package/docs/authentication.md +469 -0
  127. package/docs/authzLinid1.md +521 -0
  128. package/docs/authzPerBranch.md +596 -0
  129. package/docs/browser/LIBRARIES.md +1196 -0
  130. package/docs/examples/EXAMPLES.md +1659 -0
  131. package/docs/examples/twake-mailbox-type-nomenclature.ldif +37 -0
  132. package/docs/examples/twake-mailbox-type-schema-amendment.ldif +30 -0
  133. package/docs/jamesTeamMailboxes.md +343 -0
  134. package/docs/ldapBulkImport.md +722 -0
  135. package/docs/ldapExternalUsersInGroups.md +325 -0
  136. package/docs/ldapFlatGeneric.md +444 -0
  137. package/docs/ldapGroups.md +589 -0
  138. package/docs/ldapOrganizations.md +659 -0
  139. package/docs/ldapTrash.md +260 -0
  140. package/docs/linagora.png +0 -0
  141. package/docs/onChange.md +318 -0
  142. package/docs/plugins/DEVELOPMENT.md +1219 -0
  143. package/docs/presenterm-fr.md +721 -0
  144. package/docs/presenterm.md +721 -0
  145. package/docs/schemas/SCHEMAS.md +1212 -0
  146. package/docs/static.md +410 -0
  147. package/docs/twakeCalendarResources.md +148 -0
  148. package/docs/twakeJames.md +661 -0
  149. package/docs/weblogs.md +399 -0
  150. package/examples/web/ldap-group-editor.html +113 -0
  151. package/examples/web/ldap-tree-viewer.html +368 -0
  152. package/examples/web/ldap-unit-editor.html +108 -0
  153. package/examples/web/ldap-user-editor.html +412 -0
  154. package/package.json +458 -0
  155. package/static/browser/common-demo.css +450 -0
  156. package/static/browser/ldap-group-editor/LdapGroupEditor.js +207 -0
  157. package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -0
  158. package/static/browser/ldap-group-editor/api/GroupApiClient.js +112 -0
  159. package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -0
  160. package/static/browser/ldap-group-editor/components/CreateGroupModal.js +212 -0
  161. package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -0
  162. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +497 -0
  163. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -0
  164. package/static/browser/ldap-group-editor/components/GroupTree.js +153 -0
  165. package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -0
  166. package/static/browser/ldap-group-editor/components/MoveGroupModal.js +235 -0
  167. package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -0
  168. package/static/browser/ldap-group-editor/index.js +2 -0
  169. package/static/browser/ldap-group-editor/index.js.map +1 -0
  170. package/static/browser/ldap-group-editor/types.js +2 -0
  171. package/static/browser/ldap-group-editor/types.js.map +1 -0
  172. package/static/browser/ldap-group-editor.esm.js +1399 -0
  173. package/static/browser/ldap-group-editor.esm.js.map +1 -0
  174. package/static/browser/ldap-group-editor.js +1407 -0
  175. package/static/browser/ldap-group-editor.js.map +1 -0
  176. package/static/browser/ldap-group-editor.min.js +2 -0
  177. package/static/browser/ldap-group-editor.min.js.map +1 -0
  178. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +226 -0
  179. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -0
  180. package/static/browser/ldap-resource-editor/cache/CacheManager.js +123 -0
  181. package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -0
  182. package/static/browser/ldap-resource-editor/index.js +2 -0
  183. package/static/browser/ldap-resource-editor/index.js.map +1 -0
  184. package/static/browser/ldap-resource-editor/types.js +2 -0
  185. package/static/browser/ldap-resource-editor/types.js.map +1 -0
  186. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +187 -0
  187. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -0
  188. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +50 -0
  189. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -0
  190. package/static/browser/ldap-tree-viewer/components/TreeNode.js +140 -0
  191. package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -0
  192. package/static/browser/ldap-tree-viewer/components/TreeRoot.js +98 -0
  193. package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -0
  194. package/static/browser/ldap-tree-viewer/index.js +2 -0
  195. package/static/browser/ldap-tree-viewer/index.js.map +1 -0
  196. package/static/browser/ldap-tree-viewer/store/Store.js +29 -0
  197. package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -0
  198. package/static/browser/ldap-tree-viewer/store/actions.js +53 -0
  199. package/static/browser/ldap-tree-viewer/store/actions.js.map +1 -0
  200. package/static/browser/ldap-tree-viewer/store/reducers.js +79 -0
  201. package/static/browser/ldap-tree-viewer/store/reducers.js.map +1 -0
  202. package/static/browser/ldap-tree-viewer/types.js +2 -0
  203. package/static/browser/ldap-tree-viewer/types.js.map +1 -0
  204. package/static/browser/ldap-tree-viewer.css +2 -0
  205. package/static/browser/ldap-tree-viewer.css.map +1 -0
  206. package/static/browser/ldap-tree-viewer.esm.js +606 -0
  207. package/static/browser/ldap-tree-viewer.esm.js.map +1 -0
  208. package/static/browser/ldap-tree-viewer.js +614 -0
  209. package/static/browser/ldap-tree-viewer.js.map +1 -0
  210. package/static/browser/ldap-tree-viewer.min.js +2 -0
  211. package/static/browser/ldap-tree-viewer.min.js.map +1 -0
  212. package/static/browser/ldap-unit-editor/LdapUnitEditor.js +119 -0
  213. package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -0
  214. package/static/browser/ldap-unit-editor/api/UnitApiClient.js +95 -0
  215. package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -0
  216. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +295 -0
  217. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -0
  218. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +321 -0
  219. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -0
  220. package/static/browser/ldap-unit-editor/components/UnitTree.js +197 -0
  221. package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -0
  222. package/static/browser/ldap-unit-editor/index.js +2 -0
  223. package/static/browser/ldap-unit-editor/index.js.map +1 -0
  224. package/static/browser/ldap-unit-editor/types.js +2 -0
  225. package/static/browser/ldap-unit-editor/types.js.map +1 -0
  226. package/static/browser/ldap-unit-editor.esm.js +1013 -0
  227. package/static/browser/ldap-unit-editor.esm.js.map +1 -0
  228. package/static/browser/ldap-unit-editor.js +1021 -0
  229. package/static/browser/ldap-unit-editor.js.map +1 -0
  230. package/static/browser/ldap-unit-editor.min.js +2 -0
  231. package/static/browser/ldap-unit-editor.min.js.map +1 -0
  232. package/static/browser/ldap-user-editor/LdapUserEditor.js +184 -0
  233. package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -0
  234. package/static/browser/ldap-user-editor/api/UserApiClient.js +209 -0
  235. package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -0
  236. package/static/browser/ldap-user-editor/cache/CacheManager.js +123 -0
  237. package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -0
  238. package/static/browser/ldap-user-editor/components/MoveUserModal.js +302 -0
  239. package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -0
  240. package/static/browser/ldap-user-editor/components/PointerField.js +152 -0
  241. package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -0
  242. package/static/browser/ldap-user-editor/components/UserEditor.js +608 -0
  243. package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -0
  244. package/static/browser/ldap-user-editor/components/UserList.js +181 -0
  245. package/static/browser/ldap-user-editor/components/UserList.js.map +1 -0
  246. package/static/browser/ldap-user-editor/components/UserTree.js +164 -0
  247. package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -0
  248. package/static/browser/ldap-user-editor/index.js +2 -0
  249. package/static/browser/ldap-user-editor/index.js.map +1 -0
  250. package/static/browser/ldap-user-editor/types.js +2 -0
  251. package/static/browser/ldap-user-editor/types.js.map +1 -0
  252. package/static/browser/ldap-user-editor.css +2 -0
  253. package/static/browser/ldap-user-editor.css.map +1 -0
  254. package/static/browser/ldap-user-editor.esm.js +1897 -0
  255. package/static/browser/ldap-user-editor.esm.js.map +1 -0
  256. package/static/browser/ldap-user-editor.js +1905 -0
  257. package/static/browser/ldap-user-editor.js.map +1 -0
  258. package/static/browser/ldap-user-editor.min.js +2 -0
  259. package/static/browser/ldap-user-editor.min.js.map +1 -0
  260. package/static/browser/shared/components/Modal.js +121 -0
  261. package/static/browser/shared/components/Modal.js.map +1 -0
  262. package/static/browser/shared/components/StatusMessage.js +119 -0
  263. package/static/browser/shared/components/StatusMessage.js.map +1 -0
  264. package/static/browser/shared/index.js +7 -0
  265. package/static/browser/shared/index.js.map +1 -0
  266. package/static/browser/shared/types/index.js +37 -0
  267. package/static/browser/shared/types/index.js.map +1 -0
  268. package/static/browser/shared/utils/dom.js +78 -0
  269. package/static/browser/shared/utils/dom.js.map +1 -0
  270. package/static/browser/shared/utils/form.js +234 -0
  271. package/static/browser/shared/utils/form.js.map +1 -0
  272. package/static/browser/shared/utils/schema.js +121 -0
  273. package/static/browser/shared/utils/schema.js.map +1 -0
  274. package/static/browser/shared.esm.js +694 -0
  275. package/static/browser/shared.esm.js.map +1 -0
  276. package/static/browser/shared.js +723 -0
  277. package/static/browser/shared.js.map +1 -0
  278. package/static/browser/shared.min.js +2 -0
  279. package/static/browser/shared.min.js.map +1 -0
  280. package/static/schemas/ad/computers.json +92 -0
  281. package/static/schemas/ad/groups.json +55 -0
  282. package/static/schemas/ad/organizations.json +66 -0
  283. package/static/schemas/ad/users.json +116 -0
  284. package/static/schemas/standard/devices.json +72 -0
  285. package/static/schemas/standard/groups.json +54 -0
  286. package/static/schemas/standard/organizations.json +49 -0
  287. package/static/schemas/standard/users.json +86 -0
  288. package/static/schemas/twake/groups.json +75 -0
  289. package/static/schemas/twake/nomenclature/twakeAccountStatus.json +31 -0
  290. package/static/schemas/twake/nomenclature/twakeDeliveryMode.json +31 -0
  291. package/static/schemas/twake/nomenclature/twakeListType.json +31 -0
  292. package/static/schemas/twake/nomenclature/twakeMailboxType.json +31 -0
  293. package/static/schemas/twake/nomenclature/twakeTitle.json +31 -0
  294. package/static/schemas/twake/organizations.json +52 -0
  295. package/static/schemas/twake/positions.json +32 -0
  296. package/static/schemas/twake/users.json +112 -0
@@ -0,0 +1,298 @@
1
+ # Developer Guide - LDAP-Rest
2
+
3
+ Welcome to the LDAP-Rest Developer Guide! This guide helps you build web applications using LDAP-Rest's APIs and libraries.
4
+
5
+ ## Quick Links
6
+
7
+ ### 🚀 Getting Started
8
+
9
+ - [Introduction & Architecture](#introduction)
10
+ - [Quick Start Guide](#quick-start)
11
+
12
+ ### 📚 Core Documentation
13
+
14
+ - **[REST API Documentation](./api/REST_API.md)** - Complete API reference (Config, Users, Groups, Organizations)
15
+ - **[Browser Libraries](./browser/LIBRARIES.md)** - LdapTreeViewer and LdapUserEditor
16
+ - **[JSON Schemas](./schemas/SCHEMAS.md)** - Schema structure and validation
17
+ - **[Integration Examples](./examples/EXAMPLES.md)** - React, Vue.js, Vanilla JavaScript examples
18
+ - **[Plugin Development](./plugins/DEVELOPMENT.md)** - Create your own plugins
19
+
20
+ ### 🔧 Reference
21
+
22
+ - **[API Reference](./api/REFERENCE.md)** - Complete API reference with all endpoints
23
+ - [Authentication](./api/REST_API.md#authentication) - OpenID, Token, LemonLDAP::NG
24
+ - [Troubleshooting](./api/REFERENCE.md#troubleshooting) - Common issues and solutions
25
+
26
+ ---
27
+
28
+ ## Introduction
29
+
30
+ LDAP-Rest is a lightweight LDAP directory manager that provides:
31
+
32
+ - **Complete REST API** for managing LDAP users, groups, and organizations
33
+ - **Ready-to-use browser libraries** in JavaScript/TypeScript
34
+ - **Schema-driven architecture** to adapt to different directory types (Twake, Active Directory, standard LDAP)
35
+ - **Dynamic configuration** exposed via API
36
+ - **Plugin-based extensibility** for custom functionality
37
+
38
+ ### Architecture Overview
39
+
40
+ ```
41
+ ┌─────────────────────────────────────┐
42
+ │ Your Web Application │
43
+ │ │
44
+ │ ┌───────────────────────────────┐ │
45
+ │ │ Browser Libraries │ │
46
+ │ │ - LdapTreeViewer │ │
47
+ │ │ - LdapUserEditor │ │
48
+ │ └───────────────────────────────┘ │
49
+ │ ↓ HTTP │
50
+ └─────────────────────────────────────┘
51
+ ↓
52
+ ┌─────────────────────────────────────┐
53
+ │ LDAP-Rest Server │
54
+ │ │
55
+ │ ┌───────────────────────────────┐ │
56
+ │ │ REST API │ │
57
+ │ │ - /api/v1/config │ │
58
+ │ │ - /api/v1/ldap/users │ │
59
+ │ │ - /api/v1/ldap/groups │ │
60
+ │ │ - /api/v1/ldap/organizations │ │
61
+ │ └───────────────────────────────┘ │
62
+ │ ↓ │
63
+ │ ┌───────────────────────────────┐ │
64
+ │ │ Plugins │ │
65
+ │ │ - configApi │ │
66
+ │ │ - ldapFlatGeneric │ │
67
+ │ │ - ldapGroups │ │
68
+ │ │ - ldapOrganizations │ │
69
+ │ └───────────────────────────────┘ │
70
+ │ ↓ │
71
+ └─────────────────────────────────────┘
72
+ ↓
73
+ ┌─────────────────────────────────────┐
74
+ │ LDAP Directory Server │
75
+ │ (OpenLDAP, AD, 389 Directory...) │
76
+ └─────────────────────────────────────┘
77
+ ```
78
+
79
+ ---
80
+
81
+ ## Quick Start
82
+
83
+ ### 1. Start LDAP-Rest Server
84
+
85
+ ```bash
86
+ npx ldap-rest \
87
+ --ldap-base 'dc=example,dc=com' \
88
+ --ldap-url 'ldap://localhost:389' \
89
+ --ldap-dn 'cn=admin,dc=example,dc=com' \
90
+ --ldap-pwd 'admin' \
91
+ --plugin core/configApi \
92
+ --plugin core/ldap/flatGeneric \
93
+ --ldap-flat-schema ./static/schemas/standard/users.json \
94
+ --plugin core/static \
95
+ --static-path ./static
96
+ ```
97
+
98
+ ### 2. Access the Configuration API
99
+
100
+ ```javascript
101
+ const config = await fetch('http://localhost:8081/api/v1/config').then(r =>
102
+ r.json()
103
+ );
104
+
105
+ console.log(config);
106
+ // {
107
+ // "apiPrefix": "/api",
108
+ // "ldapBase": "dc=example,dc=com",
109
+ // "features": { ... }
110
+ // }
111
+ ```
112
+
113
+ ### 3. Use the Browser Libraries
114
+
115
+ ```html
116
+ <!DOCTYPE html>
117
+ <html>
118
+ <head>
119
+ <link rel="stylesheet" href="/static/browser/ldap-user-editor.css" />
120
+ <link
121
+ href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"
122
+ rel="stylesheet"
123
+ />
124
+ <link
125
+ href="https://fonts.googleapis.com/icon?family=Material+Icons"
126
+ rel="stylesheet"
127
+ />
128
+ </head>
129
+ <body>
130
+ <div id="editor"></div>
131
+
132
+ <script src="/static/browser/ldap-user-editor.js"></script>
133
+ <script>
134
+ const { LdapUserEditor } = window.LdapUserEditor;
135
+
136
+ const editor = new LdapUserEditor({
137
+ containerId: 'editor',
138
+ apiBaseUrl: window.location.origin,
139
+ onUserSaved: dn => console.log('Saved:', dn),
140
+ });
141
+
142
+ editor.init();
143
+ </script>
144
+ </body>
145
+ </html>
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Documentation Structure
151
+
152
+ ### API Documentation
153
+
154
+ - **[REST API Guide](./api/REST_API.md)**
155
+ - Configuration API
156
+ - Organizations API
157
+ - Users API
158
+ - Groups API
159
+ - Authentication
160
+
161
+ - **[Complete API Reference](./api/REFERENCE.md)**
162
+ - All endpoints with examples
163
+ - Request/response formats
164
+ - Error codes
165
+ - LDAP modify format
166
+
167
+ ### Browser Libraries
168
+
169
+ - **[Browser Libraries Guide](./browser/LIBRARIES.md)**
170
+ - LdapTreeViewer - Interactive LDAP tree
171
+ - LdapUserEditor - Complete user editor
172
+ - Configuration options
173
+ - API methods
174
+ - Customization
175
+
176
+ ### Schemas
177
+
178
+ - **[JSON Schemas Guide](./schemas/SCHEMAS.md)**
179
+ - Schema structure
180
+ - Entity metadata
181
+ - Attribute types
182
+ - Semantic roles
183
+ - Validation rules
184
+ - Predefined schemas
185
+
186
+ ### Integration
187
+
188
+ - **[Integration Examples](./examples/EXAMPLES.md)**
189
+ - React application
190
+ - Vue.js application
191
+ - Vanilla JavaScript
192
+ - Group management
193
+ - Custom components
194
+
195
+ ### Plugin Development
196
+
197
+ - **[Plugin Development Guide](./plugins/DEVELOPMENT.md)**
198
+ - Creating plugins
199
+ - Custom configuration
200
+ - Hooks system
201
+ - LDAP operations
202
+ - API endpoints
203
+ - Testing
204
+
205
+ ---
206
+
207
+ ## Key Concepts
208
+
209
+ ### Schema-Driven Architecture
210
+
211
+ LDAP-Rest uses JSON schemas to define LDAP entity structure:
212
+
213
+ ```json
214
+ {
215
+ "entity": {
216
+ "name": "users",
217
+ "mainAttribute": "uid",
218
+ "objectClass": ["top", "person", "inetOrgPerson"],
219
+ "base": "ou=users,{ldap_base}"
220
+ },
221
+ "attributes": {
222
+ "uid": {
223
+ "type": "string",
224
+ "required": true,
225
+ "role": "identifier"
226
+ },
227
+ "cn": {
228
+ "type": "string",
229
+ "required": true,
230
+ "role": "displayName"
231
+ }
232
+ }
233
+ }
234
+ ```
235
+
236
+ See [JSON Schemas Guide](./schemas/SCHEMAS.md) for details.
237
+
238
+ ### Dynamic Configuration
239
+
240
+ The `/api/v1/config` endpoint exposes all available features, endpoints, and schemas. Your application discovers capabilities at runtime:
241
+
242
+ ```javascript
243
+ const config = await fetch('/api/v1/config').then(r => r.json());
244
+
245
+ // Find users endpoint
246
+ const usersEndpoint = config.features.ldapFlatGeneric.flatResources.find(
247
+ r => r.pluralName === 'users'
248
+ )?.endpoints.list;
249
+
250
+ // Use it
251
+ const users = await fetch(usersEndpoint).then(r => r.json());
252
+ ```
253
+
254
+ See [REST API Guide](./api/REST_API.md) for details.
255
+
256
+ ### Plugin-Based Extensibility
257
+
258
+ Extend LDAP-Rest with custom plugins that:
259
+
260
+ - Add REST API endpoints
261
+ - Hook into LDAP operations
262
+ - Integrate external systems
263
+ - Implement custom logic
264
+
265
+ See [Plugin Development Guide](./plugins/DEVELOPMENT.md) for details.
266
+
267
+ ---
268
+
269
+ ## Next Steps
270
+
271
+ 1. **Learn the API** - Read the [REST API Guide](./api/REST_API.md)
272
+ 2. **Try the Libraries** - Check the [Browser Libraries Guide](./browser/LIBRARIES.md)
273
+ 3. **See Examples** - Explore [Integration Examples](./examples/EXAMPLES.md)
274
+ 4. **Build a Plugin** - Follow the [Plugin Development Guide](./plugins/DEVELOPMENT.md)
275
+
276
+ ---
277
+
278
+ ## Resources
279
+
280
+ - [GitHub Repository](https://github.com/linagora/ldap-rest)
281
+ - [Contributing Guide](../CONTRIBUTING.md)
282
+ - [Plugin Development](../src/plugins/README.md)
283
+ - [Hooks Reference](../HOOKS.md)
284
+
285
+ ---
286
+
287
+ ## Support
288
+
289
+ - **Issues**: https://github.com/linagora/ldap-rest/issues
290
+ - **Documentation**: https://github.com/linagora/ldap-rest/tree/master/docs
291
+
292
+ ---
293
+
294
+ ## License
295
+
296
+ [![Powered by LINAGORA](./linagora.png)](https://linagora.com)
297
+
298
+ [AGPL-3.0](../LICENSE) - Copyright 2025-present LINAGORA