ldap-rest 0.11.2 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/abstract/ldapFlat.js +1 -1
  2. package/dist/bin/index.js +1 -1
  3. package/dist/config/args.js +1 -1
  4. package/dist/lib/authz/composition.js +1 -1
  5. package/dist/lib/errors.js +1 -1
  6. package/dist/lib/instanceProviders.js +1 -0
  7. package/dist/lib/ldapActions.js +1 -1
  8. package/dist/plugins/auth/openidconnect.js +1 -1
  9. package/dist/plugins/configApi.js +1 -1
  10. package/dist/plugins/ldap/groups.js +1 -1
  11. package/dist/plugins/ldap/trash.js +1 -1
  12. package/dist/plugins/scim/filter.js +1 -1
  13. package/dist/plugins/scim/groups.js +1 -1
  14. package/dist/plugins/scim/mapping.js +1 -1
  15. package/dist/plugins/scim/patch.js +1 -1
  16. package/dist/plugins/scim/users.js +1 -1
  17. package/dist/plugins/twake/groups.js +1 -0
  18. package/dist/plugins/twake/instances.js +1 -0
  19. package/dist/plugins/twake/lifecycleAttributes.js +1 -0
  20. package/dist/plugins/twake/lifecycleEvents.js +1 -0
  21. package/dist/plugins/twake/tombstone.js +1 -0
  22. package/dist/src/abstract/ldapFlat.d.ts +34 -6
  23. package/dist/src/abstract/plugin.d.ts +7 -4
  24. package/dist/src/config/args.d.ts +60 -0
  25. package/dist/src/hooks.d.ts +2 -0
  26. package/dist/src/lib/authz/composition.d.ts +1 -1
  27. package/dist/src/lib/errors.d.ts +3 -0
  28. package/dist/src/lib/instanceProviders.d.ts +88 -0
  29. package/dist/src/lib/ldapActions.d.ts +10 -2
  30. package/dist/src/plugins/auth/openidconnect.d.ts +39 -0
  31. package/dist/src/plugins/ldap/groups.d.ts +5 -0
  32. package/dist/src/plugins/scim/filter.d.ts +2 -1
  33. package/dist/src/plugins/scim/groups.d.ts +1 -0
  34. package/dist/src/plugins/scim/mapping.d.ts +22 -8
  35. package/dist/src/plugins/scim/patch.d.ts +9 -2
  36. package/dist/src/plugins/twake/groups.d.ts +89 -0
  37. package/dist/src/plugins/twake/instances.d.ts +102 -0
  38. package/dist/src/plugins/twake/lifecycleAttributes.d.ts +29 -0
  39. package/dist/src/plugins/twake/lifecycleEvents.d.ts +62 -0
  40. package/dist/src/plugins/twake/tombstone.d.ts +86 -0
  41. package/docs/client-development/api/rest-api.md +34 -2
  42. package/docs/plugin-development/hooks.md +24 -0
  43. package/docs/usage/configuration.md +97 -1
  44. package/docs/usage/plugins/README.md +10 -6
  45. package/docs/usage/plugins/auth/oidc.md +46 -0
  46. package/docs/usage/plugins/integrations/README.md +12 -4
  47. package/docs/usage/plugins/integrations/groups.md +225 -0
  48. package/docs/usage/plugins/integrations/instances.md +150 -0
  49. package/docs/usage/plugins/integrations/lifecycle-events.md +233 -0
  50. package/docs/usage/plugins/integrations/scim.md +55 -34
  51. package/docs/usage/plugins/integrations/tombstone.md +107 -0
  52. package/docs/usage/plugins/ldap/flat-generic.md +38 -2
  53. package/docs/usage/plugins/ldap/trash.md +4 -4
  54. package/docs/usage/upgrading.md +114 -0
  55. package/package.json +25 -1
  56. package/static/schemas/twake/organizationGroups.json +32 -0
@@ -4,6 +4,120 @@ What to check before deploying, newest first. Only releases that need a
4
4
  decision or a configuration change appear here; see the
5
5
  [CHANGELOG](../../CHANGELOG.md) for everything else.
6
6
 
7
+ ## To 0.13.0
8
+
9
+ ### An OpenID Connect session ends with its access token
10
+
11
+ **Who is affected:** a deployment loading `core/auth/openidconnect`.
12
+
13
+ A session used to last as long as its cookie, a day of inactivity and a week
14
+ at most. It now ends when its access token expires, unless the provider gave
15
+ a refresh token to renew it: a browser then goes back through the provider,
16
+ silently while the provider's own session lasts, and a client asking for
17
+ JSON only (`Accept: application/json`) is answered `401`.
18
+
19
+ To keep sessions going without that round trip, have the provider issue
20
+ refresh tokens to the client
21
+ ([details](plugins/auth/oidc.md#session-lifetime)).
22
+
23
+ ### SCIM `active` reads the lock value
24
+
25
+ **Who is affected:** a SCIM client of a directory with ppolicy lockouts. An
26
+ account locked out after failed binds now reads `active: true`, is left out
27
+ of `active eq false`, and keeps its lockout on `"active": true`; only the
28
+ configured lock value reads as inactive. See
29
+ [the SCIM plugin documentation](plugins/integrations/scim.md#deactivating-an-account-active).
30
+
31
+ ### twake/instances links an organization before its members
32
+
33
+ **Who is affected:** a deployment running 0.12.0 with
34
+ `--twake-instance-provider cloudery` and `--twake-instance-organization-base`.
35
+
36
+ 0.12.0 sent each member's `user.created` at once and marked the member, while
37
+ the Cloudery refused it because the organization was not linked to its
38
+ instance. The plugin now links the organization and holds its members until
39
+ then, but only releases members that are not marked, so those already marked
40
+ are not sent again on their own.
41
+
42
+ To repair an organization, clear `--twake-instance-sent-attribute` on its
43
+ marked members, then replay its `workplace.created` or call
44
+ `ensureOrganization` for it ([details](plugins/integrations/instances.md#organizations)).
45
+
46
+ ### Trash watched bases are separated by `;`
47
+
48
+ **Who is affected:** a deployment loading `core/ldap/trash` with
49
+ `--trash-watched-bases` set.
50
+
51
+ The list was split on commas, so a DN such as `ou=users,dc=example,dc=com`
52
+ became the suffixes `ou=users`, `dc=example` and `dc=com`, and the trash
53
+ caught deletes in every branch under `dc=com`. Each base is now a whole DN,
54
+ and bases are separated by `;`:
55
+ `ou=users,dc=example,dc=com;ou=groups,dc=example,dc=com`. A single DN needs
56
+ no change. A list of full DNs joined by commas, such as
57
+ `ou=users,dc=example,dc=com,ou=groups,dc=example,dc=com`, or a list of RDNs,
58
+ such as `ou=users,ou=groups`, now reads as one DN that no entry sits under,
59
+ so the trash catches nothing and deletes there are permanent: rewrite it with
60
+ `;`, each branch as its full DN. The server logs a warning at startup for a
61
+ watched base that is not one DN under `--ldap-base`.
62
+
63
+ ## To 0.12.0
64
+
65
+ ### twake/instances replaces cozyProvision and clouderyProvision
66
+
67
+ **Who is affected:** a deployment loading `core/twake/cozyProvision` or
68
+ `core/twake/clouderyProvision`.
69
+
70
+ Replace the plugin with `core/twake/instances`
71
+ ([doc](plugins/integrations/instances.md)); the server refuses to start with
72
+ both. Its options are its own. From cozyProvision, with
73
+ `--twake-instance-provider cozy-stack` and `--twake-instance-dn` set to the
74
+ accounts' branch:
75
+
76
+ - `--cozy-admin-url` → `--twake-instance-cozy-url`
77
+ - `--cozy-admin-user` → `--twake-instance-cozy-user`
78
+ - `--cozy-admin-passphrase` → `--twake-instance-cozy-passphrase`
79
+ - `--cozy-org-domain` → `--twake-instance-cozy-domain` (the instances'
80
+ domain) and `--twake-instance-cozy-org-domain`
81
+ - `--cozy-org-id` → `--twake-instance-cozy-org-id`
82
+ - `--cozy-context-name` → `--twake-instance-cozy-context`
83
+ - `--cozy-apps` → `--twake-instance-cozy-apps`
84
+ - `--cozy-default-locale` → `--twake-instance-locale`
85
+ - `--cozy-auth-exchange` → `--twake-instance-auth-exchange`
86
+ - `--cozy-b2b-exchange` → `--twake-instance-b2b-exchange`
87
+ - `--cozy-user-created-routing-key` → `--twake-instance-user-created-key`
88
+
89
+ From clouderyProvision, with `--twake-instance-provider cloudery`:
90
+
91
+ - `--cloudery-manager-url` → `--twake-instance-cloudery-url`
92
+ - `--cloudery-manager-token` → `--twake-instance-cloudery-token`
93
+ - `--cloudery-offer` → `--twake-instance-cloudery-offer`
94
+ - `--cloudery-domain` → `--twake-instance-cloudery-domain`
95
+ - `--cloudery-default-locale` → `--twake-instance-locale`
96
+ - `--cloudery-fqdn-attribute` → `--twake-instance-fqdn-attribute`
97
+ - `--cloudery-user-branch` → `--twake-instance-dn`, with an `org` group for
98
+ the organization id; `--twake-instance-id '{uid}{org}'` keeps the slugs
99
+
100
+ What no longer happens:
101
+
102
+ - An account gets its instance on any add under `--twake-instance-dn`, not
103
+ only a SCIM create.
104
+ - `domain.user.deleted` is not published, and `--cozy-user-deleted-routing-key`
105
+ has no plugin to read it. With the Cloudery, deleting an account no longer
106
+ deletes its instance; cozy-stack instances still are.
107
+ - clouderyProvision's writes on a SCIM create are gone:
108
+ `twakeOrganizationId`, `twakeOrganizationRole`, `twakeInvited`,
109
+ `twakePhones`, `cn` set to the userName, and the lower-casing of the SCIM
110
+ `userName`. The `x-cloudery-org-*` headers are not read; the organization
111
+ comes from the DN. `--cloudery-org-*`, `--cloudery-phones-attribute`,
112
+ `--cloudery-invited-attribute` and the workflow polling options are gone:
113
+ the address arrives with `workplace.created` instead.
114
+ - With cozy-stack, the instance address drops the uid's dots and lower-cases
115
+ it, as the Cloudery's slugs do: an account whose uid holds a dot or a
116
+ capital gets a different address than cozyProvision gave it. Its OIDC id
117
+ is still the uid.
118
+
119
+ `user.created` keeps its fields, `twakeId` still being the account's uid.
120
+
7
121
  ## To 0.11.0
8
122
 
9
123
  ### Group reads are judged
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ldap-rest",
3
- "version": "0.11.2",
3
+ "version": "0.13.0",
4
4
  "description": "Light directory manager",
5
5
  "keywords": [
6
6
  "Identity-Manager"
@@ -268,10 +268,30 @@
268
268
  "types": "./dist/src/plugins/twake/drive.d.ts",
269
269
  "import": "./dist/plugins/twake/drive.js"
270
270
  },
271
+ "./plugin-twake-groups": {
272
+ "types": "./dist/src/plugins/twake/groups.d.ts",
273
+ "import": "./dist/plugins/twake/groups.js"
274
+ },
275
+ "./plugin-twake-instances": {
276
+ "types": "./dist/src/plugins/twake/instances.d.ts",
277
+ "import": "./dist/plugins/twake/instances.js"
278
+ },
271
279
  "./plugin-twake-james": {
272
280
  "types": "./dist/src/plugins/twake/james.d.ts",
273
281
  "import": "./dist/plugins/twake/james.js"
274
282
  },
283
+ "./plugin-twake-lifecycleattributes": {
284
+ "types": "./dist/src/plugins/twake/lifecycleAttributes.d.ts",
285
+ "import": "./dist/plugins/twake/lifecycleAttributes.js"
286
+ },
287
+ "./plugin-twake-lifecycleevents": {
288
+ "types": "./dist/src/plugins/twake/lifecycleEvents.d.ts",
289
+ "import": "./dist/plugins/twake/lifecycleEvents.js"
290
+ },
291
+ "./plugin-twake-tombstone": {
292
+ "types": "./dist/src/plugins/twake/tombstone.d.ts",
293
+ "import": "./dist/plugins/twake/tombstone.js"
294
+ },
275
295
  "./plugin-weblogs": {
276
296
  "types": "./dist/src/plugins/weblogs.d.ts",
277
297
  "import": "./dist/plugins/weblogs.js"
@@ -644,6 +664,10 @@
644
664
  "import": "./static/schemas/twake/nomenclature/twakeTitle.json",
645
665
  "require": "./static/schemas/twake/nomenclature/twakeTitle.json"
646
666
  },
667
+ "./schema-twake-organizationgroups": {
668
+ "import": "./static/schemas/twake/organizationGroups.json",
669
+ "require": "./static/schemas/twake/organizationGroups.json"
670
+ },
647
671
  "./schema-twake-organizations": {
648
672
  "import": "./static/schemas/twake/organizations.json",
649
673
  "require": "./static/schemas/twake/organizations.json"
@@ -0,0 +1,32 @@
1
+ {
2
+ "strict": true,
3
+ "attributes": {
4
+ "objectClass": {
5
+ "type": "array",
6
+ "items": {
7
+ "type": "string",
8
+ "test": "^[a-zA-Z][a-zA-Z0-9-]*$"
9
+ },
10
+ "default": ["top", "groupOfNames", "twakeGroup"],
11
+ "required": true,
12
+ "fixed": true
13
+ },
14
+ "cn": {
15
+ "type": "string",
16
+ "test": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
17
+ "required": true
18
+ },
19
+ "member": {
20
+ "type": "array",
21
+ "items": {
22
+ "type": "string",
23
+ "test": "^[a-zA-Z]+=.*,__LDAP_BASE__$"
24
+ },
25
+ "required": false
26
+ },
27
+ "description": {
28
+ "type": "string",
29
+ "required": false
30
+ }
31
+ }
32
+ }