scimgateway 4.1.4 → 4.1.6
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/README.md +27 -14
- package/lib/scimgateway.js +1 -0
- package/lib/utils.js +6 -1
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SCIM Gateway
|
|
2
2
|
|
|
3
|
-
[](https://app.travis-ci.com/github/jelhub/scimgateway) [](https://www.npmjs.com/package/scimgateway)[](https://app.travis-ci.com/github/jelhub/scimgateway) [](https://www.npmjs.com/package/scimgateway)[](https://www.npmjs.com/package/scimgateway) [](https://elshaug.xyz/docs/scimgateway#disqus_thread) [](https://github.com/jelhub/scimgateway)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
Author: Jarle Elshaug
|
|
@@ -16,8 +16,9 @@ Validated through IdP's:
|
|
|
16
16
|
|
|
17
17
|
Latest news:
|
|
18
18
|
|
|
19
|
+
- **BREAKING**: [SCIM Stream](https://elshaug.xyz/docs/scim-stream) is the modern way of user provisioning letting clients subscribe to messages instead of traditional IGA top-down provisioning. SCIM Stream includes **SCIM Stream Gateway**, the next generation SCIM Gateway that supports message subscription and automated provisioning
|
|
19
20
|
- Supporting OAuth Client Credentials authentication
|
|
20
|
-
- Major version v4.0.0. getUsers() and getGroups() replacing some deprecated methods. No limitations on filtering/sorting. Admin user access can be
|
|
21
|
+
- Major version v4.0.0. getUsers() and getGroups() replacing some deprecated methods. No limitations on filtering/sorting. Admin user access can be linked to specific baseEntities. New MongoDB plugin
|
|
21
22
|
- ipAllowList for restricting access to allowlisted IP addresses or subnets e.g. Azure AD IP-range
|
|
22
23
|
- General LDAP plugin configured for Active Directory
|
|
23
24
|
- [PlugSSO](https://elshaug.xyz/docs/plugsso) using SCIM Gateway
|
|
@@ -39,7 +40,7 @@ Using Identity Manager, we could setup one or more endpoints of type SCIM pointi
|
|
|
39
40
|
|
|
40
41
|

|
|
41
42
|
|
|
42
|
-
SCIM Gateway is based on the popular asynchronous event driven framework [Node.js](https://nodejs.dev/) using JavaScript. It is firewall friendly using REST webservices. Runs on almost all operating systems, and may load balance between hosts (horizontal) and cpu's (vertical).
|
|
43
|
+
SCIM Gateway is based on the popular asynchronous event driven framework [Node.js](https://nodejs.dev/) using JavaScript. It is cloud and firewall friendly using REST webservices. Runs on almost all operating systems, and may load balance between hosts (horizontal) and cpu's (vertical).
|
|
43
44
|
|
|
44
45
|
**Following example plugins are included:**
|
|
45
46
|
|
|
@@ -52,18 +53,18 @@ Setting `{"persistence": true}` gives persistence file store (no test users)
|
|
|
52
53
|
Example of a fully functional SCIM Gateway plugin
|
|
53
54
|
|
|
54
55
|
* **MongoDB** (NoSQL Document-Oriented Database)
|
|
55
|
-
Same as plugin "Loki" but using MongoDB
|
|
56
|
+
Same as plugin "Loki", but using external MongoDB
|
|
56
57
|
Shows how to implement a highly configurable multi tenant or multi endpoint solution through `baseEntity` in URL
|
|
57
58
|
|
|
58
59
|
* **SCIM** (REST Webservice)
|
|
59
|
-
Demonstrates user provisioning towards
|
|
60
|
+
Demonstrates user provisioning towards REST-Based endpoint (type SCIM)
|
|
60
61
|
Using plugin "Loki" as SCIM endpoint
|
|
61
62
|
Can be used as SCIM version-gateway e.g. 1.1=>2.0 or 2.0=>1.1
|
|
62
63
|
Can be used to chain several SCIM Gateway's
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
* **Forwardinc** (SOAP Webservice)
|
|
66
|
-
Demonstrates provisioning towards SOAP-Based endpoint
|
|
67
|
+
Demonstrates user provisioning towards SOAP-Based endpoint
|
|
67
68
|
Using endpoint Forwardinc that comes with Broadcom/CA IM SDK (SDKWS) - [wiki.ca.com](https://docops.ca.com/ca-identity-manager/12-6-8/EN/programming/connector-programming-reference/sdk-sample-connectors/sdkws-sdk-web-services-connector/sdkws-sample-connector-build-requirements "wiki.ca.com")
|
|
68
69
|
Shows how to implement a highly configurable multi tenant or multi endpoint solution through `baseEntity` in URL
|
|
69
70
|
|
|
@@ -103,7 +104,7 @@ Node.js is a prerequisite and have to be installed on the server.
|
|
|
103
104
|
#### Install SCIM Gateway
|
|
104
105
|
|
|
105
106
|
Open a command window (run as administrator)
|
|
106
|
-
Create your own package directory e.g.
|
|
107
|
+
Create your own package directory e.g. c:\my-scimgateway and install SCIM Gateway within this package.
|
|
107
108
|
|
|
108
109
|
mkdir c:\my-scimgateway
|
|
109
110
|
cd c:\my-scimgateway
|
|
@@ -127,22 +128,22 @@ If internet connection is blocked, we could install on another machine and copy
|
|
|
127
128
|
=> Health check with a "hello" response
|
|
128
129
|
|
|
129
130
|
http://localhost:8880/Users
|
|
130
|
-
http://localhost:8880/Groups
|
|
131
|
-
or
|
|
132
|
-
http://localhost:8880/Users?attributes=userName
|
|
133
|
-
http://localhost:8880/Groups?attributes=displayName
|
|
131
|
+
http://localhost:8880/Groups
|
|
134
132
|
=> Logon using gwadmin/password and two users and groups should be listed
|
|
135
133
|
|
|
136
134
|
http://localhost:8880/Users/bjensen
|
|
137
135
|
http://localhost:8880/Groups/Admins
|
|
136
|
+
or
|
|
137
|
+
http://localhost:8880/Users?filter=userName eq "bjensen"
|
|
138
|
+
http://localhost:8880/Groups?filter=displayName eq "Admins"
|
|
138
139
|
=> Lists all attributes for specified user/group
|
|
139
140
|
|
|
140
141
|
http://localhost:8880/Groups?filter=displayName eq "Admins"&excludedAttributes=members
|
|
142
|
+
http://localhost:8880/Groups?filter=members.value eq "bjensen"&attributes=id,displayName,members.value
|
|
141
143
|
http://localhost:8880/Users?filter=userName eq "bjensen"&attributes=userName,id,name.givenName
|
|
142
144
|
http://localhost:8880/Users?filter=meta.created ge "2010-01-01T00:00:00Z"&attributes=userName,name.familyName,meta.created
|
|
143
145
|
http://localhost:8880/Users?filter=emails.value co "@example.com"&attributes=userName,name.familyName,emails&sortBy=name.familyName&sortOrder=descending
|
|
144
|
-
=> Filtering examples
|
|
145
|
-
|
|
146
|
+
=> Filtering and attribute examples
|
|
146
147
|
|
|
147
148
|
"Ctrl + c" to stop the SCIM Gateway
|
|
148
149
|
|
|
@@ -171,7 +172,7 @@ Upgrade to latest minor version:
|
|
|
171
172
|
cd c:\my-scimgateway
|
|
172
173
|
npm install scimgateway
|
|
173
174
|
|
|
174
|
-
Note, always backup/copy
|
|
175
|
+
Note, always backup/copy c:\\my-scimgateway before upgrading. Custom plugins and corresponding configuration files will not be affected.
|
|
175
176
|
|
|
176
177
|
To force a major upgrade (version x.\*.\* => y.\*.\*) that will brake compability with any existing custom plugins, we have to include the `@latest` suffix in the install command: `npm install scimgateway@latest`
|
|
177
178
|
|
|
@@ -1142,6 +1143,18 @@ MIT © [Jarle Elshaug](https://www.elshaug.xyz)
|
|
|
1142
1143
|
|
|
1143
1144
|
## Change log
|
|
1144
1145
|
|
|
1146
|
+
### v4.1.6
|
|
1147
|
+
[Added]
|
|
1148
|
+
- Dependencies bump
|
|
1149
|
+
|
|
1150
|
+
### v4.1.5
|
|
1151
|
+
[Added]
|
|
1152
|
+
|
|
1153
|
+
Announcing some SCIM Gateway related news:
|
|
1154
|
+
|
|
1155
|
+
- [SCIM Stream](https://elshaug.xyz/docs/scim-stream) is the modern way of user provisioning letting clients subscribe to messages instead of traditional IGA top-down provisioning. SCIM Stream includes **SCIM Stream Gateway**, the next generation SCIM Gateway that supports message subscription and automated provisioning
|
|
1156
|
+
|
|
1157
|
+
|
|
1145
1158
|
### v4.1.4
|
|
1146
1159
|
[Fixed]
|
|
1147
1160
|
|
package/lib/scimgateway.js
CHANGED
|
@@ -1307,6 +1307,7 @@ const ScimGateway = function () {
|
|
|
1307
1307
|
delete newObj.externalId
|
|
1308
1308
|
delete newObj.groups // do not support "group member of users"
|
|
1309
1309
|
delete newObj.schemas
|
|
1310
|
+
delete newObj.meta
|
|
1310
1311
|
if (handle.getMethod === handler.groups.getMethod) delete newObj.displayName
|
|
1311
1312
|
|
|
1312
1313
|
let [scimdata, err] = ScimGateway.prototype.convertedScim(newObj)
|
package/lib/utils.js
CHANGED
|
@@ -190,7 +190,7 @@ module.exports.copyObj = (o) => { // deep copy/clone faster than JSON.parse(JSON
|
|
|
190
190
|
return output
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
|
|
193
|
+
const extendObj = (obj, src) => {
|
|
194
194
|
Object.keys(src).forEach((key) => {
|
|
195
195
|
if (typeof src[key] === 'object' && src[key] != null) {
|
|
196
196
|
if (typeof obj[key] === 'undefined') obj[key] = src[key]
|
|
@@ -222,6 +222,11 @@ module.exports.extendObj = (obj, src) => { // copy src content into obj
|
|
|
222
222
|
return obj
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
+
module.exports.extendObj = (obj, src) => { // copy src content into obj
|
|
226
|
+
if (typeof src !== 'object' || Array.isArray(src)) return obj
|
|
227
|
+
return extendObj(obj, src)
|
|
228
|
+
}
|
|
229
|
+
|
|
225
230
|
module.exports.stripObj = (obj, attributes, excludedAttributes) => { // strip and return a new object according to attributes or excludedAttributes - comma separated dot object list
|
|
226
231
|
if (!attributes && !excludedAttributes) return obj
|
|
227
232
|
if (!obj || typeof obj !== 'object') return obj
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scimgateway",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.6",
|
|
4
4
|
"description": "Using SCIM protocol as a gateway for user provisioning to other endpoints",
|
|
5
5
|
"author": "Jarle Elshaug <jarle.elshaug@gmail.com> (https://elshaug.xyz)",
|
|
6
6
|
"homepage": "https://elshaug.xyz",
|
|
@@ -34,22 +34,22 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"callsite": "^1.0.0",
|
|
36
36
|
"dot-object": "^2.1.4",
|
|
37
|
-
"https-proxy-agent": "^5.0.
|
|
37
|
+
"https-proxy-agent": "^5.0.1",
|
|
38
38
|
"is-in-subnet": "^4.0.1",
|
|
39
39
|
"jsonwebtoken": "^8.5.1",
|
|
40
40
|
"koa": "^2.13.4",
|
|
41
41
|
"koa-bodyparser": "^4.3.0",
|
|
42
|
-
"koa-router": "^
|
|
43
|
-
"ldapjs": "^2.3.
|
|
42
|
+
"koa-router": "^12.0.0",
|
|
43
|
+
"ldapjs": "^2.3.3",
|
|
44
44
|
"lokijs": "^1.5.12",
|
|
45
|
-
"mongodb": "^4.
|
|
45
|
+
"mongodb": "^4.10.0",
|
|
46
46
|
"node-machine-id": "1.1.9",
|
|
47
|
-
"nodemailer": "^6.7.
|
|
48
|
-
"passport": "^0.
|
|
49
|
-
"passport-azure-ad": "^4.3.
|
|
50
|
-
"soap": "^0.
|
|
51
|
-
"tedious": "^
|
|
52
|
-
"winston": "^3.
|
|
47
|
+
"nodemailer": "^6.7.8",
|
|
48
|
+
"passport": "^0.6.0",
|
|
49
|
+
"passport-azure-ad": "^4.3.4",
|
|
50
|
+
"soap": "^0.45.0",
|
|
51
|
+
"tedious": "^15.1.0",
|
|
52
|
+
"winston": "^3.8.2"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"chai": "^4.2.0",
|