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 @@
1
+ {"version":3,"file":"ldap-unit-editor.js","sources":["../../../../src/browser/ldap-unit-editor/components/UnitTree.ts","../../../../src/browser/ldap-unit-editor/components/MoveUnitModal.ts","../../../../src/browser/ldap-unit-editor/components/UnitPropertyEditor.ts","../../../../src/browser/ldap-unit-editor/api/UnitApiClient.ts","../../../../src/browser/ldap-unit-editor/LdapUnitEditor.ts"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).LdapUnitEditor={})}(this,function(t){"use strict";class e{constructor(t,e,n){this.expandedNodes=new Set,this.selectedDn=null,this.rootDn=null,this.container=t,this.apiBaseUrl=e,this.onOrgSelect=n}async init(){this.container.innerHTML='\n <div class="unit-tree">\n <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">\n <h3 style="margin: 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">account_tree</span>\n Organizations\n </h3>\n <button id="create-unit-btn" style="background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; padding: 8px 12px; cursor: pointer; display: flex; align-items: center; gap: 4px; font-size: 14px;">\n <span class="material-icons" style="font-size: 18px;">add</span>\n Create\n </button>\n </div>\n <div id="tree-content">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n </div>\n ';try{const t=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/top`);if(!t.ok)throw new Error("Failed to load organizations");const e=await t.json();this.rootDn=e.dn,await this.renderTree();const n=this.container.querySelector("#create-unit-btn");n&&n.addEventListener("click",()=>this.handleCreateUnit())}catch(t){console.error("Failed to init tree:",t);const e=this.container.querySelector("#tree-content");e&&(e.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>')}}async handleCreateUnit(){const t=this.selectedDn||this.rootDn;if(!t)return void alert("Please select a parent organization first");const e=prompt("Enter the name for the new organizational unit (ou):");if(e&&e.trim())try{const n=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ou:e.trim(),parentDn:t})});if(!n.ok){const t=await n.text();throw new Error(t||"Failed to create organizational unit")}alert(`Organizational unit "${e}" created successfully!`),this.expandedNodes.add(t),await this.renderTree()}catch(t){console.error("Failed to create unit:",t),alert(`Failed to create unit: ${t.message}`)}}async renderTree(){const t=this.container.querySelector("#tree-content");if(t&&this.rootDn)try{const e=await this.renderNode(this.rootDn,0);t.innerHTML=e,this.attachEventListeners()}catch(e){console.error("Failed to render tree:",e),t.innerHTML='<p style="color: #f44336;">Error rendering tree</p>'}}async renderNode(t,e){const n=this.expandedNodes.has(t),i=this.selectedDn===t,a=20*e,s=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}`);if(!s.ok)throw new Error("Failed to load node");const o=await s.json();let r=t;o.ou?r=Array.isArray(o.ou)?o.ou[0]:o.ou:o.cn&&(r=Array.isArray(o.cn)?o.cn[0]:o.cn);let l=`\n <div class="tree-node ${i?"active":""}" style="padding-left: ${a}px; padding: 8px 8px 8px ${a}px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(t)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(t)}">${this.escapeHtml(r)}</span>\n </div>\n `;if(n)try{const n=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const i=(await n.json()).filter(t=>{const e=Array.isArray(t.objectClass)?t.objectClass:t.objectClass?[t.objectClass]:[];return e.includes("organizationalUnit")||e.includes("organization")});for(const t of i)l+=await this.renderNode(t.dn,e+1)}catch(e){console.error("Failed to load subnodes for",t,e)}return l}attachEventListeners(){this.container.querySelectorAll(".tree-node-toggle").forEach(t=>{t.addEventListener("click",async e=>{e.stopPropagation();const n=t.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.renderTree())})}),this.container.querySelectorAll(".tree-node-label").forEach(t=>{t.addEventListener("click",e=>{e.stopPropagation();const n=t.getAttribute("data-dn");n&&(this.selectedDn=n,this.onOrgSelect(n),this.renderTree())})})}escapeHtml(t){if(null==t)return"";const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(t).replace(/[&<>"'/]/g,t=>e[t])}}class n{constructor(t,e,n){this.modal=null,this.selectedOrgDn=null,this.expandedNodes=new Set,this.rootDn=null,this.api=t,this.currentOrgDn=e,this.onMove=n}static escapeHtml(t){if(null==t)return"";const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(t).replace(/[&<>"'/]/g,t=>e[t])}async show(){this.modal=document.createElement("div"),this.modal.className="modal-overlay active",this.modal.innerHTML='\n <div class="modal-container" style="max-width: 600px;">\n <div class="modal-header">\n <h3 style="margin: 0; display: flex; align-items: center; gap: 0.5rem;">\n <span class="material-icons">folder_open</span>\n Move Unit to Organization\n </h3>\n <button class="modal-close" id="modal-close-btn">\n <span class="material-icons">close</span>\n </button>\n </div>\n <div class="modal-body">\n <div id="move-modal-alert"></div>\n <div style="margin-bottom: 1rem; color: #666; font-size: 0.9rem;">\n Select the target organization where you want to move this unit.\n </div>\n <div id="organization-tree-container" style="max-height: 400px; overflow-y: auto; border: 1px solid #ddd; border-radius: 4px; padding: 0.5rem;">\n <div class="loading">\n <div class="spinner"></div>\n <p style="margin-top: 1rem">Loading organizations...</p>\n </div>\n </div>\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-secondary" id="modal-cancel-btn">\n Cancel\n </button>\n <button type="button" class="btn btn-primary" id="modal-move-btn" disabled>\n <span class="material-icons">drive_file_move</span>\n Move Unit\n </button>\n </div>\n </div>\n ',document.body.appendChild(this.modal),this.attachHandlers(),await this.loadOrganizationTree()}attachHandlers(){if(!this.modal)return;const t=this.modal.querySelector("#modal-close-btn");t?.addEventListener("click",()=>this.close());const e=this.modal.querySelector("#modal-cancel-btn");e?.addEventListener("click",()=>this.close());const n=this.modal.querySelector("#modal-move-btn");n?.addEventListener("click",()=>this.handleMove()),this.modal.addEventListener("click",t=>{t.target===this.modal&&this.close()});const i=t=>{"Escape"===t.key&&(this.close(),document.removeEventListener("keydown",i))};document.addEventListener("keydown",i)}async loadOrganizationTree(){const t=this.modal?.querySelector("#organization-tree-container");if(t)try{const t=await this.api.getOrganizations();this.rootDn=t.dn,this.expandedNodes.add(this.rootDn),await this.renderTree()}catch(e){t.innerHTML=`\n <div class="alert alert-error">\n <span class="material-icons">error</span>\n <div>Failed to load organizations: ${n.escapeHtml(e.message)}</div>\n </div>\n `}}async renderTree(){const t=this.modal?.querySelector("#organization-tree-container");if(t&&this.rootDn)try{const e=await this.renderNode(this.rootDn,0);t.innerHTML=e,this.attachTreeHandlers()}catch(e){t.innerHTML=`\n <div class="alert alert-error">\n <span class="material-icons">error</span>\n <div>Error rendering tree: ${n.escapeHtml(e.message)}</div>\n </div>\n `}}async renderNode(t,e){const i=this.expandedNodes.has(t),a=t===this.currentOrgDn,s=t===this.selectedOrgDn,o=20*e,r=await this.api.getUnit(t),l=Array.isArray(r.ou)?r.ou[0]:r.ou,d=(r.twakeDepartmentPath?Array.isArray(r.twakeDepartmentPath)?r.twakeDepartmentPath[0]:r.twakeDepartmentPath:void 0)||l||t;let c=`\n <div\n class="org-node ${a?"org-current":""} ${s?"org-selected":""}"\n data-org-dn="${n.escapeHtml(t)}"\n style="\n padding: 0.5rem;\n padding-left: ${o+8}px;\n cursor: ${a?"not-allowed":"pointer"};\n background: ${a?"#f5f5f5":s?"#e3f2fd":"white"};\n opacity: ${a?"0.6":"1"};\n display: flex;\n align-items: center;\n gap: 0.5rem;\n border-left: 2px solid ${s?"#2196f3":"transparent"};\n "\n >\n <span class="material-icons tree-toggle" data-dn="${n.escapeHtml(t)}" style="cursor: pointer; font-size: 1.2rem;">\n ${i?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 1.2rem; color: ${a?"#999":"#2196f3"};">\n ${a?"business":"folder"}\n </span>\n <span style="flex: 1; font-weight: ${s?"600":"500"};">\n ${n.escapeHtml(d)}\n ${a?'<span style="font-size: 0.85rem; color: #666; margin-left: 0.5rem;">(current)</span>':""}\n </span>\n ${s?'<span class="material-icons" style="color: #2196f3;">check_circle</span>':""}\n </div>\n `;if(i)try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const i=(await n.json()).filter(t=>{const e=Array.isArray(t.objectClass)?t.objectClass:t.objectClass?[t.objectClass]:[];return e.includes("organizationalUnit")||e.includes("organization")});for(const t of i)c+=await this.renderNode(t.dn,e+1)}catch(e){console.error("Failed to load subnodes for",t,e)}return c}attachTreeHandlers(){const t=this.modal?.querySelectorAll(".tree-toggle");t?.forEach(t=>{t.addEventListener("click",async e=>{e.stopPropagation();const n=t.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.renderTree())})});const e=this.modal?.querySelectorAll(".org-node");e?.forEach(t=>{const e=t.getAttribute("data-org-dn");e&&e!==this.currentOrgDn&&t.addEventListener("click",()=>{this.selectOrganization(e)})})}async selectOrganization(t){this.selectedOrgDn=t,await this.renderTree();const e=this.modal?.querySelector("#modal-move-btn");e&&(e.disabled=!1)}async handleMove(){if(!this.selectedOrgDn)return;const t=this.modal?.querySelector("#modal-move-btn"),e=this.modal?.querySelector("#move-modal-alert");t&&(t.disabled=!0,t.innerHTML='\n <span class="spinner" style="width: 1rem; height: 1rem; border-width: 2px;"></span>\n Moving...\n ');try{this.onMove(this.selectedOrgDn),this.close()}catch(i){e&&(e.innerHTML=`\n <div class="alert alert-error" style="margin-bottom: 1rem;">\n <span class="material-icons">error</span>\n <div>Move failed: ${n.escapeHtml(i.message)}</div>\n </div>\n `),t&&(t.disabled=!1,t.innerHTML='\n <span class="material-icons">drive_file_move</span>\n Move Unit\n ')}}close(){this.modal&&(this.modal.remove(),this.modal=null)}}class i{constructor(t,e,n){this.unit=null,this.schema=null,this.saveCallback=null,this.hasSubnodes=!1,this.container=t,this.api=e,this.unitDn=n}async init(){await this.loadUnit(),await this.loadSchema(),await this.checkSubnodes(),this.render(),this.attachEventListeners()}async loadUnit(){this.unit=await this.api.getUnit(this.unitDn)}async checkSubnodes(){try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(this.unitDn)}/subnodes`);if(t.ok){const e=await t.json();this.hasSubnodes=e.some(t=>{const e=Array.isArray(t.objectClass)?t.objectClass:t.objectClass?[t.objectClass]:[];return e.includes("organizationalUnit")||e.includes("organization")})}}catch(t){console.error("Failed to check subnodes:",t),this.hasSubnodes=!1}}async loadSchema(){console.warn("[UnitPropertyEditor] Loading schema...");const t=await this.api.getConfig(),e=t.features?.ldapOrganizations;if(console.warn("[UnitPropertyEditor] Organizations config:",e),e?.schemaUrl){console.warn("[UnitPropertyEditor] Loading schema from URL:",e.schemaUrl);const t=await fetch(e.schemaUrl);this.schema=await t.json(),console.warn("[UnitPropertyEditor] Schema loaded from URL:",this.schema)}else if(e?.schema)console.warn("[UnitPropertyEditor] Using schema from config"),this.schema=e.schema;else{console.warn("[UnitPropertyEditor] Falling back to flatResources");const e=t.features?.ldapFlatGeneric?.flatResources?.find(t=>"organizations"===t.pluralName||"organizations"===t.name);if(e?.schemaUrl){const t=await fetch(e.schemaUrl);this.schema=await t.json()}else e?.schema?this.schema=e.schema:(console.warn("[UnitPropertyEditor] No schema found, using default"),this.schema={entity:{objectClass:["organizationalUnit"]},attributes:{ou:{type:"string",required:!0},description:{type:"string"}}})}}onSave(t){this.saveCallback=t}render(){this.unit&&(this.container.innerHTML=`\n <div class="unit-property-editor">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">business</span>\n Edit Organizational Unit\n </h3>\n <form id="unit-edit-form">\n ${this.renderFields()}\n <div class="form-actions" style="margin-top: 24px; padding-top: 24px; border-top: 1px solid #e0e0e0; display: flex; gap: 12px; justify-content: space-between;">\n <button type="button" id="move-unit-btn" class="btn btn-secondary" style="background: #757575; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move\n </button>\n <div style="display: flex; gap: 12px;">\n <button type="button" id="delete-unit-btn" class="btn btn-danger" ${this.hasSubnodes?'disabled title="Cannot delete: organization has sub-organizations"':""} style="background: ${this.hasSubnodes?"#ccc":"#d32f2f"}; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: ${this.hasSubnodes?"not-allowed":"pointer"}; display: flex; align-items: center; gap: 8px; opacity: ${this.hasSubnodes?"0.5":"1"};">\n <span class="material-icons" style="font-size: 18px;">delete</span>\n Delete Unit\n </button>\n <button type="submit" class="btn btn-primary" style="background: var(--primary-color, #6200ee); color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">save</span>\n Save Changes\n </button>\n </div>\n </div>\n </form>\n </div>\n `)}renderFields(){if(!this.unit||!this.schema)return"<div>Loading...</div>";let t="";const e=[],n=[];for(const[t,i]of Object.entries(this.schema.attributes))i.fixed||"objectClass"===t||("ou"===t||"description"===t?e.push([t,i]):n.push([t,i]));if(e.length>0){t+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',t+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Basic Information</div>';for(const[n,i]of e)t+=this.renderField(n,i);t+="</div>"}if(n.length>0){t+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',t+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Additional Properties</div>';for(const[e,i]of n)t+=this.renderField(e,i);t+="</div>"}return t}renderField(t,e){const n=this.unit?.[t],i=this.getFieldLabel(t),a=e.required?"required":"";if("array"===e.type){const e=Array.isArray(n)?n.join("\n"):"";return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(i)}</label>\n <textarea name="${this.escapeHtml(t)}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 80px; font-family: 'Roboto', sans-serif;" ${a}>${this.escapeHtml(e)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">Enter one value per line</div>\n </div>\n `}return"number"===e.type||"integer"===e.type?`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(i)}</label>\n <input type="number" name="${this.escapeHtml(t)}" value="${n||""}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${a} />\n </div>\n `:`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(i)}</label>\n <input type="text" name="${this.escapeHtml(t)}" value="${this.escapeHtml(String(n||""))}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${a} />\n </div>\n `}getFieldLabel(t){return{ou:"Organization Unit",description:"Description"}[t]||t.replace(/([A-Z])/g," $1").replace(/_/g," ").replace(/^./,t=>t.toUpperCase())}attachEventListeners(){const t=document.getElementById("unit-edit-form");t&&t.addEventListener("submit",t=>this.handleSubmit(t));const e=document.getElementById("delete-unit-btn");e&&e.addEventListener("click",()=>this.handleDelete());const n=document.getElementById("move-unit-btn");n&&n.addEventListener("click",()=>this.handleMove())}async handleSubmit(t){t.preventDefault();const e=t.target,n=new FormData(e),i={};for(const[t,e]of n.entries())"array"===this.schema?.attributes[t]?.type?i[t]=e.split("\n").map(t=>t.trim()).filter(t=>t):"number"===this.schema?.attributes[t]?.type||"integer"===this.schema?.attributes[t]?.type?i[t]=Number(e):i[t]=e;try{await this.api.updateUnit(this.unitDn,i),alert("Organizational unit updated successfully!"),this.saveCallback&&this.saveCallback()}catch(t){console.error("Failed to update unit:",t),alert(`Failed to update unit: ${t.message}`)}}async handleMove(){if(!this.unit)return;const t=this.unitDn.split(",").slice(1).join(","),e=new n(this.api,t,async t=>{try{const e=await this.api.moveUnit(this.unitDn,t);alert("Unit moved successfully!"),e.newDn&&(this.unitDn=e.newDn,await this.loadUnit(),this.render(),this.attachEventListeners()),this.saveCallback&&this.saveCallback()}catch(t){console.error("Failed to move unit:",t),alert(`Failed to move unit: ${t.message}`)}});await e.show()}async handleDelete(){if(this.hasSubnodes)alert("Cannot delete this organizational unit because it contains sub-organizations. Please delete all sub-organizations first.");else if(confirm(`Are you sure you want to delete this organizational unit?\n\n${this.unitDn}\n\nThis action cannot be undone.`))try{await this.api.deleteEntry(this.unitDn),alert("Organizational unit deleted successfully!"),this.container.innerHTML='\n <div class="empty-state">\n <span class="material-icons">business</span>\n <p>Unit deleted. Select another unit to edit.</p>\n </div>\n '}catch(t){console.error("Failed to delete unit:",t),alert(`Failed to delete unit: ${t.message}`)}}escapeHtml(t){if(null==t)return"";const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(t).replace(/[&<>"'/]/g,t=>e[t])}}class a{constructor(t){this.baseUrl=t}async getConfig(){const t=await fetch(`${this.baseUrl}/api/v1/config`);if(!t.ok)throw new Error(`Failed to load config: ${t.statusText}`);return t.json()}async getOrganizations(){const t=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/top`);if(!t.ok)throw new Error(`Failed to load organizations: ${t.statusText}`);return t.json()}async getUnit(t){const e=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}`);if(!e.ok)throw new Error(`Failed to load unit: ${e.statusText}`);return e.json()}async updateUnit(t,e){const n=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){const t=await n.text();throw new Error(`Failed to update unit: ${t}`)}}async createEntry(t,e){const n=t.match(/^ou=([^,]+),(.+)$/);if(!n)throw new Error(`Invalid DN format: ${t}`);const[,i,a]=n,s=await fetch(`${this.baseUrl}/api/v1/ldap/organizations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ou:i,parentDn:a,...e})});if(!s.ok){const t=await s.text();throw new Error(`Failed to create entry: ${t}`)}}async deleteEntry(t){const e=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}`,{method:"DELETE"});if(!e.ok){const t=await e.text();throw new Error(`Failed to delete entry: ${t}`)}}async getPointerOptions(t){const e=await fetch(`${this.baseUrl}/api/v1/ldap/search?base=${encodeURIComponent(t)}&scope=one`);if(!e.ok)throw new Error(`Failed to load pointer options: ${e.statusText}`);return(await e.json()).map(t=>({dn:t.dn,label:t.cn?.[0]||t.ou?.[0]||t.dn}))}async moveUnit(t,e){const n=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(t)}/move`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetOrgDn:e})});if(!n.ok){const t=await n.text();throw new Error(t||"Failed to move unit")}return n.json()}}t.LdapUnitEditor=class{constructor(t){this.container=null,this.unitTree=null,this.unitEditor=null,this.currentUnitDn=null,this.config=null,this.options=t,this.api=new a(t.apiBaseUrl||"")}async init(){const t=document.getElementById(this.options.containerId);if(!t)throw new Error(`Container element with id '${this.options.containerId}' not found`);this.container=t,this.config=await this.api.getConfig(),this.render(),await this.initializeComponents()}render(){this.container&&(this.container.innerHTML='\n <div class="ldap-unit-editor" style="display: flex; gap: 24px; height: 100%;">\n <div id="unit-tree-container" style="flex: 0 0 300px; overflow-y: auto; border-right: 1px solid #e0e0e0; padding-right: 24px;"></div>\n <div id="unit-editor-container" style="flex: 1; overflow-y: auto;">\n <div class="empty-state" style="display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: #999;">\n <span class="material-icons" style="font-size: 64px; margin-bottom: 16px;">business</span>\n <p style="font-size: 16px; margin: 0;">Select an organizational unit to edit</p>\n </div>\n </div>\n </div>\n ')}async initializeComponents(){const t=document.getElementById("unit-tree-container");t&&(this.unitTree=new e(t,this.options.apiBaseUrl||"",t=>this.onUnitSelected(t)),await this.unitTree.init())}async onUnitSelected(t){this.currentUnitDn=t;const e=document.getElementById("unit-editor-container");if(e)try{this.unitEditor=new i(e,this.api,t),await this.unitEditor.init(),this.unitEditor.onSave(()=>{this.options.onUnitSaved&&this.options.onUnitSaved(t)})}catch(t){console.error("Failed to load unit editor:",t),e.innerHTML=`\n <div class="error-state" style="padding: 24px; color: #f44336;">\n <h3>Error loading unit</h3>\n <p>${t.message}</p>\n </div>\n `,this.options.onError&&this.options.onError(t)}}getCurrentUnitDn(){return this.currentUnitDn}async refresh(){if(this.unitTree&&await this.unitTree.init(),this.currentUnitDn&&this.unitEditor){const t=document.getElementById("unit-editor-container");t&&(this.unitEditor=new i(t,this.api,this.currentUnitDn),await this.unitEditor.init())}}getApi(){return this.api}getConfig(){return this.config}getCurrentOrgDn(){return this.currentUnitDn}getCurrentUserDn(){return this.currentUnitDn}async createUser(t){return this.api.createEntry(t.dn,t)}async deleteUser(t){return this.api.deleteEntry(t)}}});
2
+ //# sourceMappingURL=ldap-unit-editor.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldap-unit-editor.min.js","sources":["../../../../src/browser/ldap-unit-editor/components/UnitTree.ts","../../../../src/browser/ldap-unit-editor/components/MoveUnitModal.ts","../../../../src/browser/ldap-unit-editor/components/UnitPropertyEditor.ts","../../../../src/browser/ldap-unit-editor/api/UnitApiClient.ts","../../../../src/browser/ldap-unit-editor/LdapUnitEditor.ts"],"sourcesContent":[null,null,null,null,null],"names":["UnitTree","constructor","container","apiBaseUrl","onOrgSelect","this","expandedNodes","Set","selectedDn","rootDn","init","innerHTML","response","fetch","ok","Error","topOrg","json","dn","renderTree","createBtn","querySelector","addEventListener","handleCreateUnit","error","console","treeEl","parentDn","alert","ouName","prompt","trim","method","headers","body","JSON","stringify","ou","text","add","message","html","renderNode","attachEventListeners","level","isExpanded","has","isSelected","indent","encodeURIComponent","node","displayName","Array","isArray","cn","escapeHtml","subnodesResponse","orgs","filter","n","classes","objectClass","includes","subnode","querySelectorAll","forEach","el","async","e","stopPropagation","getAttribute","delete","map","String","replace","m","MoveUnitModal","api","currentOrgDn","onMove","modal","selectedOrgDn","show","document","createElement","className","appendChild","attachHandlers","loadOrganizationTree","closeBtn","close","cancelBtn","moveBtn","handleMove","target","handleEscape","key","removeEventListener","getOrganizations","attachTreeHandlers","isCurrentOrg","getUnit","twakeDepartmentPath","undefined","toggles","toggle","nodes","orgDn","selectOrganization","disabled","alertContainer","remove","UnitPropertyEditor","unitDn","unit","schema","saveCallback","hasSubnodes","loadUnit","loadSchema","checkSubnodes","render","subnodes","some","warn","config","getConfig","orgsConfig","features","ldapOrganizations","schemaUrl","unitsResource","ldapFlatGeneric","flatResources","find","r","pluralName","name","entity","attributes","type","required","description","onSave","callback","renderFields","basicFields","otherFields","fieldName","attribute","Object","entries","fixed","push","length","renderField","value","label","getFieldLabel","arrayValue","join","str","toUpperCase","form","getElementById","handleSubmit","deleteBtn","handleDelete","preventDefault","formData","FormData","updates","split","v","Number","updateUnit","slice","targetOrgDn","result","moveUnit","newDn","confirm","deleteEntry","UnitApiClient","baseUrl","statusText","data","createEntry","match","getPointerOptions","branch","entry","options","unitTree","unitEditor","currentUnitDn","containerId","initializeComponents","treeContainer","onUnitSelected","editorContainer","onUnitSaved","onError","getCurrentUnitDn","refresh","getApi","getCurrentOrgDn","getCurrentUserDn","createUser","deleteUser"],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ import { UserApiClient } from './api/UserApiClient.js';
2
+ import { UserTree } from './components/UserTree.js';
3
+ import { UserEditor } from './components/UserEditor.js';
4
+ import { UserList } from './components/UserList.js';
5
+
6
+ /**
7
+ * LDAP User Editor - Main class
8
+ * @author Xavier Guimard
9
+ */
10
+ class LdapUserEditor {
11
+ constructor(options) {
12
+ this.container = null;
13
+ this.userTree = null;
14
+ this.userEditor = null;
15
+ this.userList = null;
16
+ this.currentUserDn = null;
17
+ this.currentOrgDn = null;
18
+ this.config = null;
19
+ this.options = {
20
+ apiBaseUrl: typeof window !== 'undefined' ? window.location.origin : '',
21
+ ...options,
22
+ };
23
+ this.api = new UserApiClient(this.options.apiBaseUrl);
24
+ }
25
+ async init() {
26
+ this.container = document.getElementById(this.options.containerId);
27
+ if (!this.container) {
28
+ throw new Error(`Container #${this.options.containerId} not found`);
29
+ }
30
+ // Load config first
31
+ this.config = await this.api.getConfig();
32
+ this.render();
33
+ await this.initComponents();
34
+ }
35
+ render() {
36
+ if (!this.container)
37
+ return;
38
+ this.container.innerHTML = `
39
+ <div class="ldap-user-editor">
40
+ <div class="editor-layout">
41
+ <div id="user-tree-container" class="demo-panel"></div>
42
+ <div id="user-editor-container" class="demo-panel">
43
+ <div class="empty-state">
44
+ <span class="material-icons">person_search</span>
45
+ <p>Select a user from the list to edit</p>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ `;
51
+ }
52
+ async initComponents() {
53
+ const treeContainer = document.getElementById('user-tree-container');
54
+ if (!treeContainer)
55
+ return;
56
+ this.userTree = new UserTree(treeContainer, this.options.apiBaseUrl || window.location.origin, orgDn => this.onOrganizationSelected(orgDn));
57
+ try {
58
+ await this.userTree.init();
59
+ }
60
+ catch (error) {
61
+ this.handleError(error);
62
+ }
63
+ }
64
+ async onOrganizationSelected(dn) {
65
+ const editorContainer = document.getElementById('user-editor-container');
66
+ if (!editorContainer)
67
+ return;
68
+ this.currentOrgDn = dn;
69
+ this.currentUserDn = null;
70
+ try {
71
+ // Show user list for this organization
72
+ this.userList = new UserList(editorContainer, this.api, dn, userDn => this.onUserSelected(userDn));
73
+ await this.userList.init();
74
+ }
75
+ catch (error) {
76
+ this.handleError(error);
77
+ editorContainer.innerHTML = `
78
+ <div class="empty-state">
79
+ <span class="material-icons">error</span>
80
+ <p>Failed to load users for this organization</p>
81
+ </div>
82
+ `;
83
+ }
84
+ }
85
+ async onUserSelected(dn) {
86
+ this.currentUserDn = dn;
87
+ const editorContainer = document.getElementById('user-editor-container');
88
+ if (!editorContainer)
89
+ return;
90
+ this.userEditor = new UserEditor(editorContainer, this.api, dn, () => {
91
+ if (this.options.onUserSaved) {
92
+ this.options.onUserSaved(dn);
93
+ }
94
+ // Refresh the user list if we have one
95
+ if (this.currentOrgDn && this.userList) {
96
+ this.userList.refresh();
97
+ }
98
+ }, () => {
99
+ // On user deleted
100
+ this.deleteUser(dn);
101
+ });
102
+ try {
103
+ await this.userEditor.init();
104
+ }
105
+ catch (error) {
106
+ this.handleError(error);
107
+ }
108
+ }
109
+ handleError(error) {
110
+ console.error('LDAP User Editor error:', error);
111
+ if (this.options.onError) {
112
+ this.options.onError(error);
113
+ }
114
+ }
115
+ async refresh() {
116
+ await this.userTree?.refresh();
117
+ if (this.currentUserDn) {
118
+ await this.userEditor?.refresh();
119
+ }
120
+ }
121
+ destroy() {
122
+ if (this.container) {
123
+ this.container.innerHTML = '';
124
+ }
125
+ this.userTree = null;
126
+ this.userEditor = null;
127
+ this.currentUserDn = null;
128
+ }
129
+ async createUser(userData) {
130
+ try {
131
+ const result = await this.api.createUser(userData);
132
+ // Refresh the user list if we have one
133
+ if (this.userList) {
134
+ await this.userList.refresh();
135
+ }
136
+ return result;
137
+ }
138
+ catch (error) {
139
+ this.handleError(error);
140
+ throw error;
141
+ }
142
+ }
143
+ async deleteUser(dn) {
144
+ try {
145
+ await this.api.deleteUser(dn);
146
+ // Clear current selection if we deleted the selected user
147
+ if (this.currentUserDn === dn) {
148
+ this.currentUserDn = null;
149
+ const editorContainer = document.getElementById('user-editor-container');
150
+ if (editorContainer) {
151
+ editorContainer.innerHTML = `
152
+ <div class="empty-state">
153
+ <span class="material-icons">person_search</span>
154
+ <p>Select a user from the list to edit</p>
155
+ </div>
156
+ `;
157
+ }
158
+ }
159
+ // Refresh the user list
160
+ if (this.userList) {
161
+ await this.userList.refresh();
162
+ }
163
+ }
164
+ catch (error) {
165
+ this.handleError(error);
166
+ throw error;
167
+ }
168
+ }
169
+ getConfig() {
170
+ return this.config;
171
+ }
172
+ getApi() {
173
+ return this.api;
174
+ }
175
+ getCurrentOrgDn() {
176
+ return this.currentOrgDn;
177
+ }
178
+ getCurrentUserDn() {
179
+ return this.currentUserDn;
180
+ }
181
+ }
182
+
183
+ export { LdapUserEditor };
184
+ //# sourceMappingURL=LdapUserEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LdapUserEditor.js","sources":["../../../../src/browser/ldap-user-editor/LdapUserEditor.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,209 @@
1
+ import { CacheManager } from '../cache/CacheManager.js';
2
+
3
+ /**
4
+ * LDAP User Editor - API Client
5
+ */
6
+ class UserApiClient {
7
+ constructor(baseUrl = '', cacheOptions) {
8
+ this.baseUrl =
9
+ baseUrl || (typeof window !== 'undefined' ? window.location.origin : '');
10
+ this.cache = new CacheManager(cacheOptions);
11
+ // Clean expired entries every 5 minutes (only in browser context)
12
+ if (typeof window !== 'undefined') {
13
+ window.setInterval(() => this.cache.cleanExpired(), 5 * 60 * 1000);
14
+ }
15
+ }
16
+ getApiBase() {
17
+ return `${this.baseUrl}/api/v1`;
18
+ }
19
+ getFirstValue(value) {
20
+ if (!value)
21
+ return '';
22
+ if (Array.isArray(value))
23
+ return value[0] || '';
24
+ return String(value);
25
+ }
26
+ /**
27
+ * Fetch with cache support for GET requests
28
+ */
29
+ async cachedFetch(url, options) {
30
+ const method = options?.method || 'GET';
31
+ // Only cache GET requests
32
+ if (method === 'GET') {
33
+ const cached = this.cache.get(url);
34
+ if (cached !== null) {
35
+ return cached;
36
+ }
37
+ }
38
+ const res = await fetch(url, options);
39
+ if (!res.ok) {
40
+ throw new Error(`HTTP ${res.status}: ${res.statusText}`);
41
+ }
42
+ const data = (await res.json());
43
+ // Cache GET responses
44
+ if (method === 'GET') {
45
+ this.cache.set(url, data);
46
+ }
47
+ return data;
48
+ }
49
+ async getConfig() {
50
+ return this.cachedFetch(`${this.getApiBase()}/config`);
51
+ }
52
+ async getSchema(schemaUrl) {
53
+ // Handle relative URLs by prepending baseUrl
54
+ const url = schemaUrl.startsWith('http')
55
+ ? schemaUrl
56
+ : `${this.baseUrl}${schemaUrl}`;
57
+ return this.cachedFetch(url);
58
+ }
59
+ async getUsers(search = '') {
60
+ const url = search
61
+ ? `${this.getApiBase()}/ldap/users?match=${encodeURIComponent(search)}&attribute=uid`
62
+ : `${this.getApiBase()}/ldap/users`;
63
+ const data = await this.cachedFetch(url);
64
+ // Convert from object format {uid: entry} to array format
65
+ return Array.isArray(data) ? data : Object.values(data);
66
+ }
67
+ async getUser(dn) {
68
+ const url = `${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}`;
69
+ return this.cachedFetch(url);
70
+ }
71
+ async updateUser(dn, data) {
72
+ const res = await fetch(`${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}`, {
73
+ method: 'PUT',
74
+ headers: { 'Content-Type': 'application/json' },
75
+ body: JSON.stringify(data),
76
+ });
77
+ if (!res.ok) {
78
+ const error = await res.text();
79
+ throw new Error(error || 'Failed to update user');
80
+ }
81
+ const result = await res.json();
82
+ // Invalidate cache for this user and user lists
83
+ this.cache.invalidate(`${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}`);
84
+ this.cache.invalidatePattern(`${this.getApiBase()}/ldap/users*`);
85
+ return result;
86
+ }
87
+ async createUser(data) {
88
+ const res = await fetch(`${this.getApiBase()}/ldap/users`, {
89
+ method: 'POST',
90
+ headers: { 'Content-Type': 'application/json' },
91
+ body: JSON.stringify(data),
92
+ });
93
+ if (!res.ok) {
94
+ const error = await res.text();
95
+ throw new Error(error || 'Failed to create user');
96
+ }
97
+ const result = await res.json();
98
+ // Invalidate cache for user lists
99
+ this.cache.invalidatePattern(`${this.getApiBase()}/ldap/users*`);
100
+ return result;
101
+ }
102
+ async deleteUser(dn) {
103
+ const res = await fetch(`${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}`, {
104
+ method: 'DELETE',
105
+ });
106
+ if (!res.ok) {
107
+ const error = await res.text();
108
+ throw new Error(error || 'Failed to delete user');
109
+ }
110
+ // Invalidate cache for this user and user lists
111
+ this.cache.invalidate(`${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}`);
112
+ this.cache.invalidatePattern(`${this.getApiBase()}/ldap/users*`);
113
+ }
114
+ async moveUser(dn, targetOrgDn) {
115
+ const res = await fetch(`${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}/move`, {
116
+ method: 'POST',
117
+ headers: { 'Content-Type': 'application/json' },
118
+ body: JSON.stringify({ targetOrgDn }),
119
+ });
120
+ if (!res.ok) {
121
+ const error = await res.text();
122
+ throw new Error(error || 'Failed to move user');
123
+ }
124
+ const result = await res.json();
125
+ // Invalidate cache for this user and user lists
126
+ this.cache.invalidate(`${this.getApiBase()}/ldap/users/${encodeURIComponent(dn)}`);
127
+ this.cache.invalidatePattern(`${this.getApiBase()}/ldap/users*`);
128
+ return result;
129
+ }
130
+ async getPointerOptions(branch) {
131
+ try {
132
+ // Load config to find the right endpoint by matching base
133
+ const config = await this.getConfig();
134
+ // Find resource that matches this branch by comparing base
135
+ const resource = config.features?.ldapFlatGeneric?.flatResources?.find(r => {
136
+ // Match if branch equals base or branch starts with base
137
+ return branch === r.base || branch.startsWith(r.base);
138
+ });
139
+ if (resource && resource.endpoints?.list) {
140
+ // Use the endpoint from config
141
+ const url = `${this.baseUrl}${resource.endpoints.list}`;
142
+ const data = await this.cachedFetch(url);
143
+ // Convert from object format {key: entry} to array
144
+ const items = Array.isArray(data) ? data : Object.values(data);
145
+ // Load schema to get displayName field
146
+ let displayNameField = 'cn'; // Default fallback
147
+ const identifierField = resource.mainAttribute;
148
+ if (resource.schemaUrl) {
149
+ try {
150
+ const schema = await this.getSchema(resource.schemaUrl);
151
+ // Find field with displayName role
152
+ const displayField = Object.entries(schema.attributes).find(([, attr]) => attr.role === 'displayName');
153
+ if (displayField) {
154
+ displayNameField = displayField[0];
155
+ }
156
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
157
+ }
158
+ catch (e) {
159
+ // Use defaults if schema fails
160
+ }
161
+ }
162
+ return items.map((item) => {
163
+ const displayName = this.getFirstValue(item[displayNameField]);
164
+ const identifier = this.getFirstValue(item[identifierField]);
165
+ return {
166
+ dn: item.dn,
167
+ label: displayName || identifier || item.dn,
168
+ };
169
+ });
170
+ }
171
+ // No matching resource found in config
172
+ throw new Error(`No flatResource found in config for branch: ${branch}`);
173
+ }
174
+ catch (error) {
175
+ console.error('Failed to load pointer options for branch:', branch, error);
176
+ return [];
177
+ }
178
+ }
179
+ /**
180
+ * Cache management methods
181
+ */
182
+ /**
183
+ * Clear all cache
184
+ */
185
+ clearCache() {
186
+ this.cache.clear();
187
+ }
188
+ /**
189
+ * Invalidate cache for a specific URL pattern
190
+ */
191
+ invalidateCache(pattern) {
192
+ this.cache.invalidatePattern(pattern);
193
+ }
194
+ /**
195
+ * Get cache statistics
196
+ */
197
+ getCacheStats() {
198
+ return this.cache.getStats();
199
+ }
200
+ /**
201
+ * Get cache instance (for advanced usage)
202
+ */
203
+ getCache() {
204
+ return this.cache;
205
+ }
206
+ }
207
+
208
+ export { UserApiClient };
209
+ //# sourceMappingURL=UserApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserApiClient.js","sources":["../../../../../src/browser/ldap-user-editor/api/UserApiClient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}