auth0-deploy-cli 7.23.0 → 7.23.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/.circleci/config.yml +5 -5
- package/.nyc_output/747e9b9b-46b5-4186-9626-5f44b7913b36.json +1 -0
- package/.nyc_output/processinfo/049a2787-df3f-4b58-bae0-3cf3b50d1cc3.json +1 -0
- package/.nyc_output/processinfo/{2a2869c9-ac23-4d62-8266-903f9cdcd82e.json → 747e9b9b-46b5-4186-9626-5f44b7913b36.json} +1 -1
- package/.nyc_output/processinfo/91928ebf-9b67-4586-9ed6-5290c652cdcf.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +9 -1
- package/coverage/lcov-report/index.html +18 -18
- package/coverage/lcov.info +301 -213
- package/lib/tools/auth0/handlers/connections.js +4 -0
- package/lib/tools/auth0/handlers/connections.js.map +1 -1
- package/lib/tools/auth0/handlers/scimHandler.d.ts +20 -4
- package/lib/tools/auth0/handlers/scimHandler.js +121 -44
- package/lib/tools/auth0/handlers/scimHandler.js.map +1 -1
- package/package.json +1 -1
- package/.nyc_output/2a2869c9-ac23-4d62-8266-903f9cdcd82e.json +0 -1
- package/.nyc_output/processinfo/ad53a51b-f5e5-41b3-9fb0-7f8a95a633c0.json +0 -1
- package/.nyc_output/processinfo/b691e3d3-398b-4603-a9ec-8843bc1cf98a.json +0 -1
- /package/.nyc_output/{ad53a51b-f5e5-41b3-9fb0-7f8a95a633c0.json → 049a2787-df3f-4b58-bae0-3cf3b50d1cc3.json} +0 -0
- /package/.nyc_output/{b691e3d3-398b-4603-a9ec-8843bc1cf98a.json → 91928ebf-9b67-4586-9ed6-5290c652cdcf.json} +0 -0
|
@@ -20,6 +20,12 @@ export default class ScimHandler {
|
|
|
20
20
|
private tokenProvider;
|
|
21
21
|
private config;
|
|
22
22
|
private connectionsManager;
|
|
23
|
+
private updateQueue;
|
|
24
|
+
private isExecuting;
|
|
25
|
+
private scimScopes;
|
|
26
|
+
private scopeMethodMap;
|
|
27
|
+
expectedChanges: number;
|
|
28
|
+
completedChanges: number;
|
|
23
29
|
constructor(config: any, tokenProvider: any, connectionsManager: any);
|
|
24
30
|
/**
|
|
25
31
|
* Check if the connection strategy is SCIM supported.
|
|
@@ -42,15 +48,15 @@ export default class ScimHandler {
|
|
|
42
48
|
*
|
|
43
49
|
* This method mutates the incoming `connections`.
|
|
44
50
|
*/
|
|
45
|
-
applyScimConfiguration(connections: Asset[]): Promise<
|
|
51
|
+
applyScimConfiguration(connections: Asset[]): Promise<Asset[] | undefined>;
|
|
46
52
|
/**
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
* HTTP request wrapper on axios.
|
|
54
|
+
*/
|
|
49
55
|
private scimHttpRequest;
|
|
50
56
|
/**
|
|
51
57
|
* Error handler wrapper.
|
|
52
58
|
*/
|
|
53
|
-
withErrorHandling(callback: any): Promise<any>;
|
|
59
|
+
withErrorHandling(callback: any, method: string, url: string): Promise<any>;
|
|
54
60
|
/**
|
|
55
61
|
* Returns formatted endpoint url.
|
|
56
62
|
*/
|
|
@@ -73,5 +79,15 @@ export default class ScimHandler {
|
|
|
73
79
|
deleteScimConfiguration({ id: connection_id }: scimRequestParams): Promise<AxiosResponse>;
|
|
74
80
|
updateOverride(requestParams: scimRequestParams, bodyParams: Asset): Promise<any>;
|
|
75
81
|
createOverride(bodyParams: Asset): Promise<any>;
|
|
82
|
+
/**
|
|
83
|
+
* If we perform `connectionsManager.update` and `updateScimConfiguration` together, they may result in rate limit error.
|
|
84
|
+
* The reason is that both of them make API requests to the same `api/v2/connections` endpoint.
|
|
85
|
+
* We cannot control it with delay because both `updateOverride` and `createOverride` are async functions. And being called concurrently by `PromisePoolExecutor`.
|
|
86
|
+
* To avoid this, we are queuing the `SCIM` actions and executing them one by one separately, only after `connectionsManager.update` is completed.
|
|
87
|
+
*
|
|
88
|
+
* This is true for both `create` and `update` actions.
|
|
89
|
+
* @returns {Promise<void>}
|
|
90
|
+
*/
|
|
91
|
+
executeQueue(): Promise<void>;
|
|
76
92
|
}
|
|
77
93
|
export {};
|
|
@@ -22,6 +22,17 @@ const utils_1 = require("../../utils");
|
|
|
22
22
|
class ScimHandler {
|
|
23
23
|
constructor(config, tokenProvider, connectionsManager) {
|
|
24
24
|
this.scimStrategies = ['samlp', 'oidc', 'okta', 'waad'];
|
|
25
|
+
this.updateQueue = [];
|
|
26
|
+
this.isExecuting = false;
|
|
27
|
+
this.scimScopes = { read: true, create: true, update: true, delete: true };
|
|
28
|
+
this.scopeMethodMap = {
|
|
29
|
+
get: 'read',
|
|
30
|
+
post: 'create',
|
|
31
|
+
patch: 'update',
|
|
32
|
+
delete: 'delete'
|
|
33
|
+
};
|
|
34
|
+
this.expectedChanges = 0;
|
|
35
|
+
this.completedChanges = 0;
|
|
25
36
|
this.config = config;
|
|
26
37
|
this.tokenProvider = tokenProvider;
|
|
27
38
|
this.connectionsManager = connectionsManager;
|
|
@@ -45,21 +56,18 @@ class ScimHandler {
|
|
|
45
56
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
57
|
this.idMap.clear();
|
|
47
58
|
for (let connection of connections) {
|
|
59
|
+
if (!this.scimScopes.read)
|
|
60
|
+
return;
|
|
48
61
|
if (!this.isScimStrategy(connection.strategy))
|
|
49
62
|
continue;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
// Skip the connection if it returns 404. This can happen if `SCIM` is not enabled on a `SCIM` connection.
|
|
60
|
-
if (err !== 'SCIM_NOT_FOUND')
|
|
61
|
-
throw err;
|
|
62
|
-
}
|
|
63
|
+
// To avoid rate limiter error, we making API requests with a small delay.
|
|
64
|
+
// TODO: However, this logic needs to be re-worked.
|
|
65
|
+
yield (0, utils_1.sleep)(250);
|
|
66
|
+
this.idMap.set(connection.id, { strategy: connection.strategy, hasConfig: false });
|
|
67
|
+
const scimConfiguration = yield this.getScimConfiguration({ id: connection.id });
|
|
68
|
+
if (!scimConfiguration)
|
|
69
|
+
continue;
|
|
70
|
+
this.idMap.set(connection.id, Object.assign(Object.assign({}, this.idMap.get(connection.id)), { hasConfig: true }));
|
|
63
71
|
}
|
|
64
72
|
});
|
|
65
73
|
}
|
|
@@ -74,28 +82,24 @@ class ScimHandler {
|
|
|
74
82
|
applyScimConfiguration(connections) {
|
|
75
83
|
return __awaiter(this, void 0, void 0, function* () {
|
|
76
84
|
for (let connection of connections) {
|
|
85
|
+
if (!this.scimScopes.read)
|
|
86
|
+
return connections;
|
|
77
87
|
if (!this.isScimStrategy(connection.strategy))
|
|
78
88
|
continue;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Skip the connection if it returns 404. This can happen if `SCIM` is not enabled on a `SCIM` connection.
|
|
88
|
-
if (err !== 'SCIM_NOT_FOUND')
|
|
89
|
-
throw err;
|
|
90
|
-
const warningMessage = `SCIM configuration not found on connection \"${connection.id}\".`;
|
|
91
|
-
logger_1.default.warn(warningMessage);
|
|
92
|
-
}
|
|
89
|
+
// To avoid rate limiter error, we making API requests with a small delay.
|
|
90
|
+
// TODO: However, this logic needs to be re-worked.
|
|
91
|
+
yield (0, utils_1.sleep)(250);
|
|
92
|
+
const scimConfiguration = yield this.getScimConfiguration({ id: connection.id });
|
|
93
|
+
if (!scimConfiguration)
|
|
94
|
+
continue;
|
|
95
|
+
const { user_id_attribute, mapping } = scimConfiguration;
|
|
96
|
+
connection.scim_configuration = { user_id_attribute, mapping };
|
|
93
97
|
}
|
|
94
98
|
});
|
|
95
99
|
}
|
|
96
100
|
/**
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
* HTTP request wrapper on axios.
|
|
102
|
+
*/
|
|
99
103
|
scimHttpRequest(method, options) {
|
|
100
104
|
return __awaiter(this, void 0, void 0, function* () {
|
|
101
105
|
return yield this.withErrorHandling(() => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -108,25 +112,51 @@ class ScimHandler {
|
|
|
108
112
|
};
|
|
109
113
|
options = [...options, { headers }];
|
|
110
114
|
return yield axios_1.default[method](...options);
|
|
111
|
-
}));
|
|
115
|
+
}), method, options[0]);
|
|
112
116
|
});
|
|
113
117
|
}
|
|
114
118
|
/**
|
|
115
119
|
* Error handler wrapper.
|
|
116
120
|
*/
|
|
117
|
-
withErrorHandling(callback) {
|
|
118
|
-
var _a, _b, _c, _d;
|
|
121
|
+
withErrorHandling(callback, method, url) {
|
|
122
|
+
var _a, _b, _c, _d, _e;
|
|
119
123
|
return __awaiter(this, void 0, void 0, function* () {
|
|
120
124
|
try {
|
|
121
125
|
return yield callback();
|
|
122
126
|
}
|
|
123
127
|
catch (error) {
|
|
128
|
+
// Extract connection_id from the url.
|
|
129
|
+
const regex = /api\/v2\/connections\/(.*?)\/scim-configuration/;
|
|
130
|
+
const match = url.match(regex);
|
|
131
|
+
const connectionId = match ? match[1] : null;
|
|
132
|
+
// Extract error data
|
|
124
133
|
const errorData = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.data;
|
|
125
|
-
if
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
134
|
+
// Skip the connection if it returns 404. This can happen if `SCIM` is not enabled on a `SCIM` connection.
|
|
135
|
+
if ((errorData === null || errorData === void 0 ? void 0 : errorData.statusCode) === 404) {
|
|
136
|
+
const warningMessage = `SCIM configuration is not enabled on connection \"${connectionId}\".`;
|
|
137
|
+
logger_1.default.warn(warningMessage);
|
|
138
|
+
return { data: null };
|
|
139
|
+
}
|
|
140
|
+
;
|
|
141
|
+
// Skip the connection if it returns 403. Looks like "scim_config" permissions are not enabled on Management API.
|
|
142
|
+
if ((errorData === null || errorData === void 0 ? void 0 : errorData.statusCode) === 403) {
|
|
143
|
+
const scope = this.scopeMethodMap[method];
|
|
144
|
+
this.scimScopes[scope] = false;
|
|
145
|
+
const warningMessage = `Insufficient scope, "${scope}:scim_config". Looks like "scim_config" permissions are not enabled your application.`;
|
|
146
|
+
logger_1.default.warn(warningMessage);
|
|
147
|
+
return { data: null };
|
|
148
|
+
}
|
|
149
|
+
// Skip the connection if it returns 400. This can happen if `SCIM` configuration already exists on a `SCIM` connection.
|
|
150
|
+
// When `read:scim_config` is disabled and `create:scim_config` is enabled, we cannot check if `SCIM` configuration exists on a connection.
|
|
151
|
+
// So, it'll run into 400 error.
|
|
152
|
+
if ((errorData === null || errorData === void 0 ? void 0 : errorData.statusCode) === 400 && ((_b = errorData === null || errorData === void 0 ? void 0 : errorData.message) === null || _b === void 0 ? void 0 : _b.includes('already exists'))) {
|
|
153
|
+
const warningMessage = `SCIM configuration already exists on connection \"${connectionId}\".`;
|
|
154
|
+
logger_1.default.warn(warningMessage);
|
|
155
|
+
return { data: null };
|
|
156
|
+
}
|
|
157
|
+
const statusCode = (errorData === null || errorData === void 0 ? void 0 : errorData.statusCode) || ((_c = error === null || error === void 0 ? void 0 : error.response) === null || _c === void 0 ? void 0 : _c.status);
|
|
158
|
+
const errorCode = (errorData === null || errorData === void 0 ? void 0 : errorData.errorCode) || (errorData === null || errorData === void 0 ? void 0 : errorData.error) || ((_d = error === null || error === void 0 ? void 0 : error.response) === null || _d === void 0 ? void 0 : _d.statusText);
|
|
159
|
+
const errorMessage = (errorData === null || errorData === void 0 ? void 0 : errorData.message) || ((_e = error === null || error === void 0 ? void 0 : error.response) === null || _e === void 0 ? void 0 : _e.statusText);
|
|
130
160
|
const message = `SCIM request failed with statusCode ${statusCode} (${errorCode}). ${errorMessage}.`;
|
|
131
161
|
logger_1.default.error(message);
|
|
132
162
|
throw error;
|
|
@@ -145,7 +175,7 @@ class ScimHandler {
|
|
|
145
175
|
*/
|
|
146
176
|
createScimConfiguration({ id: connection_id }, { user_id_attribute, mapping }) {
|
|
147
177
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
-
logger_1.default.debug(`Creating SCIM configuration
|
|
178
|
+
logger_1.default.debug(`Creating SCIM configuration on connection ${connection_id}`);
|
|
149
179
|
const url = this.getScimEndpoint(connection_id);
|
|
150
180
|
return (yield this.scimHttpRequest('post', [url, { user_id_attribute, mapping }])).data;
|
|
151
181
|
});
|
|
@@ -175,7 +205,7 @@ class ScimHandler {
|
|
|
175
205
|
*/
|
|
176
206
|
deleteScimConfiguration({ id: connection_id }) {
|
|
177
207
|
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
-
logger_1.default.debug(`Deleting SCIM configuration
|
|
208
|
+
logger_1.default.debug(`Deleting SCIM configuration on connection ${connection_id}`);
|
|
179
209
|
const url = this.getScimEndpoint(connection_id);
|
|
180
210
|
return (yield this.scimHttpRequest('delete', [url])).data;
|
|
181
211
|
});
|
|
@@ -189,18 +219,18 @@ class ScimHandler {
|
|
|
189
219
|
// First, update `connections`.
|
|
190
220
|
const updated = yield this.connectionsManager.update(requestParams, bodyParams);
|
|
191
221
|
const idMapEntry = this.idMap.get(requestParams.id);
|
|
222
|
+
this.completedChanges++;
|
|
192
223
|
// Now, update `scim_configuration` inside the updated connection.
|
|
193
224
|
// If `scim_configuration` exists in both local and remote -> updateScimConfiguration(...)
|
|
194
225
|
// If `scim_configuration` exists in remote but local -> deleteScimConfiguration(...)
|
|
195
226
|
// If `scim_configuration` exists in local but remote -> createScimConfiguration(...)
|
|
196
227
|
if (idMapEntry === null || idMapEntry === void 0 ? void 0 : idMapEntry.hasConfig) {
|
|
197
228
|
if (scimBodyParams) {
|
|
198
|
-
|
|
229
|
+
this.updateQueue.push({ action: 'update', requestParams, scimBodyParams });
|
|
199
230
|
}
|
|
200
231
|
else {
|
|
201
232
|
if (this.config('AUTH0_ALLOW_DELETE')) {
|
|
202
|
-
|
|
203
|
-
yield this.deleteScimConfiguration(requestParams);
|
|
233
|
+
this.updateQueue.push({ action: 'delete', requestParams });
|
|
204
234
|
}
|
|
205
235
|
else {
|
|
206
236
|
logger_1.default.warn('Skipping DELETE scim_configuration. Enable deletes by setting AUTH0_ALLOW_DELETE to true in your config.');
|
|
@@ -208,7 +238,11 @@ class ScimHandler {
|
|
|
208
238
|
}
|
|
209
239
|
}
|
|
210
240
|
else if (scimBodyParams) {
|
|
211
|
-
|
|
241
|
+
this.updateQueue.push({ action: 'create', requestParams, scimBodyParams });
|
|
242
|
+
}
|
|
243
|
+
// Execute the queue.
|
|
244
|
+
if (this.completedChanges >= this.expectedChanges) {
|
|
245
|
+
yield this.executeQueue();
|
|
212
246
|
}
|
|
213
247
|
// Return response from connections.update(...).
|
|
214
248
|
return updated;
|
|
@@ -222,14 +256,57 @@ class ScimHandler {
|
|
|
222
256
|
delete bodyParams.scim_configuration;
|
|
223
257
|
// First, create the new `connection`.
|
|
224
258
|
const created = yield this.connectionsManager.create(bodyParams);
|
|
259
|
+
this.completedChanges++;
|
|
225
260
|
if (scimBodyParams) {
|
|
226
261
|
// Now, create the `scim_configuration` for newly created `connection`.
|
|
227
|
-
|
|
262
|
+
this.updateQueue.push({ action: 'create', requestParams: { id: created.id }, scimBodyParams });
|
|
263
|
+
}
|
|
264
|
+
// Execute the queue.
|
|
265
|
+
if (this.completedChanges >= this.expectedChanges) {
|
|
266
|
+
yield this.executeQueue();
|
|
228
267
|
}
|
|
229
268
|
// Return response from connections.create(...).
|
|
230
269
|
return created;
|
|
231
270
|
});
|
|
232
271
|
}
|
|
272
|
+
/**
|
|
273
|
+
* If we perform `connectionsManager.update` and `updateScimConfiguration` together, they may result in rate limit error.
|
|
274
|
+
* The reason is that both of them make API requests to the same `api/v2/connections` endpoint.
|
|
275
|
+
* We cannot control it with delay because both `updateOverride` and `createOverride` are async functions. And being called concurrently by `PromisePoolExecutor`.
|
|
276
|
+
* To avoid this, we are queuing the `SCIM` actions and executing them one by one separately, only after `connectionsManager.update` is completed.
|
|
277
|
+
*
|
|
278
|
+
* This is true for both `create` and `update` actions.
|
|
279
|
+
* @returns {Promise<void>}
|
|
280
|
+
*/
|
|
281
|
+
executeQueue() {
|
|
282
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
283
|
+
if (this.isExecuting)
|
|
284
|
+
return;
|
|
285
|
+
this.isExecuting = true;
|
|
286
|
+
while (this.updateQueue.length > 0) {
|
|
287
|
+
// Rate limit error handling
|
|
288
|
+
yield (0, utils_1.sleep)(250);
|
|
289
|
+
const { action, requestParams, scimBodyParams } = this.updateQueue.shift();
|
|
290
|
+
switch (action) {
|
|
291
|
+
case 'create':
|
|
292
|
+
if (this.scimScopes.create)
|
|
293
|
+
yield this.createScimConfiguration(requestParams, scimBodyParams);
|
|
294
|
+
break;
|
|
295
|
+
case 'update':
|
|
296
|
+
if (this.scimScopes.update)
|
|
297
|
+
yield this.updateScimConfiguration(requestParams, scimBodyParams);
|
|
298
|
+
break;
|
|
299
|
+
case 'delete':
|
|
300
|
+
if (this.scimScopes.delete)
|
|
301
|
+
yield this.deleteScimConfiguration(requestParams);
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
this.isExecuting = false;
|
|
306
|
+
this.expectedChanges = 0;
|
|
307
|
+
this.completedChanges = 0;
|
|
308
|
+
});
|
|
309
|
+
}
|
|
233
310
|
}
|
|
234
311
|
exports.default = ScimHandler;
|
|
235
312
|
//# sourceMappingURL=scimHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scimHandler.js","sourceRoot":"","sources":["../../../../src/tools/auth0/handlers/scimHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,kDAA6C;AAC7C,6DAAkC;AAClC,uCAAoC;
|
|
1
|
+
{"version":3,"file":"scimHandler.js","sourceRoot":"","sources":["../../../../src/tools/auth0/handlers/scimHandler.ts"],"names":[],"mappings":"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"}
|