scimgateway 5.0.5 → 5.0.7
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 +170 -58
- package/config/docker/dbinit/init.sql +43 -0
- package/config/docker/docker-compose-mssql.yml +58 -0
- package/config/plugin-api.json +12 -12
- package/config/plugin-entra-id.json +49 -12
- package/config/plugin-ldap.json +13 -13
- package/config/plugin-loki.json +12 -12
- package/config/plugin-mongodb.json +13 -13
- package/config/plugin-mssql.json +15 -15
- package/config/plugin-saphana.json +13 -13
- package/config/plugin-scim.json +12 -12
- package/config/plugin-soap.json +12 -12
- package/lib/helper-rest.ts +26 -20
- package/lib/logger.ts +1 -3
- package/lib/plugin-mssql.ts +245 -155
- package/lib/scimgateway.ts +282 -49
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Validated through IdP's:
|
|
|
13
13
|
- Okta
|
|
14
14
|
- Omada
|
|
15
15
|
- SailPoint/IdentityNow
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
Latest news:
|
|
18
18
|
|
|
19
19
|
- Major version **v5.0.0** marks a shift to native TypeScript support and prioritizes [Bun](https://bun.sh/) over Node.js. This upgrade requires some modifications to existing plugins.
|
|
@@ -208,7 +208,6 @@ Below shows an example of config\plugin-saphana.json
|
|
|
208
208
|
"scimgateway": {
|
|
209
209
|
"port": 8884,
|
|
210
210
|
"localhostonly": false,
|
|
211
|
-
"payloadSize": null,
|
|
212
211
|
"scim": {
|
|
213
212
|
"version": "2.0",
|
|
214
213
|
"skipTypeConvert" : false,
|
|
@@ -281,18 +280,19 @@ Below shows an example of config\plugin-saphana.json
|
|
|
281
280
|
}
|
|
282
281
|
},
|
|
283
282
|
"ipAllowList": [],
|
|
284
|
-
"
|
|
285
|
-
"
|
|
283
|
+
"email": {
|
|
284
|
+
"auth": {
|
|
285
|
+
"type": "oauth",
|
|
286
|
+
"options": {
|
|
287
|
+
"tenantIdGUID": null,
|
|
288
|
+
"clientId": null,
|
|
289
|
+
"clientSecret": null
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
"emailOnError": {
|
|
286
293
|
"enabled": false,
|
|
287
|
-
"
|
|
288
|
-
"
|
|
289
|
-
"proxy": null,
|
|
290
|
-
"authenticate": true,
|
|
291
|
-
"username": null,
|
|
292
|
-
"password": null,
|
|
293
|
-
"sendInterval": 15,
|
|
294
|
-
"to": null,
|
|
295
|
-
"cc": null
|
|
294
|
+
"from": null,
|
|
295
|
+
"to": null
|
|
296
296
|
}
|
|
297
297
|
},
|
|
298
298
|
"stream": {
|
|
@@ -349,15 +349,15 @@ Definitions in `scimgateway` object have fixed attributes, but values can be mod
|
|
|
349
349
|
|
|
350
350
|
Definitions in `endpoint` object are customized according to our plugin code. Plugin typically need this information for communicating with endpoint
|
|
351
351
|
|
|
352
|
-
- **port** - Gateway will listen on this port number. Clients (e.g. Provisioning Server) will be using this port number for communicating with the gateway
|
|
352
|
+
- **port** - Gateway will listen on this port number. Clients (e.g. Provisioning Server) will be using this port number for communicating with the gateway
|
|
353
353
|
|
|
354
|
-
- **localhostonly** - true or false. False means gateway accepts incoming requests from all clients. True means traffic from only localhost (127.0.0.1) is accepted.
|
|
354
|
+
- **localhostonly** - true or false. False means gateway accepts incoming requests from all clients. True means traffic from only localhost (127.0.0.1) is accepted.
|
|
355
355
|
|
|
356
|
-
- **
|
|
356
|
+
- **idleTimeout** - default 120, sets the the number of seconds to wait before timing out a connection due to inactivity
|
|
357
357
|
|
|
358
|
-
- **scim.version** - "1.1" or "2.0". Default is "2.0".
|
|
358
|
+
- **scim.version** - "1.1" or "2.0". Default is "2.0".
|
|
359
359
|
|
|
360
|
-
- **scim.skipTypeConvert** - true or false, default false. Multivalue attributes supporting types e.g. emails, phoneNumbers, ims, photos, addresses, entitlements and x509Certificates (but not roles, groups and members) will be become "type converted objects" when sent to modifyUser and createUser. This for simplicity of checking attributes included and also for the endpointMapper method (used by plugin-ldap and plugin-entra-id), e.g.:
|
|
360
|
+
- **scim.skipTypeConvert** - true or false, default false. Multivalue attributes supporting types e.g. emails, phoneNumbers, ims, photos, addresses, entitlements and x509Certificates (but not roles, groups and members) will be become "type converted objects" when sent to modifyUser and createUser. This for simplicity of checking attributes included and also for the endpointMapper method (used by plugin-ldap and plugin-entra-id), e.g.:
|
|
361
361
|
|
|
362
362
|
"emails": {
|
|
363
363
|
"work": {"value": "jsmith@example.com", "type": "work"},
|
|
@@ -375,34 +375,34 @@ Definitions in `endpoint` object are customized according to our plugin code. Pl
|
|
|
375
375
|
|
|
376
376
|
- **scim.skipMetaLocation** - true or false, default false. If set to true, `meta.location` which contains protocol and hostname from request-url, will be excluded from response e.g. `"{...,meta":{"location":"https://my-company.com/<...>"}}`. If using reverse proxy and not including headers `X-Forwarded-Proto` and `X-Forwarded-Host`, originator will be the proxy and we might not want to expose internal protocol and hostname being used by the proxy request.
|
|
377
377
|
|
|
378
|
-
- **scim.
|
|
378
|
+
- **scim.groupMemberOfUser** - true or false, default false. If body contains groups and groupMemberOfUser=true, groups attribute will remain at user object (groups are member of user) instead of default user member of groups that will use modifyGroup method for maintaining group members.
|
|
379
379
|
|
|
380
380
|
- **scim.usePutSoftSync** - true or false, default false. `PUT /Users/bjensen` will replace the user bjensen with body content. If set to `true`, only PUT body content will be replaced. Any additional existing user attributes and groups supported by plugin will remain as-is.
|
|
381
381
|
|
|
382
|
-
- **log.loglevel.file** - off, error, info, or debug. Output to plugin-logfile e.g. `logs\plugin-saphana.log`
|
|
382
|
+
- **log.loglevel.file** - off, error, info, or debug. Output to plugin-logfile e.g. `logs\plugin-saphana.log`
|
|
383
383
|
|
|
384
|
-
- **log.loglevel.console** - off, error, info, or debug. Output to stdout and errors to stderr.
|
|
384
|
+
- **log.loglevel.console** - off, error, info, or debug. Output to stdout and errors to stderr.
|
|
385
385
|
|
|
386
|
-
- **log.customMasking** - array of attributes to be masked e.g. `"customMasking": ["SSN", "weight"]`. By default SCIM Gateway includes masking of some standard attributes like password.
|
|
386
|
+
- **log.customMasking** - array of attributes to be masked e.g. `"customMasking": ["SSN", "weight"]`. By default SCIM Gateway includes masking of some standard attributes like password.
|
|
387
387
|
|
|
388
388
|
- **auth** - Contains one or more authentication/authorization methods used by clients for accessing gateway - may also include:
|
|
389
389
|
- **auth.xx.readOnly** - true/false, true gives read only access - only allowing `GET` requests for corresponding admin user
|
|
390
390
|
- **auth.xx.baseEntities** - array containing one or more `baseEntity` allowed for this user e.g. ["client-a"] - empty array allowing all.
|
|
391
|
-
**Methods are disabled by setting corresponding admin user to null or remove methods not used**
|
|
391
|
+
**Methods are disabled by setting corresponding admin user to null or remove methods not used**
|
|
392
392
|
|
|
393
|
-
- **auth.basic** - Array of one ore more basic authentication objects - Basic Authentication with **username**/**password**. Note, we set a clear text password that will become encrypted when gateway is started.
|
|
393
|
+
- **auth.basic** - Array of one ore more basic authentication objects - Basic Authentication with **username**/**password**. Note, we set a clear text password that will become encrypted when gateway is started.
|
|
394
394
|
|
|
395
|
-
- **auth.bearerToken** - Array of one or more bearer token objects - Shared token/secret (supported by Entra ID). Clear text value will become encrypted when gateway is started.
|
|
395
|
+
- **auth.bearerToken** - Array of one or more bearer token objects - Shared token/secret (supported by Entra ID). Clear text value will become encrypted when gateway is started.
|
|
396
396
|
|
|
397
|
-
- **auth.bearerJwtAzure** - Array of one or more JWT used by Azure SyncFabric. **tenantIdGUID** must be set to Entra ID Tenant ID.
|
|
397
|
+
- **auth.bearerJwtAzure** - Array of one or more JWT used by Azure SyncFabric. **tenantIdGUID** must be set to Entra ID Tenant ID.
|
|
398
398
|
|
|
399
|
-
- **auth.bearerJwt** - Array of one or more standard JWT objects. Using **secret** or **publicKey** for signature verification. publicKey should be set to the filename of public key or certificate pem-file located in `<package-root>\config\certs` or absolute path being used. Clear text secret will become encrypted when gateway is started. **options.issuer** is mandatory. Other options may also be included according to jsonwebtoken npm package definition.
|
|
399
|
+
- **auth.bearerJwt** - Array of one or more standard JWT objects. Using **secret** or **publicKey** for signature verification. publicKey should be set to the filename of public key or certificate pem-file located in `<package-root>\config\certs` or absolute path being used. Clear text secret will become encrypted when gateway is started. **options.issuer** is mandatory. Other options may also be included according to jsonwebtoken npm package definition.
|
|
400
400
|
|
|
401
|
-
- **auth.bearerOAuth** - Array of one or more Client Credentials OAuth configuration objects. **`client_id`** and **`client_secret`** are mandatory. client_secret value will become encrypted when gateway is started. OAuth token request url is **/oauth/token** e.g. http://localhost:8880/oauth/token
|
|
401
|
+
- **auth.bearerOAuth** - Array of one or more Client Credentials OAuth configuration objects. **`client_id`** and **`client_secret`** are mandatory. client_secret value will become encrypted when gateway is started. OAuth token request url is **/oauth/token** e.g. http://localhost:8880/oauth/token
|
|
402
402
|
|
|
403
|
-
- **auth.passThrough** - Setting **auth.passThrough.enabled=true** will bypass SCIM Gateway authentication. Gateway will instead pass ctx containing authentication header to the plugin. Plugin could then use this information for endpoint authentication and we don't have any password/token stored at the gateway. Note, this also requires plugin binary having `scimgateway.authPassThroughAllowed = true` and endpoint logic for handling/passing ctx.request.header.authorization
|
|
403
|
+
- **auth.passThrough** - Setting **auth.passThrough.enabled=true** will bypass SCIM Gateway authentication. Gateway will instead pass ctx containing authentication header to the plugin. Plugin could then use this information for endpoint authentication and we don't have any password/token stored at the gateway. Note, this also requires plugin binary having `scimgateway.authPassThroughAllowed = true` and endpoint logic for handling/passing ctx.request.header.authorization
|
|
404
404
|
|
|
405
|
-
- **certificate** - If not using TLS certificate, set "key", "cert" and "ca" to **null**. When using TLS, "key" and "cert" have to be defined with the filename corresponding to the primary-key and public-certificate. Both files must be located in the `<package-root>\config\certs` directory unless absolute path being defined e.g:
|
|
405
|
+
- **certificate** - If not using TLS certificate, set "key", "cert" and "ca" to **null**. When using TLS, "key" and "cert" have to be defined with the filename corresponding to the primary-key and public-certificate. Both files must be located in the `<package-root>\config\certs` directory unless absolute path being defined e.g:
|
|
406
406
|
|
|
407
407
|
"certificate": {
|
|
408
408
|
"key": "key.pem",
|
|
@@ -436,23 +436,49 @@ Definitions in `endpoint` object are customized according to our plugin code. Pl
|
|
|
436
436
|
"2603:1056:2000::/48",
|
|
437
437
|
"2603:1057:2::/48"
|
|
438
438
|
]
|
|
439
|
-
|
|
440
|
-
- **
|
|
441
|
-
- **
|
|
442
|
-
- **
|
|
443
|
-
- **
|
|
444
|
-
- **
|
|
445
|
-
- **
|
|
446
|
-
- **
|
|
447
|
-
- **
|
|
448
|
-
- **
|
|
449
|
-
- **
|
|
450
|
-
- **
|
|
439
|
+
- **email** - Contains configuration for sending email from plugin or automated error notifications emailOnError. Note, for emailOnError only the first error will be sent until sendInterval have passed
|
|
440
|
+
- **email.host** - Mailserver e.g. "smtp.gmail.com" - mandatory when not using tenantIdGUID (Microsoft)
|
|
441
|
+
- **email.port** - Port used by mailserver e.g. 587, 25 or 465 - mandatory when not using tenantIdGUID (Microsoft)
|
|
442
|
+
- **email.auth** - Authentication configuration
|
|
443
|
+
- **email.auth.type** - `basic` or `oauth`
|
|
444
|
+
- **email.auth.options** - Authentication configuration options - note, different options for type basic and oauth
|
|
445
|
+
- **email.auth.options.username (basic)** - Mail account for authentication normally same as sender of the email, e.g. "user@gmail.com"
|
|
446
|
+
- **email.auth.options.password (basic)** - Mail account password
|
|
447
|
+
- **email.auth.options.tenantIdGUID (oauth)** - Entra ID tenant id, mandatory/recommended when using Microsoft Exchange Online
|
|
448
|
+
- **email.auth.options.tokenUrl (oauth)** - Token endpoint, mandatory when not using tenantIdGUID (Microsoft Exchange Online)
|
|
449
|
+
- **email.auth.options.clientId (oauth)** - Client ID
|
|
450
|
+
- **email.auth.options.clientSecret (oauth)** - Client Secret
|
|
451
|
+
- **email.proxy** - Proxy configuration if using mailproxy
|
|
452
|
+
- **email.proxy.host** - Proxy host e.g. `http://proxy-host:1234`
|
|
453
|
+
- **email.proxy.username** - username if authentication is required
|
|
454
|
+
- **email.proxy.password** - password if authentication is required
|
|
455
|
+
- **email.emailOnError** - Contains configuration for sending error notifications by email. Note, only the first error will be sent until sendInterval have passed
|
|
456
|
+
- **email.emailOnError.enabled** - true or false, value set to true will enable email notifications
|
|
457
|
+
- **email.emailOnError.sendInterval** - Default 15. Mail notifications on error are deferred until sendInterval **minutes** have passed since the last notification.
|
|
458
|
+
- **email.emailOnError.from** - Sender email addresses e.g: "noreply@example.com", note must correspond with email.auth.options being used and mailserver configuration
|
|
459
|
+
- **email.emailOnError.to** - Comma separated list of recipients email addresses e.g: "someone@example.com"
|
|
460
|
+
- **email.emailOnError.cc** - Optional comma separated list of cc mail addresses
|
|
461
|
+
- **email.emailOnError.subject** - Optional mail subject, default `SCIM Gateway error message`
|
|
462
|
+
|
|
463
|
+
Configuration notes when using default configuration oauth and tenantIdGUID - Microsoft Exchange Online (ExO):
|
|
464
|
+
|
|
465
|
+
- Entra ID application must have application permissions "**Mail.Send**"
|
|
466
|
+
- To prevent the sending of emails from any defined mailboxes, an ExO **ApplicationAccessPolicy** must be defined through PowerShell.
|
|
467
|
+
|
|
468
|
+
First create a mail-enabled security-group that only includes those users (mailboxes) the application is allowed to send from
|
|
469
|
+
Note, "mail enabled security" group cannot be created from portal, only from admin or admin.exchange console
|
|
470
|
+
|
|
471
|
+
##Connect to Exchange
|
|
472
|
+
Install-Module -Name ExchangeOnlineManagement
|
|
473
|
+
Connect-ExchangeOnline
|
|
474
|
+
|
|
475
|
+
##Create ApplicationAccessPolicy
|
|
476
|
+
New-ApplicationAccessPolicy -AppId $AppClientID -PolicyScopeGroupId $MailEnabledSecurityGrpId -AccessRight RestrictAccess -Description "Restrict app to specific mailboxes"
|
|
451
477
|
|
|
452
478
|
- **stream** - See [SCIM Stream](https://elshaug.xyz/docs/scim-stream) for configuration details
|
|
453
479
|
|
|
454
|
-
- **endpoint** - Contains endpoint specific configuration according to our **plugin code**.
|
|
455
|
-
|
|
480
|
+
- **endpoint** - Contains endpoint specific configuration according to our **plugin code**.
|
|
481
|
+
|
|
456
482
|
#### Configuration notes
|
|
457
483
|
|
|
458
484
|
- Custom Schemas, ServiceProviderConfig and ResourceType can be used if `./lib/scimdef-v2.json or scimdef-v1.json` exists. Original scimdef-v2.json/scimdef-v1.json can be copied from node_modules/scimgateway/lib to your plugin/lib and customized.
|
|
@@ -578,8 +604,7 @@ docker-compose**
|
|
|
578
604
|
**Dockerfile** <== Main dockerfile
|
|
579
605
|
**DataDockerfile** <== Handles volume mapping
|
|
580
606
|
**docker-compose-debug.yml** <== Debugging
|
|
581
|
-
|
|
582
|
-
|
|
607
|
+
**docker-compose-mssql.yml** <== Example including MSSQL docker image
|
|
583
608
|
|
|
584
609
|
- Create a scimgateway user on your Linux VM.
|
|
585
610
|
|
|
@@ -1086,11 +1111,98 @@ MIT © [Jarle Elshaug](https://www.elshaug.xyz)
|
|
|
1086
1111
|
|
|
1087
1112
|
## Change log
|
|
1088
1113
|
|
|
1114
|
+
### v5.0.7
|
|
1115
|
+
|
|
1116
|
+
[Improved]
|
|
1117
|
+
|
|
1118
|
+
- plugin-mssql all methods now implemented, also includes docker and dbinit configuration, **thanks to [@Peter Havekes](https://github.com/phavekes) and [@mrvanes](https://github.com/mrvanes)**
|
|
1119
|
+
|
|
1120
|
+
[Fixed]
|
|
1121
|
+
|
|
1122
|
+
- mail sending option introduced in v5.0.6 did not fully support national special charcters when using Microsoft Exchange Online and html formatted email
|
|
1123
|
+
|
|
1124
|
+
### v5.0.6
|
|
1125
|
+
|
|
1126
|
+
[Improved]
|
|
1127
|
+
|
|
1128
|
+
- new configuration option: `scimgateway.idleTimeout` default 120, sets the the number of seconds to wait before timing out a connection due to inactivity
|
|
1129
|
+
- deprecated configuration option: `scimgateway.payloadSize` Bun using default maxRequestBodySize 128MB
|
|
1130
|
+
- new configuration option: `scimgateway.email` replacing legacy `scimgateway.emailOnError` (legacy still supported). Email now support oauth authentication
|
|
1131
|
+
|
|
1132
|
+
**old configuration:**
|
|
1133
|
+
|
|
1134
|
+
{
|
|
1135
|
+
"scimgateway": {
|
|
1136
|
+
...
|
|
1137
|
+
"emailOnError": {
|
|
1138
|
+
"smtp": {
|
|
1139
|
+
"enabled": false,
|
|
1140
|
+
"host": null,
|
|
1141
|
+
"port": 587,
|
|
1142
|
+
"proxy": null,
|
|
1143
|
+
"authenticate": true,
|
|
1144
|
+
"username": null,
|
|
1145
|
+
"password": null,
|
|
1146
|
+
"sendInterval": 15,
|
|
1147
|
+
"to": null,
|
|
1148
|
+
"cc": null
|
|
1149
|
+
}
|
|
1150
|
+
},
|
|
1151
|
+
...
|
|
1152
|
+
},
|
|
1153
|
+
...
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
|
|
1157
|
+
**new configuration:**
|
|
1158
|
+
Using Microsoft Exchange Online and oauth authencation which also is default and recommended by Microsoft
|
|
1159
|
+
For other mail servers and options like SMTP AUTH (basic/oauth), please see configuration description
|
|
1160
|
+
Plugin may also send mail using method scimgateway.sendMail()
|
|
1161
|
+
|
|
1162
|
+
{
|
|
1163
|
+
"scimgateway": {
|
|
1164
|
+
...
|
|
1165
|
+
"email": {
|
|
1166
|
+
"auth": {
|
|
1167
|
+
"type": "oauth",
|
|
1168
|
+
"options": {
|
|
1169
|
+
"tenantIdGUID": null,
|
|
1170
|
+
"clientId": null,
|
|
1171
|
+
"clientSecret": null
|
|
1172
|
+
}
|
|
1173
|
+
},
|
|
1174
|
+
"emailOnError": {
|
|
1175
|
+
"enabled": false,
|
|
1176
|
+
"from": null,
|
|
1177
|
+
"to": null
|
|
1178
|
+
}
|
|
1179
|
+
},
|
|
1180
|
+
...
|
|
1181
|
+
},
|
|
1182
|
+
...
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
Configuration notes when using oauth and tenantIdGUID - Microsoft Exchange Online (ExO):
|
|
1186
|
+
|
|
1187
|
+
- Entra ID application must have application permissions "**Mail.Send**"
|
|
1188
|
+
- To prevent the sending of emails from any defined mailboxes, an ExO **ApplicationAccessPolicy** must be defined through PowerShell.
|
|
1189
|
+
|
|
1190
|
+
First create a mail-enabled security-group that only includes those users (mailboxes) the application is allowed to send from
|
|
1191
|
+
Note, "mail enabled security" group cannot be created from portal, only from admin or admin.exchange console
|
|
1192
|
+
|
|
1193
|
+
##Connect to Exchange
|
|
1194
|
+
Install-Module -Name ExchangeOnlineManagement
|
|
1195
|
+
Connect-ExchangeOnline
|
|
1196
|
+
|
|
1197
|
+
##Create ApplicationAccessPolicy
|
|
1198
|
+
New-ApplicationAccessPolicy -AppId $AppClientID -PolicyScopeGroupId $MailEnabledSecurityGrpId -AccessRight RestrictAccess -Description "Restrict app to specific mailboxes"
|
|
1199
|
+
|
|
1200
|
+
|
|
1089
1201
|
### v5.0.5
|
|
1090
1202
|
|
|
1091
1203
|
[Fixed]
|
|
1092
1204
|
|
|
1093
|
-
- plugin-ldap, dn special character not correct for ascii code 128(dec)/80(hex)
|
|
1205
|
+
- plugin-ldap, dn special character not correct for ascii code 128(dec)/80(hex)
|
|
1094
1206
|
|
|
1095
1207
|
### v5.0.4
|
|
1096
1208
|
|
|
@@ -1104,7 +1216,7 @@ MIT © [Jarle Elshaug](https://www.elshaug.xyz)
|
|
|
1104
1216
|
|
|
1105
1217
|
- unauthorized connection when using configuration bearerJwtAzure
|
|
1106
1218
|
|
|
1107
|
-
[Improved]
|
|
1219
|
+
[Improved]
|
|
1108
1220
|
|
|
1109
1221
|
- minor type definition cosmetics
|
|
1110
1222
|
|
|
@@ -1553,7 +1665,7 @@ Note, obsolete - see v4.2.15 comments
|
|
|
1553
1665
|
"forceExitTimeout": 1000
|
|
1554
1666
|
}
|
|
1555
1667
|
|
|
1556
|
-
**Thanks to Kevin Osborn**
|
|
1668
|
+
**Thanks to [@Kevin Osborn](https://github.com/osbornk)**
|
|
1557
1669
|
|
|
1558
1670
|
### v4.1.15
|
|
1559
1671
|
|
|
@@ -1584,7 +1696,7 @@ Note, obsolete - see v4.2.15 comments
|
|
|
1584
1696
|
scimgateway.getUsers = async (baseEntity, getObj, attributes, ctx)
|
|
1585
1697
|
// tip, see provided example plugins
|
|
1586
1698
|
|
|
1587
|
-
**Thanks to Kevin Osborn**
|
|
1699
|
+
**Thanks to [@Kevin Osborn](https://github.com/osbornk)**
|
|
1588
1700
|
|
|
1589
1701
|
### v4.1.14
|
|
1590
1702
|
|
|
@@ -1609,7 +1721,7 @@ Note, obsolete - see v4.2.15 comments
|
|
|
1609
1721
|
[Improved]
|
|
1610
1722
|
|
|
1611
1723
|
- new plugin configuration `payloadSize`. If not defined, default "1mb" will be used. There are cases which large groups could exceed default size and you may want to increase by setting your own size e.g. "5mb"
|
|
1612
|
-
**Thanks to Sam Murphy**
|
|
1724
|
+
**Thanks to [@Sam Murphy*](https://github.com/SamMurphyDev)**
|
|
1613
1725
|
|
|
1614
1726
|
[Fixed]
|
|
1615
1727
|
|
|
@@ -1755,7 +1867,7 @@ SCIM Gateway related news:
|
|
|
1755
1867
|
}
|
|
1756
1868
|
|
|
1757
1869
|
- postinstall copying example plugins may be skipped by setting the property `scimgateway_postinstall_skip = true` in `.npmrc` or by setting environment `SCIMGATEWAY_POSTINSTALL_SKIP = true`
|
|
1758
|
-
- Secrets now also support key-value storage. The key defined in plugin configuration have syntax `process.text.<path>` where `<path>` is the file which contains raw (UTF-8) character value. E.g. configuration `endpoint.password` could have value `process.text./var/run/vault/endpoint.password`, and the corresponding file contains the secret. **Thanks to Raymond
|
|
1870
|
+
- Secrets now also support key-value storage. The key defined in plugin configuration have syntax `process.text.<path>` where `<path>` is the file which contains raw (UTF-8) character value. E.g. configuration `endpoint.password` could have value `process.text./var/run/vault/endpoint.password`, and the corresponding file contains the secret. **Thanks to [@Raymond Augé](https://github.com/rotty3000)**
|
|
1759
1871
|
|
|
1760
1872
|
|
|
1761
1873
|
### v4.0.0
|
|
@@ -1765,7 +1877,7 @@ SCIM Gateway related news:
|
|
|
1765
1877
|
- New `getGroups()` replacing deprecated exploreGroups(), getGroup() and getGroupMembers()
|
|
1766
1878
|
- Fully filter and sort support
|
|
1767
1879
|
- Authentication configuration may now include a baseEntities array containing one or more `baseEntity` allowed for corresponding admin user
|
|
1768
|
-
- New plugin-mongodb, **
|
|
1880
|
+
- New plugin-mongodb, **Thanks to [@Filipe Ribeiro](https://github.com/fribeiro-keeps) and [@Miguel Ferreira](https://github.com/jmaferreira) (KEEP SOLUTIONS)**
|
|
1769
1881
|
|
|
1770
1882
|
Note, using this major version **require existing custom plugins to be upgraded**. If you do not want to upgrade your custom plugins, the old version have to be installed using: `npm install scimgateway@3.2.11`
|
|
1771
1883
|
|
|
@@ -1873,7 +1985,7 @@ We also need to add logic from existing getGroup() and getGroupMembers()
|
|
|
1873
1985
|
[Fixed]
|
|
1874
1986
|
|
|
1875
1987
|
- Return 500 on GET handler error instead of 404
|
|
1876
|
-
**Thanks to Nipun Dayanath**
|
|
1988
|
+
**Thanks to [@Nipun Dayanath](https://github.com/nipund)**
|
|
1877
1989
|
- createUser/createRole response now includes id retrieved by getUser/getRole instead of using posted userName/displayName value
|
|
1878
1990
|
|
|
1879
1991
|
### v3.2.6
|
|
@@ -2353,7 +2465,7 @@ Custom plugins needs some changes (please see included example plugins)
|
|
|
2353
2465
|
|
|
2354
2466
|
- Some minor compliance fixes
|
|
2355
2467
|
|
|
2356
|
-
**Thanks to ywchuang**
|
|
2468
|
+
**Thanks to [@ywchuang](https://github.com/ywchuang)**
|
|
2357
2469
|
|
|
2358
2470
|
### v1.0.4
|
|
2359
2471
|
[Improved]
|
|
@@ -2453,7 +2565,7 @@ With:
|
|
|
2453
2565
|
|
|
2454
2566
|
- Document updated on how to run SCIM Gateway as a Docker container
|
|
2455
2567
|
- `config\docker` includes docker configuration examples
|
|
2456
|
-
**Thanks to
|
|
2568
|
+
**Thanks to [@cwatsonc](https://github.com/cwatsonc) and [@visualjeff](https://github.com/visualjeff)**
|
|
2457
2569
|
|
|
2458
2570
|
|
|
2459
2571
|
### v0.4.5
|
|
@@ -2474,7 +2586,7 @@ With:
|
|
|
2474
2586
|
|
|
2475
2587
|
- NoSQL Document-Oriented Database plugin: `plugin-loki`
|
|
2476
2588
|
This plugin now replace previous `plugin-testmode`
|
|
2477
|
-
**Thanks to
|
|
2589
|
+
**Thanks to [@visualjeff](https://github.com/visualjeff)**
|
|
2478
2590
|
- Minor code/comment reorganizations in provided plugins
|
|
2479
2591
|
- Minor adjustments to multi-value logic introduced in v0.4.0
|
|
2480
2592
|
|
|
@@ -2493,7 +2605,7 @@ This plugin now replace previous `plugin-testmode`
|
|
|
2493
2605
|
|
|
2494
2606
|
- Mocha test scripts for automated testing of plugin-testmode
|
|
2495
2607
|
- Automated tests run on Travis-ci.org (click on build badge)
|
|
2496
|
-
- **Thanks to
|
|
2608
|
+
- **Thanks to [@visualjeff](https://github.com/visualjeff)**
|
|
2497
2609
|
|
|
2498
2610
|
|
|
2499
2611
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
USE [master];
|
|
2
|
+
GO
|
|
3
|
+
|
|
4
|
+
IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = 'scimgateway')
|
|
5
|
+
BEGIN
|
|
6
|
+
CREATE LOGIN [scimgateway] WITH PASSWORD = 'password', CHECK_POLICY = OFF;
|
|
7
|
+
ALTER SERVER ROLE [sysadmin] ADD MEMBER [scimgateway];
|
|
8
|
+
END
|
|
9
|
+
GO
|
|
10
|
+
|
|
11
|
+
IF DB_ID('scimgateway') IS NULL
|
|
12
|
+
BEGIN
|
|
13
|
+
CREATE DATABASE [scimgateway];
|
|
14
|
+
END
|
|
15
|
+
GO
|
|
16
|
+
|
|
17
|
+
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'User')
|
|
18
|
+
BEGIN
|
|
19
|
+
USE [scimgateway]
|
|
20
|
+
CREATE TABLE [User] (
|
|
21
|
+
[UserID] VARCHAR(50) NOT NULL,
|
|
22
|
+
[Enabled] VARCHAR(50) NULL,
|
|
23
|
+
[Password] VARCHAR(50) NULL,
|
|
24
|
+
[FirstName] VARCHAR(50) NULL,
|
|
25
|
+
[MiddleName] VARCHAR(50) NULL,
|
|
26
|
+
[LastName] VARCHAR(50) NULL,
|
|
27
|
+
[Email] VARCHAR(50) NULL,
|
|
28
|
+
[MobilePhone] VARCHAR(50) NULL,
|
|
29
|
+
CONSTRAINT [PK_User] PRIMARY KEY ([UserID])
|
|
30
|
+
);
|
|
31
|
+
END
|
|
32
|
+
GO
|
|
33
|
+
|
|
34
|
+
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Group')
|
|
35
|
+
BEGIN
|
|
36
|
+
USE [scimgateway]
|
|
37
|
+
CREATE TABLE [Group] (
|
|
38
|
+
[GroupID] VARCHAR(50) NOT NULL,
|
|
39
|
+
[Enabled] VARCHAR(50) NULL,
|
|
40
|
+
CONSTRAINT [PK_Group] PRIMARY KEY ([GroupID])
|
|
41
|
+
);
|
|
42
|
+
END
|
|
43
|
+
GO
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
version: '2'
|
|
2
|
+
services:
|
|
3
|
+
# scimgateway:
|
|
4
|
+
# build:
|
|
5
|
+
# context: .
|
|
6
|
+
# dockerfile: ./Dockerfile
|
|
7
|
+
# image: scimgateway:latest
|
|
8
|
+
# container_name: scimgateway
|
|
9
|
+
# depends_on:
|
|
10
|
+
# scimgateway-sqlserver:
|
|
11
|
+
# condition: service_healthy
|
|
12
|
+
# hostname:
|
|
13
|
+
# scimgateway
|
|
14
|
+
# volumes:
|
|
15
|
+
# - ./config:/home/scimgateway/config:rw
|
|
16
|
+
# - /var/lib/dbus:/var/lib/dbus:ro
|
|
17
|
+
# ports:
|
|
18
|
+
# - "8880:8880"
|
|
19
|
+
# # environment:
|
|
20
|
+
# # - NODE_ENV=production
|
|
21
|
+
# # - PORT=8880
|
|
22
|
+
# # - SEED=changeit
|
|
23
|
+
# restart: on-failure:3
|
|
24
|
+
|
|
25
|
+
scimgateway-sqlserver:
|
|
26
|
+
image: mcr.microsoft.com/mssql/server:2019-latest
|
|
27
|
+
hostname:
|
|
28
|
+
MySqlHost
|
|
29
|
+
environment:
|
|
30
|
+
- ACCEPT_EULA=Y
|
|
31
|
+
- SA_PASSWORD=p@ssw0rd!
|
|
32
|
+
- MSSQL_PID=Developer
|
|
33
|
+
ports:
|
|
34
|
+
- 1433:1433
|
|
35
|
+
volumes:
|
|
36
|
+
- ./sqlserver_data:/var/opt/mssql
|
|
37
|
+
user: root
|
|
38
|
+
restart: always
|
|
39
|
+
healthcheck:
|
|
40
|
+
test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U sa -P \"p@ssw0rd!\" -Q 'SELECT 1' || exit 1"]
|
|
41
|
+
interval: 10s
|
|
42
|
+
retries: 10
|
|
43
|
+
start_period: 10s
|
|
44
|
+
timeout: 3s
|
|
45
|
+
|
|
46
|
+
scimgateway-sqlserver-configurator:
|
|
47
|
+
image: mcr.microsoft.com/mssql/server:2019-latest
|
|
48
|
+
volumes:
|
|
49
|
+
- ./dbinit:/docker-entrypoint-initdb.d
|
|
50
|
+
depends_on:
|
|
51
|
+
scimgateway-sqlserver:
|
|
52
|
+
condition: service_healthy
|
|
53
|
+
restart: no
|
|
54
|
+
command: >
|
|
55
|
+
bash -c '
|
|
56
|
+
/opt/mssql-tools18/bin/sqlcmd -C -S MySqlHost -U sa -P "p@ssw0rd!" -d master -i docker-entrypoint-initdb.d/init.sql;
|
|
57
|
+
echo "All done!";
|
|
58
|
+
'
|
package/config/plugin-api.json
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
"scimgateway": {
|
|
3
3
|
"port": 8890,
|
|
4
4
|
"localhostonly": false,
|
|
5
|
-
"payloadSize": null,
|
|
6
5
|
"scim": {
|
|
7
6
|
"version": "2.0",
|
|
8
7
|
"skipTypeConvert": false,
|
|
@@ -75,18 +74,19 @@
|
|
|
75
74
|
}
|
|
76
75
|
},
|
|
77
76
|
"ipAllowList": [],
|
|
78
|
-
"
|
|
79
|
-
"
|
|
77
|
+
"email": {
|
|
78
|
+
"auth": {
|
|
79
|
+
"type": "oauth",
|
|
80
|
+
"options": {
|
|
81
|
+
"tenantIdGUID": null,
|
|
82
|
+
"clientId": null,
|
|
83
|
+
"clientSecret": null
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"emailOnError": {
|
|
80
87
|
"enabled": false,
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"proxy": null,
|
|
84
|
-
"authenticate": true,
|
|
85
|
-
"username": null,
|
|
86
|
-
"password": null,
|
|
87
|
-
"sendInterval": 15,
|
|
88
|
-
"to": null,
|
|
89
|
-
"cc": null
|
|
88
|
+
"from": null,
|
|
89
|
+
"to": null
|
|
90
90
|
}
|
|
91
91
|
},
|
|
92
92
|
"stream": {
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
"scimgateway": {
|
|
3
3
|
"port": 8881,
|
|
4
4
|
"localhostonly": false,
|
|
5
|
-
"payloadSize": null,
|
|
6
5
|
"scim": {
|
|
7
6
|
"version": "2.0",
|
|
8
7
|
"customSchema": null,
|
|
@@ -75,18 +74,56 @@
|
|
|
75
74
|
}
|
|
76
75
|
},
|
|
77
76
|
"ipAllowList": [],
|
|
78
|
-
"
|
|
79
|
-
"
|
|
77
|
+
"email": {
|
|
78
|
+
"auth": {
|
|
79
|
+
"type": "oauth",
|
|
80
|
+
"options": {
|
|
81
|
+
"tenantIdGUID": null,
|
|
82
|
+
"clientId": null,
|
|
83
|
+
"clientSecret": null
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"emailOnError": {
|
|
87
|
+
"enabled": false,
|
|
88
|
+
"from": null,
|
|
89
|
+
"to": null
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"stream": {
|
|
93
|
+
"baseUrls": [],
|
|
94
|
+
"certificate": {
|
|
95
|
+
"ca": null
|
|
96
|
+
},
|
|
97
|
+
"subscriber": {
|
|
80
98
|
"enabled": false,
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
"entity": {
|
|
100
|
+
"undefined": {
|
|
101
|
+
"nats": {
|
|
102
|
+
"tenant": null,
|
|
103
|
+
"subject": null,
|
|
104
|
+
"jwt": null,
|
|
105
|
+
"secret": null
|
|
106
|
+
},
|
|
107
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
108
|
+
"skipConvertRolesToGroups": false,
|
|
109
|
+
"generateUserPassword": false,
|
|
110
|
+
"modifyOnly": false,
|
|
111
|
+
"replaceDomains": []
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"publisher": {
|
|
116
|
+
"enabled": false,
|
|
117
|
+
"entity": {
|
|
118
|
+
"undefined": {
|
|
119
|
+
"nats": {
|
|
120
|
+
"tenant": null,
|
|
121
|
+
"subject": null,
|
|
122
|
+
"jwt": null,
|
|
123
|
+
"secret": null
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
90
127
|
}
|
|
91
128
|
}
|
|
92
129
|
},
|
package/config/plugin-ldap.json
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
"scimgateway": {
|
|
3
3
|
"port": 8883,
|
|
4
4
|
"localhostonly": false,
|
|
5
|
-
"payloadSize": null,
|
|
6
5
|
"scim": {
|
|
7
6
|
"version": "2.0",
|
|
8
7
|
"skipTypeConvert": false,
|
|
@@ -75,18 +74,19 @@
|
|
|
75
74
|
}
|
|
76
75
|
},
|
|
77
76
|
"ipAllowList": [],
|
|
78
|
-
"
|
|
79
|
-
"
|
|
77
|
+
"email": {
|
|
78
|
+
"auth": {
|
|
79
|
+
"type": "oauth",
|
|
80
|
+
"options": {
|
|
81
|
+
"tenantIdGUID": null,
|
|
82
|
+
"clientId": null,
|
|
83
|
+
"clientSecret": null
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"emailOnError": {
|
|
80
87
|
"enabled": false,
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"proxy": null,
|
|
84
|
-
"authenticate": true,
|
|
85
|
-
"username": null,
|
|
86
|
-
"password": null,
|
|
87
|
-
"sendInterval": 15,
|
|
88
|
-
"to": null,
|
|
89
|
-
"cc": null
|
|
88
|
+
"from": null,
|
|
89
|
+
"to": null
|
|
90
90
|
}
|
|
91
91
|
},
|
|
92
92
|
"stream": {
|
|
@@ -275,4 +275,4 @@
|
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
}
|
|
278
|
-
}
|
|
278
|
+
}
|