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
package/docs/weblogs.md
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
# Web Logs Plugin
|
|
2
|
+
|
|
3
|
+
HTTP request logging middleware for debugging and monitoring.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `weblogs` plugin logs all incoming HTTP requests and responses with timing information, status codes, and authenticated user details.
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
--plugin core/weblogs
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
No additional configuration required.
|
|
16
|
+
|
|
17
|
+
## Log Output
|
|
18
|
+
|
|
19
|
+
### Request Logging
|
|
20
|
+
|
|
21
|
+
Each request is logged when it arrives:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
[debug] Incoming request: GET /api/v1/ldap/users
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Response Logging
|
|
28
|
+
|
|
29
|
+
Each response is logged when completed:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"level": "info",
|
|
34
|
+
"message": "GET /api/v1/ldap/users 200 45ms",
|
|
35
|
+
"user": "admin",
|
|
36
|
+
"method": "GET",
|
|
37
|
+
"url": "/api/v1/ldap/users",
|
|
38
|
+
"status": 200,
|
|
39
|
+
"responseTime": "45ms"
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Log Fields
|
|
44
|
+
|
|
45
|
+
| Field | Description | Example |
|
|
46
|
+
| -------------- | ------------------------------- | --------------------------------- |
|
|
47
|
+
| `message` | Summary line | `GET /api/v1/ldap/users 200 45ms` |
|
|
48
|
+
| `user` | Authenticated user (if any) | `admin` |
|
|
49
|
+
| `method` | HTTP method | `GET`, `POST`, `PUT`, `DELETE` |
|
|
50
|
+
| `url` | Full URL including query params | `/api/v1/ldap/users?match=*` |
|
|
51
|
+
| `status` | HTTP status code | `200`, `404`, `500` |
|
|
52
|
+
| `responseTime` | Request duration | `45ms`, `123ms` |
|
|
53
|
+
| `error` | Error message (if applicable) | `Connection timeout` |
|
|
54
|
+
|
|
55
|
+
## Use Cases
|
|
56
|
+
|
|
57
|
+
### 1. Request Monitoring
|
|
58
|
+
|
|
59
|
+
Track all API usage:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
--plugin core/weblogs \
|
|
63
|
+
--log-level info
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Output:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
[info] POST /api/v1/ldap/users 201 123ms {"user":"admin"}
|
|
70
|
+
[info] GET /api/v1/ldap/users/jdoe 200 23ms {"user":"admin"}
|
|
71
|
+
[info] PUT /api/v1/ldap/users/jdoe 200 89ms {"user":"admin"}
|
|
72
|
+
[info] DELETE /api/v1/ldap/users/test 200 45ms {"user":"admin"}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 2. Performance Analysis
|
|
76
|
+
|
|
77
|
+
Identify slow endpoints:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
--plugin core/weblogs \
|
|
81
|
+
--log-level info | grep -E '[0-9]{3,}ms'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Shows requests taking >100ms:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
[info] GET /api/v1/ldap/organizations/top 200 345ms
|
|
88
|
+
[info] POST /api/v1/ldap/users 201 523ms
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 3. Security Auditing
|
|
92
|
+
|
|
93
|
+
Track who accesses what:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
--plugin core/auth/token \
|
|
97
|
+
--plugin core/weblogs
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Output:
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"level": "info",
|
|
105
|
+
"message": "DELETE /api/v1/ldap/users/jdoe 200 45ms",
|
|
106
|
+
"user": "admin",
|
|
107
|
+
"method": "DELETE",
|
|
108
|
+
"url": "/api/v1/ldap/users/jdoe"
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 4. Error Tracking
|
|
113
|
+
|
|
114
|
+
Monitor failed requests:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
--plugin core/weblogs | grep -E ' (4|5)[0-9]{2} '
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Shows 4xx and 5xx responses:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
[info] GET /api/v1/ldap/users/notfound 404 12ms
|
|
124
|
+
[info] POST /api/v1/ldap/users 400 8ms {"error":"Missing required field: cn"}
|
|
125
|
+
[info] GET /api/v1/ldap/users 500 234ms {"error":"LDAP connection timeout"}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Integration
|
|
129
|
+
|
|
130
|
+
### With Authentication Plugins
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
--plugin core/auth/token \
|
|
134
|
+
--plugin core/weblogs \
|
|
135
|
+
--auth-token "secret-token"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Logs include authenticated user:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"user": "token number 0",
|
|
143
|
+
"message": "GET /api/v1/ldap/users 200 45ms"
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### With Authorization Plugin
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
--plugin core/auth/token \
|
|
151
|
+
--plugin core/auth/authzPerBranch \
|
|
152
|
+
--plugin core/weblogs
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Track authorization failures:
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"user": "limited_user",
|
|
160
|
+
"message": "GET /api/v1/ldap/users 403 5ms",
|
|
161
|
+
"error": "User does not have read permission"
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Log Levels
|
|
166
|
+
|
|
167
|
+
Configure log level to control verbosity:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
--log-level debug # All requests + debug info
|
|
171
|
+
--log-level info # Completed requests only
|
|
172
|
+
--log-level warn # Only warnings and errors
|
|
173
|
+
--log-level error # Only errors
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Debug Level
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
--plugin core/weblogs \
|
|
180
|
+
--log-level debug
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Output:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
[debug] Incoming request: POST /api/v1/ldap/users
|
|
187
|
+
[debug] Request body: {"uid":"newuser","cn":"New User",...}
|
|
188
|
+
[info] POST /api/v1/ldap/users 201 123ms
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Info Level
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
--plugin core/weblogs \
|
|
195
|
+
--log-level info
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Output:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
[info] POST /api/v1/ldap/users 201 123ms {"user":"admin"}
|
|
202
|
+
[info] GET /api/v1/ldap/users 200 45ms {"user":"admin"}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Event Handling
|
|
206
|
+
|
|
207
|
+
The plugin logs three types of events:
|
|
208
|
+
|
|
209
|
+
### 1. Normal Completion
|
|
210
|
+
|
|
211
|
+
Request completes successfully:
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
res.on('finish', () => {
|
|
215
|
+
// Log: "GET /api/v1/ldap/users 200 45ms"
|
|
216
|
+
});
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 2. Response Error
|
|
220
|
+
|
|
221
|
+
Error occurs during response:
|
|
222
|
+
|
|
223
|
+
```javascript
|
|
224
|
+
res.on('error', err => {
|
|
225
|
+
// Log: "GET /api/v1/ldap/users 500 234ms" {"error":"Connection timeout"}
|
|
226
|
+
});
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 3. Connection Closed
|
|
230
|
+
|
|
231
|
+
Client closes connection before response:
|
|
232
|
+
|
|
233
|
+
```javascript
|
|
234
|
+
res.on('close', () => {
|
|
235
|
+
// Log: "GET /api/v1/ldap/users - - {"error":"Connection closed before response was sent"}
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Log Parsing
|
|
240
|
+
|
|
241
|
+
### JSON Format
|
|
242
|
+
|
|
243
|
+
Logs are in JSON format for easy parsing:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
cat app.log | jq 'select(.status >= 400)'
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Filters 4xx and 5xx responses:
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"level": "info",
|
|
254
|
+
"message": "GET /api/v1/ldap/users/notfound 404 12ms",
|
|
255
|
+
"status": 404,
|
|
256
|
+
"method": "GET",
|
|
257
|
+
"url": "/api/v1/ldap/users/notfound"
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Statistics
|
|
262
|
+
|
|
263
|
+
Generate request statistics:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
cat app.log | jq -r '.message' | awk '{print $1}' | sort | uniq -c
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Output:
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
45 DELETE
|
|
273
|
+
123 GET
|
|
274
|
+
67 POST
|
|
275
|
+
34 PUT
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Response Time Analysis
|
|
279
|
+
|
|
280
|
+
Average response time per endpoint:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
cat app.log | jq -r 'select(.responseTime) | "\(.url) \(.responseTime)"' | \
|
|
284
|
+
sed 's/ms$//' | \
|
|
285
|
+
awk '{sum[$1]+=$2; count[$1]++} END {for (url in sum) print url, sum[url]/count[url] "ms"}'
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Performance Impact
|
|
289
|
+
|
|
290
|
+
The weblogs plugin adds minimal overhead:
|
|
291
|
+
|
|
292
|
+
- **Request logging**: ~0.1ms
|
|
293
|
+
- **Response logging**: ~0.5ms
|
|
294
|
+
- **Total overhead**: <1ms per request
|
|
295
|
+
|
|
296
|
+
For high-traffic deployments:
|
|
297
|
+
|
|
298
|
+
1. Use `--log-level warn` to reduce logging
|
|
299
|
+
2. Log to file instead of console
|
|
300
|
+
3. Use log aggregation service
|
|
301
|
+
|
|
302
|
+
## Log Rotation
|
|
303
|
+
|
|
304
|
+
Configure log rotation using environment or external tools:
|
|
305
|
+
|
|
306
|
+
### Using Winston File Transport
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
--log-file ./logs/ldap-rest.log \
|
|
310
|
+
--log-max-size 10485760 \ # 10MB
|
|
311
|
+
--log-max-files 5
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Using logrotate (Linux)
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
/var/log/ldap-rest/*.log {
|
|
318
|
+
daily
|
|
319
|
+
rotate 7
|
|
320
|
+
compress
|
|
321
|
+
delaycompress
|
|
322
|
+
notifempty
|
|
323
|
+
create 0640 ldap-rest ldap-rest
|
|
324
|
+
sharedscripts
|
|
325
|
+
postrotate
|
|
326
|
+
systemctl reload ldap-rest
|
|
327
|
+
endscript
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
## Troubleshooting
|
|
332
|
+
|
|
333
|
+
### Problem: No Logs Appearing
|
|
334
|
+
|
|
335
|
+
**Solutions:**
|
|
336
|
+
|
|
337
|
+
1. Ensure plugin is loaded:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
--plugin core/weblogs
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
2. Check log level:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
--log-level info # or debug
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
3. Verify logs go to stdout/stderr:
|
|
350
|
+
```bash
|
|
351
|
+
ldap-rest --plugin core/weblogs 2>&1 | tee app.log
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Problem: Too Many Logs
|
|
355
|
+
|
|
356
|
+
**Solutions:**
|
|
357
|
+
|
|
358
|
+
1. Increase log level:
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
--log-level warn # Only warnings and errors
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
2. Filter specific endpoints:
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
ldap-rest --plugin core/weblogs 2>&1 | grep -v '/health'
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
3. Use log aggregation with filtering
|
|
371
|
+
|
|
372
|
+
### Problem: User Field Empty
|
|
373
|
+
|
|
374
|
+
**Symptoms:**
|
|
375
|
+
|
|
376
|
+
```json
|
|
377
|
+
{ "message": "GET /api/v1/ldap/users 200 45ms" }
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
No `user` field in logs.
|
|
381
|
+
|
|
382
|
+
**Solutions:**
|
|
383
|
+
|
|
384
|
+
1. Enable authentication plugin:
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
--plugin core/auth/token \
|
|
388
|
+
--plugin core/weblogs
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
2. Verify authentication is working:
|
|
392
|
+
```bash
|
|
393
|
+
curl -H "Authorization: Bearer token" http://localhost:8081/api/v1/ldap/users
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## See Also
|
|
397
|
+
|
|
398
|
+
- [Authentication Plugins](authentication.md) - User authentication
|
|
399
|
+
- [Winston Logger](https://github.com/winstonjs/winston) - Logging library used
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>LDAP Group Editor Demo</title>
|
|
7
|
+
|
|
8
|
+
<!-- Google Fonts -->
|
|
9
|
+
<link
|
|
10
|
+
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
/>
|
|
13
|
+
<link
|
|
14
|
+
href="https://fonts.googleapis.com/icon?family=Material+Icons"
|
|
15
|
+
rel="stylesheet"
|
|
16
|
+
/>
|
|
17
|
+
|
|
18
|
+
<!-- Shared CSS -->
|
|
19
|
+
<link rel="stylesheet" href="/static/browser/common-demo.css" />
|
|
20
|
+
|
|
21
|
+
<!-- Library CSS -->
|
|
22
|
+
<link rel="stylesheet" href="/static/browser/ldap-user-editor.css" />
|
|
23
|
+
|
|
24
|
+
<style>
|
|
25
|
+
:root {
|
|
26
|
+
--primary-color: #185a9d;
|
|
27
|
+
--primary-color-dark: #0d3a6b;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
body {
|
|
31
|
+
background: linear-gradient(135deg, #43cea2 0%, #185a9d 100%);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.demo-header h1 {
|
|
35
|
+
color: #185a9d;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.action-button {
|
|
39
|
+
background: var(--primary-color);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.action-button:hover {
|
|
43
|
+
background: var(--primary-color-dark);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.field-group-title {
|
|
47
|
+
color: var(--primary-color);
|
|
48
|
+
}
|
|
49
|
+
</style>
|
|
50
|
+
</head>
|
|
51
|
+
<body>
|
|
52
|
+
<div class="demo-container">
|
|
53
|
+
<div class="demo-header">
|
|
54
|
+
<h1>👥 LDAP Group Editor</h1>
|
|
55
|
+
<p>
|
|
56
|
+
Browse and manage LDAP groups with support for mailing lists and team
|
|
57
|
+
mailboxes
|
|
58
|
+
</p>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div id="status-container"></div>
|
|
62
|
+
|
|
63
|
+
<div id="ldap-group-editor" style="min-height: 600px"></div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<!-- Shared utilities -->
|
|
67
|
+
<script src="/static/browser/shared.js"></script>
|
|
68
|
+
<!-- Library JS -->
|
|
69
|
+
<script src="/static/browser/ldap-group-editor.js"></script>
|
|
70
|
+
|
|
71
|
+
<script>
|
|
72
|
+
const { LdapGroupEditor } = window.LdapGroupEditor;
|
|
73
|
+
const { showStatus } = window.MiniDmShared;
|
|
74
|
+
|
|
75
|
+
async function initEditor() {
|
|
76
|
+
try {
|
|
77
|
+
const editor = new LdapGroupEditor({
|
|
78
|
+
containerId: 'ldap-group-editor',
|
|
79
|
+
apiBaseUrl: window.location.origin,
|
|
80
|
+
onGroupSaved: groupDn => {
|
|
81
|
+
console.log('Group saved:', groupDn);
|
|
82
|
+
showStatus(
|
|
83
|
+
'status-container',
|
|
84
|
+
'Group saved successfully!',
|
|
85
|
+
'success'
|
|
86
|
+
);
|
|
87
|
+
},
|
|
88
|
+
onError: error => {
|
|
89
|
+
console.error('Editor error:', error);
|
|
90
|
+
showStatus(
|
|
91
|
+
'status-container',
|
|
92
|
+
`Error: ${error.message}`,
|
|
93
|
+
'error'
|
|
94
|
+
);
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
await editor.init();
|
|
99
|
+
showStatus(
|
|
100
|
+
'status-container',
|
|
101
|
+
'LDAP Group Editor loaded successfully!',
|
|
102
|
+
'success'
|
|
103
|
+
);
|
|
104
|
+
} catch (error) {
|
|
105
|
+
console.error('Failed to initialize editor:', error);
|
|
106
|
+
showStatus('status-container', `Error: ${error.message}`, 'error');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
initEditor();
|
|
111
|
+
</script>
|
|
112
|
+
</body>
|
|
113
|
+
</html>
|