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 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
- "emailOnError": {
285
- "smtp": {
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
- "host": null,
288
- "port": 587,
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
- - **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
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."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.
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
- - **emailOnError** - Contains configuration for sending error notifications by email. Note, only the first error will be sent until sendInterval have passed
441
- - **emailOnError.smtp.enabled** - true or false, value set to true will enable email notifications
442
- - **emailOnError.smtp.host** - Mailserver e.g. "smtp.office365.com"
443
- - **emailOnError.smtp.port** - Port used by mailserver e.g. 587, 25 or 465
444
- - **emailOnError.smtp.proxy** - If using mailproxy e.g. "http://proxy-host:1234"
445
- - **emailOnError.smtp.authenticate** - true or false, set to true will use username/password authentication
446
- - **emailOnError.smtp.username** - Mail account for authentication and also the sender of the email, e.g. "user@outlook.com"
447
- - **emailOnError.smtp.password** - Mail account password
448
- - **emailOnError.smtp.sendInterval** - Mail notifications on error are deferred until sendInterval **minutes** have passed since the last notification. Default 15 minutes
449
- - **emailOnError.smtp.to** - Comma separated list of recipients email addresses e.g: "someone@example.com"
450
- - **emailOnError.smtp.cc** - Comma separated list of cc email addresses
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 Augé**
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, **thanks to Filipe Ribeiro and Miguel Ferreira (KEEP SOLUTIONS)**
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 Charley Watson and Jeffrey Gilbert**
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 Jeffrey Gilbert**
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 Jeffrey Gilbert**
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
+ '
@@ -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
- "emailOnError": {
79
- "smtp": {
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
- "host": null,
82
- "port": 587,
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
- "emailOnError": {
79
- "smtp": {
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
- "host": null,
82
- "port": 587,
83
- "proxy": null,
84
- "authenticate": true,
85
- "username": null,
86
- "password": null,
87
- "sendInterval": 15,
88
- "to": null,
89
- "cc": null
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
  },
@@ -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
- "emailOnError": {
79
- "smtp": {
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
- "host": null,
82
- "port": 587,
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
+ }