@kineticdata/react 6.1.1 → 7.0.0-rc1
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/lib/apis/core/authentication.js +241 -67
- package/lib/apis/core/authentication.test.js +360 -0
- package/lib/apis/core/customIndexes.js +102 -0
- package/lib/apis/core/customIndexes.test.js +276 -0
- package/lib/apis/core/oauthClients.js +33 -8
- package/lib/apis/index.js +12 -0
- package/lib/apis/system/index.js +16 -1
- package/lib/apis/task/index.js +1 -1
- package/lib/components/core/custom_index/CustomIndexForm.js +140 -0
- package/lib/components/core/custom_index/CustomIndexTable.js +98 -0
- package/lib/components/core/oauth_client/OAuthClientForm.js +246 -28
- package/lib/components/core/oauth_client/OAuthClientTable.js +77 -8
- package/lib/components/index.js +14 -0
- package/lib/components/integrator/operation/config_fields/http.js +1 -1
- package/lib/components/task/builder/helpers.js +3 -2
- package/lib/helpers/index.js +6 -1
- package/package.json +5 -5
|
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.singleSignOn = exports.retrieveJwt = exports.logoutDirect = exports.login = void 0;
|
|
8
|
-
var
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
|
|
9
9
|
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
11
|
-
var
|
|
11
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
12
12
|
var _axios = _interopRequireDefault(require("axios"));
|
|
13
13
|
var _helpers = require("../../helpers");
|
|
14
14
|
var _profile = require("./profile");
|
|
@@ -24,48 +24,222 @@ var login = exports.login = function login(_ref) {
|
|
|
24
24
|
})["catch"](_http.handleErrors);
|
|
25
25
|
};
|
|
26
26
|
var logoutDirect = exports.logoutDirect = function logoutDirect(isSaml) {
|
|
27
|
-
return _axios["default"].get(isSaml === true ? "".concat(_helpers.bundle.spaceLocation(), "/app/
|
|
27
|
+
return _axios["default"].get(isSaml === true ? "".concat(_helpers.bundle.spaceLocation(), "/app/saml2/logout") : "".concat(_helpers.bundle.spaceLocation(), "/app/logout"));
|
|
28
28
|
};
|
|
29
29
|
var checkedOrigin = process.env.REACT_APP_API_HOST ? process.env.REACT_APP_API_HOST : typeof window !== 'undefined' ? window.location.origin : null;
|
|
30
30
|
var clientId = process.env.REACT_APP_OAUTH_CLIENT_ID ? process.env.REACT_APP_OAUTH_CLIENT_ID : process.env.NODE_ENV === 'production' ? 'system' : 'system-dev';
|
|
31
|
-
var
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
31
|
+
var base64UrlEncode = function base64UrlEncode(bytes) {
|
|
32
|
+
return btoa(String.fromCharCode.apply(String, (0, _toConsumableArray2["default"])(bytes))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
33
|
+
};
|
|
34
|
+
var generateCodeVerifier = function generateCodeVerifier() {
|
|
35
|
+
var array = new Uint8Array(32);
|
|
36
|
+
crypto.getRandomValues(array);
|
|
37
|
+
return base64UrlEncode(array);
|
|
38
|
+
};
|
|
39
|
+
var generateCodeChallenge = /*#__PURE__*/function () {
|
|
40
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee(codeVerifier) {
|
|
41
|
+
var data, digest;
|
|
42
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
|
|
43
|
+
while (1) switch (_context.prev = _context.next) {
|
|
44
|
+
case 0:
|
|
45
|
+
data = new TextEncoder().encode(codeVerifier);
|
|
46
|
+
_context.next = 3;
|
|
47
|
+
return crypto.subtle.digest('SHA-256', data);
|
|
48
|
+
case 3:
|
|
49
|
+
digest = _context.sent;
|
|
50
|
+
return _context.abrupt("return", base64UrlEncode(new Uint8Array(digest)));
|
|
51
|
+
case 5:
|
|
52
|
+
case "end":
|
|
53
|
+
return _context.stop();
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
}, _callee);
|
|
56
|
+
}));
|
|
57
|
+
return function generateCodeChallenge(_x) {
|
|
58
|
+
return _ref2.apply(this, arguments);
|
|
59
|
+
};
|
|
60
|
+
}();
|
|
61
|
+
var exchangeCodeForToken = /*#__PURE__*/function () {
|
|
62
|
+
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2(code, codeVerifier, redirectUri) {
|
|
63
|
+
var response;
|
|
64
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
|
|
65
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
66
|
+
case 0:
|
|
67
|
+
_context2.prev = 0;
|
|
68
|
+
_context2.next = 3;
|
|
69
|
+
return _axios["default"].post("".concat(_helpers.bundle.spaceLocation(), "/app/oauth2/token"), new URLSearchParams({
|
|
70
|
+
grant_type: 'authorization_code',
|
|
71
|
+
code: code,
|
|
72
|
+
redirect_uri: redirectUri,
|
|
73
|
+
client_id: clientId,
|
|
74
|
+
code_verifier: codeVerifier
|
|
75
|
+
}), {
|
|
76
|
+
headers: {
|
|
77
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
78
|
+
},
|
|
79
|
+
__bypassAuthInterceptor: true,
|
|
80
|
+
__bypassInitInterceptor: true
|
|
81
|
+
});
|
|
82
|
+
case 3:
|
|
83
|
+
response = _context2.sent;
|
|
84
|
+
return _context2.abrupt("return", response.data.access_token);
|
|
85
|
+
case 7:
|
|
86
|
+
_context2.prev = 7;
|
|
87
|
+
_context2.t0 = _context2["catch"](0);
|
|
88
|
+
console.error('there was a problem getting the token:', _context2.t0);
|
|
89
|
+
return _context2.abrupt("return", undefined);
|
|
90
|
+
case 11:
|
|
91
|
+
case "end":
|
|
92
|
+
return _context2.stop();
|
|
58
93
|
}
|
|
59
|
-
};
|
|
60
|
-
|
|
94
|
+
}, _callee2, null, [[0, 7]]);
|
|
95
|
+
}));
|
|
96
|
+
return function exchangeCodeForToken(_x2, _x3, _x4) {
|
|
97
|
+
return _ref3.apply(this, arguments);
|
|
98
|
+
};
|
|
99
|
+
}();
|
|
100
|
+
var AUTHORIZE_TIMEOUT_MS = 15000;
|
|
101
|
+
var attemptAuthorize = function attemptAuthorize(redirectUri, codeVerifier, codeChallenge) {
|
|
102
|
+
return new Promise(function (resolve, reject) {
|
|
103
|
+
var params = new URLSearchParams({
|
|
104
|
+
response_type: 'code',
|
|
105
|
+
client_id: clientId,
|
|
106
|
+
redirect_uri: redirectUri,
|
|
107
|
+
code_challenge: codeChallenge,
|
|
108
|
+
code_challenge_method: 'S256'
|
|
109
|
+
});
|
|
110
|
+
var iframe = document.createElement('iframe');
|
|
111
|
+
iframe.title = 'oauth jwt iframe';
|
|
112
|
+
iframe.style.display = 'none';
|
|
113
|
+
iframe.src = "".concat(_helpers.bundle.spaceLocation(), "/app/oauth2/authorize?").concat(params);
|
|
114
|
+
iframe.onload = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee3() {
|
|
115
|
+
var iframeUrl, error, code, token;
|
|
116
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee3$(_context3) {
|
|
117
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
118
|
+
case 0:
|
|
119
|
+
_context3.prev = 0;
|
|
120
|
+
iframeUrl = new URL(iframe.contentWindow.location.href);
|
|
121
|
+
error = iframeUrl.searchParams.get('error');
|
|
122
|
+
code = iframeUrl.searchParams.get('code');
|
|
123
|
+
if (!iframeUrl.pathname.endsWith('/app/login')) {
|
|
124
|
+
_context3.next = 9;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
document.body.removeChild(iframe);
|
|
128
|
+
resolve({
|
|
129
|
+
status: 'unauthenticated'
|
|
130
|
+
});
|
|
131
|
+
_context3.next = 24;
|
|
132
|
+
break;
|
|
133
|
+
case 9:
|
|
134
|
+
if (!error) {
|
|
135
|
+
_context3.next = 14;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
document.body.removeChild(iframe);
|
|
139
|
+
resolve({
|
|
140
|
+
status: 'error',
|
|
141
|
+
error: error
|
|
142
|
+
});
|
|
143
|
+
_context3.next = 24;
|
|
144
|
+
break;
|
|
145
|
+
case 14:
|
|
146
|
+
if (!code) {
|
|
147
|
+
_context3.next = 22;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
document.body.removeChild(iframe);
|
|
151
|
+
_context3.next = 18;
|
|
152
|
+
return exchangeCodeForToken(code, codeVerifier, redirectUri);
|
|
153
|
+
case 18:
|
|
154
|
+
token = _context3.sent;
|
|
155
|
+
if (token) {
|
|
156
|
+
resolve({
|
|
157
|
+
status: 'success',
|
|
158
|
+
token: token
|
|
159
|
+
});
|
|
160
|
+
} else {
|
|
161
|
+
reject({
|
|
162
|
+
status: 'error',
|
|
163
|
+
error: 'There was a problem retrieving your token.'
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
_context3.next = 24;
|
|
167
|
+
break;
|
|
168
|
+
case 22:
|
|
169
|
+
document.body.removeChild(iframe);
|
|
170
|
+
resolve({
|
|
171
|
+
status: 'error',
|
|
172
|
+
error: 'There was an unexpected problem retrieving your token.'
|
|
173
|
+
});
|
|
174
|
+
case 24:
|
|
175
|
+
_context3.next = 29;
|
|
176
|
+
break;
|
|
177
|
+
case 26:
|
|
178
|
+
_context3.prev = 26;
|
|
179
|
+
_context3.t0 = _context3["catch"](0);
|
|
180
|
+
// Cross-origin errors are expected during intermediate redirects
|
|
181
|
+
// as the iframe navigates through different origins before landing
|
|
182
|
+
// on the final redirect URI. Other errors should reject immediately.
|
|
183
|
+
if (!(_context3.t0 instanceof DOMException)) {
|
|
184
|
+
reject({
|
|
185
|
+
status: 'error',
|
|
186
|
+
error: 'There was an unexpected problem during authorization.'
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
case 29:
|
|
190
|
+
case "end":
|
|
191
|
+
return _context3.stop();
|
|
192
|
+
}
|
|
193
|
+
}, _callee3, null, [[0, 26]]);
|
|
194
|
+
}));
|
|
61
195
|
document.body.appendChild(iframe);
|
|
62
196
|
});
|
|
63
197
|
};
|
|
198
|
+
var withTimeout = function withTimeout(promise, ms) {
|
|
199
|
+
return Promise.race([promise, new Promise(function (_, reject) {
|
|
200
|
+
return setTimeout(function () {
|
|
201
|
+
return reject(new Error('Authorization timed out.'));
|
|
202
|
+
}, ms);
|
|
203
|
+
})]);
|
|
204
|
+
};
|
|
205
|
+
var retrieveJwt = exports.retrieveJwt = /*#__PURE__*/function () {
|
|
206
|
+
var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4() {
|
|
207
|
+
var redirectUri, codeVerifier, codeChallenge, result;
|
|
208
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context4) {
|
|
209
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
210
|
+
case 0:
|
|
211
|
+
redirectUri = "".concat(checkedOrigin, "/app/oauth/callback");
|
|
212
|
+
codeVerifier = generateCodeVerifier();
|
|
213
|
+
_context4.next = 4;
|
|
214
|
+
return generateCodeChallenge(codeVerifier);
|
|
215
|
+
case 4:
|
|
216
|
+
codeChallenge = _context4.sent;
|
|
217
|
+
_context4.prev = 5;
|
|
218
|
+
_context4.next = 8;
|
|
219
|
+
return withTimeout(attemptAuthorize(redirectUri, codeVerifier, codeChallenge), AUTHORIZE_TIMEOUT_MS);
|
|
220
|
+
case 8:
|
|
221
|
+
result = _context4.sent;
|
|
222
|
+
return _context4.abrupt("return", result.status === 'success' ? result.token : undefined);
|
|
223
|
+
case 12:
|
|
224
|
+
_context4.prev = 12;
|
|
225
|
+
_context4.t0 = _context4["catch"](5);
|
|
226
|
+
console.error('there was a problem during authorization:', _context4.t0);
|
|
227
|
+
return _context4.abrupt("return", undefined);
|
|
228
|
+
case 16:
|
|
229
|
+
case "end":
|
|
230
|
+
return _context4.stop();
|
|
231
|
+
}
|
|
232
|
+
}, _callee4, null, [[5, 12]]);
|
|
233
|
+
}));
|
|
234
|
+
return function retrieveJwt() {
|
|
235
|
+
return _ref5.apply(this, arguments);
|
|
236
|
+
};
|
|
237
|
+
}();
|
|
64
238
|
var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimensions) {
|
|
65
239
|
var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '_blank';
|
|
66
240
|
return new Promise(function (resolve) {
|
|
67
241
|
var options = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, dimensions), getPopupPosition(window, dimensions));
|
|
68
|
-
var endpoint = _helpers.bundle.spaceLocation() + '/app/
|
|
242
|
+
var endpoint = _helpers.bundle.spaceLocation() + '/app/saml2/login/alias/' + spaceSlug;
|
|
69
243
|
var popup = window.open(endpoint, target, stringifyOptions(options));
|
|
70
244
|
if (!popup) {
|
|
71
245
|
resolve({
|
|
@@ -91,30 +265,30 @@ var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimen
|
|
|
91
265
|
// show error. Otherwise, check if profile is avilable to verify successful
|
|
92
266
|
// authentication.
|
|
93
267
|
var checkPopup = /*#__PURE__*/function () {
|
|
94
|
-
var
|
|
95
|
-
return (0, _regeneratorRuntime2["default"])().wrap(function
|
|
96
|
-
while (1) switch (
|
|
268
|
+
var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee5() {
|
|
269
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee5$(_context5) {
|
|
270
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
97
271
|
case 0:
|
|
98
272
|
if (!popup.closed) {
|
|
99
|
-
|
|
273
|
+
_context5.next = 4;
|
|
100
274
|
break;
|
|
101
275
|
}
|
|
102
276
|
resolve({
|
|
103
277
|
error: 'Enterprise Sign In was cancelled.'
|
|
104
278
|
});
|
|
105
|
-
|
|
279
|
+
_context5.next = 12;
|
|
106
280
|
break;
|
|
107
281
|
case 4:
|
|
108
|
-
|
|
282
|
+
_context5.next = 6;
|
|
109
283
|
return profileAvailable();
|
|
110
284
|
case 6:
|
|
111
|
-
if (!
|
|
112
|
-
|
|
285
|
+
if (!_context5.sent) {
|
|
286
|
+
_context5.next = 11;
|
|
113
287
|
break;
|
|
114
288
|
}
|
|
115
289
|
popup.close();
|
|
116
290
|
resolve({});
|
|
117
|
-
|
|
291
|
+
_context5.next = 12;
|
|
118
292
|
break;
|
|
119
293
|
case 11:
|
|
120
294
|
if (pollCounter > 0) {
|
|
@@ -128,12 +302,12 @@ var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimen
|
|
|
128
302
|
}
|
|
129
303
|
case 12:
|
|
130
304
|
case "end":
|
|
131
|
-
return
|
|
305
|
+
return _context5.stop();
|
|
132
306
|
}
|
|
133
|
-
},
|
|
307
|
+
}, _callee5);
|
|
134
308
|
}));
|
|
135
309
|
return function checkPopup() {
|
|
136
|
-
return
|
|
310
|
+
return _ref6.apply(this, arguments);
|
|
137
311
|
};
|
|
138
312
|
}();
|
|
139
313
|
|
|
@@ -145,48 +319,48 @@ var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimen
|
|
|
145
319
|
// Checks to see if the user has been authenticated via SSO by checking if the
|
|
146
320
|
// profile endpoint successfully returns data.
|
|
147
321
|
var profileAvailable = /*#__PURE__*/function () {
|
|
148
|
-
var
|
|
149
|
-
return (0, _regeneratorRuntime2["default"])().wrap(function
|
|
150
|
-
while (1) switch (
|
|
322
|
+
var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee7() {
|
|
323
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee7$(_context7) {
|
|
324
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
151
325
|
case 0:
|
|
152
|
-
return
|
|
153
|
-
var
|
|
326
|
+
return _context7.abrupt("return", new Promise( /*#__PURE__*/function () {
|
|
327
|
+
var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee6(resolve) {
|
|
154
328
|
var result;
|
|
155
|
-
return (0, _regeneratorRuntime2["default"])().wrap(function
|
|
156
|
-
while (1) switch (
|
|
329
|
+
return (0, _regeneratorRuntime2["default"])().wrap(function _callee6$(_context6) {
|
|
330
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
157
331
|
case 0:
|
|
158
|
-
|
|
159
|
-
|
|
332
|
+
_context6.prev = 0;
|
|
333
|
+
_context6.next = 3;
|
|
160
334
|
return (0, _profile.fetchProfile)({
|
|
161
335
|
"public": true
|
|
162
336
|
});
|
|
163
337
|
case 3:
|
|
164
|
-
result =
|
|
338
|
+
result = _context6.sent;
|
|
165
339
|
resolve(!!result.profile);
|
|
166
|
-
|
|
340
|
+
_context6.next = 10;
|
|
167
341
|
break;
|
|
168
342
|
case 7:
|
|
169
|
-
|
|
170
|
-
|
|
343
|
+
_context6.prev = 7;
|
|
344
|
+
_context6.t0 = _context6["catch"](0);
|
|
171
345
|
resolve(false);
|
|
172
346
|
case 10:
|
|
173
347
|
case "end":
|
|
174
|
-
return
|
|
348
|
+
return _context6.stop();
|
|
175
349
|
}
|
|
176
|
-
},
|
|
350
|
+
}, _callee6, null, [[0, 7]]);
|
|
177
351
|
}));
|
|
178
|
-
return function (
|
|
179
|
-
return
|
|
352
|
+
return function (_x5) {
|
|
353
|
+
return _ref8.apply(this, arguments);
|
|
180
354
|
};
|
|
181
355
|
}()));
|
|
182
356
|
case 1:
|
|
183
357
|
case "end":
|
|
184
|
-
return
|
|
358
|
+
return _context7.stop();
|
|
185
359
|
}
|
|
186
|
-
},
|
|
360
|
+
}, _callee7);
|
|
187
361
|
}));
|
|
188
362
|
return function profileAvailable() {
|
|
189
|
-
return
|
|
363
|
+
return _ref7.apply(this, arguments);
|
|
190
364
|
};
|
|
191
365
|
}();
|
|
192
366
|
|
|
@@ -200,9 +374,9 @@ var stringifyOptions = function stringifyOptions(options) {
|
|
|
200
374
|
|
|
201
375
|
// Given the dimensions of the popup and the parent window returns the correct
|
|
202
376
|
// position for the popup to be centered within the parent.
|
|
203
|
-
var getPopupPosition = function getPopupPosition(window,
|
|
204
|
-
var width =
|
|
205
|
-
height =
|
|
377
|
+
var getPopupPosition = function getPopupPosition(window, _ref9) {
|
|
378
|
+
var width = _ref9.width,
|
|
379
|
+
height = _ref9.height;
|
|
206
380
|
return {
|
|
207
381
|
top: window.screenY + window.innerHeight / 2 - height / 2,
|
|
208
382
|
left: window.screenX + window.innerWidth / 2 - width / 2
|