@zengenti/contensis-react-base 3.0.2-beta.30 → 3.0.2-beta.32
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/cjs/{App-eefb5b8f.js → App-21a7d836.js} +29 -61
- package/cjs/App-21a7d836.js.map +1 -0
- package/cjs/{ContensisDeliveryApi-e2b3ce60.js → ContensisDeliveryApi-c079b03a.js} +35 -68
- package/cjs/ContensisDeliveryApi-c079b03a.js.map +1 -0
- package/cjs/{RouteLoader-85bee645.js → RouteLoader-7f0d107a.js} +5 -9
- package/cjs/RouteLoader-7f0d107a.js.map +1 -0
- package/cjs/{ToJs-29de3c36.js → ToJs-6e9cfa69.js} +2 -2
- package/cjs/ToJs-6e9cfa69.js.map +1 -0
- package/cjs/_commonjsHelpers-b3309d7b.js +11 -0
- package/cjs/_commonjsHelpers-b3309d7b.js.map +1 -0
- package/cjs/client.js +11 -15
- package/cjs/client.js.map +1 -1
- package/cjs/contensis-react-base.js +350 -28
- package/cjs/contensis-react-base.js.map +1 -1
- package/cjs/forms.js +3057 -1046
- package/cjs/forms.js.map +1 -1
- package/cjs/{ChangePassword.container-7306be55.js → login-2a6b5be0.js} +84 -247
- package/cjs/login-2a6b5be0.js.map +1 -0
- package/cjs/redux.js +3 -3
- package/cjs/routing.js +3 -5
- package/cjs/routing.js.map +1 -1
- package/cjs/{selectors-a6eac513.js → selectors-bcca60f4.js} +9 -5
- package/cjs/selectors-bcca60f4.js.map +1 -0
- package/cjs/user.js +159 -34
- package/cjs/user.js.map +1 -1
- package/cjs/util.js +3 -7
- package/cjs/util.js.map +1 -1
- package/cjs/{version-9edb5540.js → version-4077e706.js} +2 -2
- package/cjs/{version-9edb5540.js.map → version-4077e706.js.map} +1 -1
- package/cjs/{version-d3b5fbde.js → version-fe28099e.js} +3 -3
- package/cjs/{version-d3b5fbde.js.map → version-fe28099e.js.map} +1 -1
- package/esm/{App-2db3d689.js → App-2af18a99.js} +24 -55
- package/esm/App-2af18a99.js.map +1 -0
- package/esm/{ContensisDeliveryApi-50b8fd7c.js → ContensisDeliveryApi-5660ee0e.js} +36 -67
- package/esm/ContensisDeliveryApi-5660ee0e.js.map +1 -0
- package/esm/{RouteLoader-3e77f6a4.js → RouteLoader-6eac364e.js} +5 -9
- package/esm/RouteLoader-6eac364e.js.map +1 -0
- package/esm/{ToJs-e533a70a.js → ToJs-9b30636a.js} +2 -2
- package/esm/ToJs-9b30636a.js.map +1 -0
- package/esm/_commonjsHelpers-1789f0cf.js +8 -0
- package/esm/_commonjsHelpers-1789f0cf.js.map +1 -0
- package/esm/client.js +12 -16
- package/esm/client.js.map +1 -1
- package/esm/contensis-react-base.js +350 -27
- package/esm/contensis-react-base.js.map +1 -1
- package/esm/forms.js +3058 -1047
- package/esm/forms.js.map +1 -1
- package/esm/{ChangePassword.container-54b4011d.js → login-71ff3fcb.js} +78 -230
- package/esm/login-71ff3fcb.js.map +1 -0
- package/esm/redux.js +6 -6
- package/esm/routing.js +3 -5
- package/esm/routing.js.map +1 -1
- package/esm/{selectors-5061d7c8.js → selectors-74de49a3.js} +10 -5
- package/esm/selectors-74de49a3.js.map +1 -0
- package/esm/user.js +151 -22
- package/esm/user.js.map +1 -1
- package/esm/util.js +3 -5
- package/esm/util.js.map +1 -1
- package/esm/{version-7550d14d.js → version-b15807c5.js} +3 -3
- package/esm/{version-7550d14d.js.map → version-b15807c5.js.map} +1 -1
- package/esm/{version-1ef42ad1.js → version-ef107106.js} +2 -2
- package/esm/{version-1ef42ad1.js.map → version-ef107106.js.map} +1 -1
- package/models/client/client.d.ts +1 -1
- package/models/config.d.ts +4 -4
- package/models/redux/appstate.d.ts +1 -1
- package/models/routing/redux/actions.d.ts +6 -10
- package/models/routing/redux/selectors.d.ts +3 -3
- package/models/routing/redux/types.d.ts +1 -0
- package/models/routing/routes.d.ts +17 -20
- package/models/search/models/Queries.d.ts +10 -8
- package/models/search/models/Search.d.ts +24 -24
- package/models/search/models/SearchActions.d.ts +33 -33
- package/models/search/models/SearchState.d.ts +11 -11
- package/models/search/models/SearchUtil.d.ts +1 -1
- package/models/search/models/WithSearch.d.ts +1 -1
- package/models/search/redux/actions.d.ts +4 -4
- package/models/search/redux/selectors.d.ts +27 -27
- package/models/search/redux/util.d.ts +1 -1
- package/models/search/search/expressions.d.ts +4 -4
- package/models/search/search/util.d.ts +2 -2
- package/models/search/transformations/state-to-queryparams.mapper.d.ts +1 -1
- package/models/server/features/linkdepth-api/LinkDepthSearchService.d.ts +1 -1
- package/models/server/features/linkdepth-api/search.d.ts +2 -2
- package/models/server/internalServer.d.ts +5 -7
- package/models/server/util/bundles.d.ts +2 -2
- package/models/server/util/handleExceptions.d.ts +1 -1
- package/models/testImmer/redux/reducer.d.ts +1 -1
- package/models/user/components/Login.d.ts +3 -2
- package/models/user/containers/ChangePassword.container.d.ts +2 -2
- package/models/user/containers/ForgotPassword.container.d.ts +2 -2
- package/models/user/containers/Login.container.d.ts +2 -2
- package/models/user/containers/Registration.container.d.ts +2 -2
- package/models/user/hocs/withLogin.d.ts +11 -5
- package/models/user/hocs/withRegistration.d.ts +8 -2
- package/models/user/redux/actions.d.ts +2 -2
- package/models/user/redux/sagas/login.d.ts +8 -9
- package/models/user/redux/selectors.d.ts +4 -4
- package/models/user/util/CookieHelper.class.d.ts +3 -15
- package/models/user/util/LoginHelper.class.d.ts +23 -27
- package/models/util/ContensisDeliveryApi.d.ts +14 -21
- package/models/util/ToJs.d.ts +1 -1
- package/models/util/index.d.ts +1 -1
- package/models/util/json-mapper.d.ts +1 -1
- package/package.json +10 -9
- package/cjs/App-eefb5b8f.js.map +0 -1
- package/cjs/ChangePassword.container-7306be55.js.map +0 -1
- package/cjs/ContensisDeliveryApi-e2b3ce60.js.map +0 -1
- package/cjs/CookieConstants-000427db.js +0 -10
- package/cjs/CookieConstants-000427db.js.map +0 -1
- package/cjs/CookieHelper.class-daeb09dd.js +0 -52
- package/cjs/CookieHelper.class-daeb09dd.js.map +0 -1
- package/cjs/RouteLoader-85bee645.js.map +0 -1
- package/cjs/ToJs-29de3c36.js.map +0 -1
- package/cjs/selectors-a6eac513.js.map +0 -1
- package/esm/App-2db3d689.js.map +0 -1
- package/esm/ChangePassword.container-54b4011d.js.map +0 -1
- package/esm/ContensisDeliveryApi-50b8fd7c.js.map +0 -1
- package/esm/CookieConstants-3d3b6531.js +0 -6
- package/esm/CookieConstants-3d3b6531.js.map +0 -1
- package/esm/CookieHelper.class-4d6ee27b.js +0 -49
- package/esm/CookieHelper.class-4d6ee27b.js.map +0 -1
- package/esm/RouteLoader-3e77f6a4.js.map +0 -1
- package/esm/ToJs-e533a70a.js.map +0 -1
- package/esm/selectors-5061d7c8.js.map +0 -1
- package/models/user/util/CookieConstants.d.ts +0 -7
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { takeEvery, put, call, select } from '@redux-saga/core/effects';
|
|
2
|
-
import { L as LOGIN_USER, n as LOGOUT_USER, V as VALIDATE_USER, S as SET_AUTHENTICATION_STATE
|
|
3
|
-
import { a as selectUserIsAuthenticated, b as selectUserGroups, m as matchUserGroup, s as selectClientCredentials
|
|
4
|
-
import { q as queryParams, o as selectCurrentSearch, p as setRoute
|
|
2
|
+
import { L as LOGIN_USER, n as LOGOUT_USER, V as VALIDATE_USER, S as SET_AUTHENTICATION_STATE } from './reducers-3d5c37d1.js';
|
|
3
|
+
import { a as selectUserIsAuthenticated, b as selectUserGroups, m as matchUserGroup, s as selectClientCredentials } from './ToJs-9b30636a.js';
|
|
4
|
+
import { q as queryParams, o as selectCurrentSearch, p as setRoute } from './selectors-74de49a3.js';
|
|
5
5
|
import mapJson from 'jsonpath-mapper';
|
|
6
6
|
import { to } from 'await-to-js';
|
|
7
|
-
import
|
|
8
|
-
import { useCookies } from 'react-cookie';
|
|
9
|
-
import { useDispatch, useSelector } from 'react-redux';
|
|
10
|
-
import { C as CookieHelper } from './CookieHelper.class-4d6ee27b.js';
|
|
7
|
+
import JSCookie from 'js-cookie';
|
|
11
8
|
|
|
12
9
|
const findContentTypeMapping = (ContentTypeMappings, contentTypeId) => ContentTypeMappings.find(ct => ct.contentTypeID === contentTypeId);
|
|
13
10
|
|
|
@@ -55,15 +52,9 @@ const getManagementApiClient = async ({
|
|
|
55
52
|
}
|
|
56
53
|
};
|
|
57
54
|
}
|
|
58
|
-
|
|
55
|
+
const {
|
|
59
56
|
Client
|
|
60
57
|
} = await import('contensis-management-api');
|
|
61
|
-
if (typeof window === 'undefined') {
|
|
62
|
-
const {
|
|
63
|
-
UniversalClient
|
|
64
|
-
} = await import('contensis-management-api');
|
|
65
|
-
Client = UniversalClient;
|
|
66
|
-
}
|
|
67
58
|
const client = Client.create({
|
|
68
59
|
...config,
|
|
69
60
|
projectId,
|
|
@@ -77,6 +68,32 @@ const getManagementApiClient = async ({
|
|
|
77
68
|
return client;
|
|
78
69
|
};
|
|
79
70
|
|
|
71
|
+
const COOKIE_VALID_DAYS = 1; // 0 = Session cookie
|
|
72
|
+
|
|
73
|
+
// Override the default js-cookie conversion / encoding
|
|
74
|
+
// methods so the written values work with Contensis sites
|
|
75
|
+
const Cookies = JSCookie.withConverter({
|
|
76
|
+
read: value => decodeURIComponent(value),
|
|
77
|
+
write: value => encodeURIComponent(value)
|
|
78
|
+
});
|
|
79
|
+
class CookieHelper {
|
|
80
|
+
static GetCookie(name) {
|
|
81
|
+
const cookie = Cookies.get(name);
|
|
82
|
+
if (typeof cookie === 'undefined') {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
return cookie;
|
|
86
|
+
}
|
|
87
|
+
static SetCookie(name, value, maxAgeDays = COOKIE_VALID_DAYS) {
|
|
88
|
+
if (maxAgeDays === 0) Cookies.set(name, value);else Cookies.set(name, value, {
|
|
89
|
+
expires: maxAgeDays
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
static DeleteCookie(name) {
|
|
93
|
+
Cookies.remove(name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
80
97
|
const context$1 = typeof window != 'undefined' ? window : global;
|
|
81
98
|
const requireOidc = process.env.NODE_ENV === 'development' ? WSFED_LOGIN === 'true' /* global WSFED_LOGIN */ : context$1.WSFED_LOGIN === 'true';
|
|
82
99
|
const servers = SERVERS; /* global SERVERS */
|
|
@@ -104,32 +121,30 @@ const createUserManager = async config => {
|
|
|
104
121
|
};
|
|
105
122
|
|
|
106
123
|
/* eslint-disable require-atomic-updates */
|
|
124
|
+
const LOGIN_COOKIE = 'ContensisCMSUserName';
|
|
125
|
+
const REFRESH_TOKEN_COOKIE = 'RefreshToken';
|
|
107
126
|
const context = typeof window != 'undefined' ? window : global;
|
|
108
127
|
class LoginHelper {
|
|
109
|
-
|
|
110
|
-
this.cookies = void 0;
|
|
111
|
-
this.cookies = cookies;
|
|
112
|
-
}
|
|
113
|
-
SetLoginCookies({
|
|
128
|
+
static SetLoginCookies({
|
|
114
129
|
contensisClassicToken,
|
|
115
130
|
refreshToken
|
|
116
131
|
}) {
|
|
117
132
|
console.info('SetLoginCookies:', LOGIN_COOKIE, contensisClassicToken, REFRESH_TOKEN_COOKIE, refreshToken);
|
|
118
|
-
if (contensisClassicToken)
|
|
119
|
-
if (refreshToken)
|
|
133
|
+
if (contensisClassicToken) CookieHelper.SetCookie(LOGIN_COOKIE, contensisClassicToken);
|
|
134
|
+
if (refreshToken) CookieHelper.SetCookie(REFRESH_TOKEN_COOKIE, refreshToken);
|
|
120
135
|
}
|
|
121
|
-
GetCachedCredentials() {
|
|
136
|
+
static GetCachedCredentials() {
|
|
122
137
|
return {
|
|
123
138
|
bearerToken: null,
|
|
124
139
|
bearerTokenExpiryDate: null,
|
|
125
|
-
refreshToken:
|
|
140
|
+
refreshToken: CookieHelper.GetCookie(REFRESH_TOKEN_COOKIE),
|
|
126
141
|
refreshTokenExpiryDate: null,
|
|
127
|
-
contensisClassicToken:
|
|
142
|
+
contensisClassicToken: CookieHelper.GetCookie(LOGIN_COOKIE)
|
|
128
143
|
};
|
|
129
144
|
}
|
|
130
|
-
ClearCachedCredentials() {
|
|
131
|
-
|
|
132
|
-
|
|
145
|
+
static ClearCachedCredentials() {
|
|
146
|
+
CookieHelper.DeleteCookie(LOGIN_COOKIE);
|
|
147
|
+
CookieHelper.DeleteCookie(REFRESH_TOKEN_COOKIE);
|
|
133
148
|
if (LoginHelper.WSFED_LOGIN && typeof window !== 'undefined') {
|
|
134
149
|
// remove any oidc keys left over in localStorage
|
|
135
150
|
const {
|
|
@@ -143,7 +158,7 @@ class LoginHelper {
|
|
|
143
158
|
keys.forEach(key => localStorage.removeItem(key));
|
|
144
159
|
}
|
|
145
160
|
}
|
|
146
|
-
async LoginUser({
|
|
161
|
+
static async LoginUser({
|
|
147
162
|
username,
|
|
148
163
|
password,
|
|
149
164
|
clientCredentials
|
|
@@ -176,14 +191,14 @@ class LoginHelper {
|
|
|
176
191
|
isAuthenticationError: loginError.name.includes('ContensisAuthenticationError'),
|
|
177
192
|
isError: true
|
|
178
193
|
};
|
|
179
|
-
|
|
194
|
+
LoginHelper.ClearCachedCredentials();
|
|
180
195
|
}
|
|
181
196
|
|
|
182
197
|
// Got a token using username and password
|
|
183
198
|
if (clientBearerToken) {
|
|
184
199
|
// Set credentials so we can continue to GetUserDetails
|
|
185
200
|
credentials = mapClientCredentials(transientClient);
|
|
186
|
-
|
|
201
|
+
LoginHelper.SetLoginCookies(credentials);
|
|
187
202
|
authenticationState = {
|
|
188
203
|
clientCredentials: credentials,
|
|
189
204
|
isAuthenticated: true,
|
|
@@ -207,11 +222,11 @@ class LoginHelper {
|
|
|
207
222
|
isAuthenticationError: false,
|
|
208
223
|
isError: true
|
|
209
224
|
};
|
|
210
|
-
|
|
225
|
+
LoginHelper.ClearCachedCredentials();
|
|
211
226
|
} else {
|
|
212
227
|
// Ensure we get latest refreshToken and contensisClassicToken from the latest client
|
|
213
228
|
const latestCredentials = mapClientCredentials(client);
|
|
214
|
-
|
|
229
|
+
LoginHelper.SetLoginCookies(latestCredentials);
|
|
215
230
|
user = userDetails;
|
|
216
231
|
authenticationState = {
|
|
217
232
|
clientCredentials: latestCredentials,
|
|
@@ -226,8 +241,8 @@ class LoginHelper {
|
|
|
226
241
|
user
|
|
227
242
|
};
|
|
228
243
|
}
|
|
229
|
-
LogoutUser(redirectPath) {
|
|
230
|
-
|
|
244
|
+
static LogoutUser(redirectPath) {
|
|
245
|
+
LoginHelper.ClearCachedCredentials();
|
|
231
246
|
if (LoginHelper.WSFED_LOGIN) {
|
|
232
247
|
LoginHelper.WsFedLogout(redirectPath);
|
|
233
248
|
} else {
|
|
@@ -249,7 +264,6 @@ class LoginHelper {
|
|
|
249
264
|
}
|
|
250
265
|
}
|
|
251
266
|
static async ClientRedirectToSignInPage(redirectPath) {
|
|
252
|
-
if (typeof location === 'undefined') return;
|
|
253
267
|
if (LoginHelper.WSFED_LOGIN) {
|
|
254
268
|
await LoginHelper.WsFedLogout();
|
|
255
269
|
await LoginHelper.WsFedLogin();
|
|
@@ -260,13 +274,11 @@ class LoginHelper {
|
|
|
260
274
|
if (typeof location !== 'undefined' && redirectPath !== LoginHelper.LOGIN_ROUTE) location.replace(url);
|
|
261
275
|
}
|
|
262
276
|
}
|
|
263
|
-
static GetAccessDeniedRoute(originalPath) {
|
|
264
|
-
let url = LoginHelper.ACCESS_DENIED_ROUTE;
|
|
265
|
-
if (originalPath !== url && typeof originalPath === 'string') url = `${url}?original_uri=${originalPath}`;
|
|
266
|
-
return url;
|
|
267
|
-
}
|
|
268
277
|
static ClientRedirectToAccessDeniedPage(originalPath) {
|
|
269
|
-
|
|
278
|
+
let url = LoginHelper.ACCESS_DENIED_ROUTE;
|
|
279
|
+
if (originalPath === url) return;
|
|
280
|
+
if (typeof originalPath === 'string') url = `${url}?original_uri=${originalPath}`;
|
|
281
|
+
if (typeof location !== 'undefined') location.href = url;
|
|
270
282
|
}
|
|
271
283
|
static ClientRedirectToPath(redirectPath) {
|
|
272
284
|
if (typeof redirectPath === 'string') {
|
|
@@ -323,7 +335,6 @@ class LoginHelper {
|
|
|
323
335
|
ApplicationData = []
|
|
324
336
|
} = body;
|
|
325
337
|
if (LogonResult !== 0) {
|
|
326
|
-
console.info(`Security token is invalid - LogonResult: ${LogonResult}`);
|
|
327
338
|
return [{
|
|
328
339
|
message: 'Security token is invalid',
|
|
329
340
|
data: ApplicationData
|
|
@@ -366,7 +377,6 @@ LoginHelper.CMS_URL = SERVERS.cms /* global SERVERS */;
|
|
|
366
377
|
LoginHelper.WSFED_LOGIN = process.env.NODE_ENV === 'development' ? WSFED_LOGIN === 'true' /* global WSFED_LOGIN */ : context.WSFED_LOGIN === 'true';
|
|
367
378
|
LoginHelper.LOGIN_ROUTE = '/account/login';
|
|
368
379
|
LoginHelper.ACCESS_DENIED_ROUTE = '/account/access-denied';
|
|
369
|
-
LoginHelper.withCookies = cookieHelper => new LoginHelper(cookieHelper);
|
|
370
380
|
LoginHelper.GetUserDetails = async client => {
|
|
371
381
|
let userError,
|
|
372
382
|
groupsError,
|
|
@@ -396,9 +406,7 @@ const loginSagas = [takeEvery(LOGIN_USER, loginUserSaga), takeEvery(LOGOUT_USER,
|
|
|
396
406
|
function* handleRequiresLoginSaga(action) {
|
|
397
407
|
var _entry$sys;
|
|
398
408
|
const {
|
|
399
|
-
cookies,
|
|
400
409
|
entry,
|
|
401
|
-
path,
|
|
402
410
|
requireLogin,
|
|
403
411
|
routes: {
|
|
404
412
|
ContentTypeMappings
|
|
@@ -427,18 +435,14 @@ function* handleRequiresLoginSaga(action) {
|
|
|
427
435
|
// If cookies or securityToken are found on any route change
|
|
428
436
|
// always validate and login the user
|
|
429
437
|
if (routeRequiresLogin) {
|
|
430
|
-
console.info(`Route requires login: ${path}`);
|
|
431
438
|
// If routeRequiresLogin do a blocking call that returns userLoggedIn
|
|
432
439
|
userLoggedIn = yield call(validateUserSaga, {
|
|
433
|
-
cookies,
|
|
434
440
|
securityToken
|
|
435
441
|
});
|
|
436
|
-
console.info(`User logged in: ${userLoggedIn}`);
|
|
437
442
|
}
|
|
438
443
|
// otherwise do a non blocking put to handle validation in the background
|
|
439
444
|
else yield put({
|
|
440
445
|
type: VALIDATE_USER,
|
|
441
|
-
cookies,
|
|
442
446
|
securityToken
|
|
443
447
|
});
|
|
444
448
|
}
|
|
@@ -453,16 +457,13 @@ function* handleRequiresLoginSaga(action) {
|
|
|
453
457
|
if (!groupMatch) LoginHelper.ClientRedirectToAccessDeniedPage(action.location.pathname);
|
|
454
458
|
}
|
|
455
459
|
}
|
|
456
|
-
return userLoggedIn;
|
|
457
460
|
}
|
|
458
461
|
function* validateUserSaga({
|
|
459
|
-
cookies,
|
|
460
462
|
securityToken
|
|
461
463
|
}) {
|
|
462
|
-
const login = LoginHelper.withCookies(cookies);
|
|
463
464
|
// Check for refreshToken in cookies
|
|
464
|
-
let clientCredentials =
|
|
465
|
-
if (securityToken || clientCredentials.
|
|
465
|
+
let clientCredentials = LoginHelper.GetCachedCredentials();
|
|
466
|
+
if (securityToken || clientCredentials.refreshToken) {
|
|
466
467
|
// We only attempt to validate the user if one of the stored
|
|
467
468
|
// tokens are found, in this case we set loading state manually
|
|
468
469
|
// so we don't need to set and unset loading if there are no stored
|
|
@@ -474,36 +475,26 @@ function* validateUserSaga({
|
|
|
474
475
|
});
|
|
475
476
|
// If we have just a security token we will call a CMS endpoint
|
|
476
477
|
// and provide us with a RefreshToken cookie we can use during login
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
clientCredentials = login.GetCachedCredentials();
|
|
486
|
-
}
|
|
487
|
-
if (error) {
|
|
488
|
-
login.ClearCachedCredentials();
|
|
489
|
-
yield put({
|
|
490
|
-
type: SET_AUTHENTICATION_STATE,
|
|
491
|
-
authenticationState: {
|
|
492
|
-
isError: true,
|
|
493
|
-
errorMessage: (error === null || error === void 0 ? void 0 : error.message) || error && 'toString' in error && error.toString()
|
|
494
|
-
}
|
|
495
|
-
});
|
|
496
|
-
}
|
|
478
|
+
const [error, refreshToken] = yield LoginHelper.GetCredentialsForSecurityToken(securityToken);
|
|
479
|
+
if (refreshToken) {
|
|
480
|
+
// Set cookies and reload values
|
|
481
|
+
LoginHelper.SetLoginCookies({
|
|
482
|
+
contensisClassicToken: securityToken,
|
|
483
|
+
refreshToken
|
|
484
|
+
});
|
|
485
|
+
clientCredentials = LoginHelper.GetCachedCredentials();
|
|
497
486
|
}
|
|
498
487
|
|
|
499
488
|
// Log the user in if a refreshToken is found
|
|
500
|
-
if (clientCredentials.refreshToken) {
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
489
|
+
if (clientCredentials.refreshToken) yield call(loginUserSaga, {
|
|
490
|
+
clientCredentials
|
|
491
|
+
});else if (error) yield put({
|
|
492
|
+
type: SET_AUTHENTICATION_STATE,
|
|
493
|
+
authenticationState: {
|
|
494
|
+
isError: true,
|
|
495
|
+
errorMessage: (error === null || error === void 0 ? void 0 : error.message) || error && 'toString' in error && error.toString()
|
|
496
|
+
}
|
|
497
|
+
});
|
|
507
498
|
}
|
|
508
499
|
|
|
509
500
|
// Tell any callers have we successfully logged in?
|
|
@@ -513,10 +504,8 @@ function* loginUserSaga(action = {}) {
|
|
|
513
504
|
const {
|
|
514
505
|
username,
|
|
515
506
|
password,
|
|
516
|
-
clientCredentials
|
|
517
|
-
cookies
|
|
507
|
+
clientCredentials
|
|
518
508
|
} = action;
|
|
519
|
-
const login = LoginHelper.withCookies(cookies);
|
|
520
509
|
|
|
521
510
|
// If a WSFED_LOGIN site has dispatched the loginUser action
|
|
522
511
|
// just redirect them to the Identity Provider sign in
|
|
@@ -524,7 +513,7 @@ function* loginUserSaga(action = {}) {
|
|
|
524
513
|
const {
|
|
525
514
|
authenticationState,
|
|
526
515
|
user
|
|
527
|
-
} = yield
|
|
516
|
+
} = yield LoginHelper.LoginUser({
|
|
528
517
|
username,
|
|
529
518
|
password,
|
|
530
519
|
clientCredentials
|
|
@@ -560,14 +549,13 @@ function* redirectAfterSuccessfulLoginSaga() {
|
|
|
560
549
|
}
|
|
561
550
|
}
|
|
562
551
|
function* logoutUserSaga({
|
|
563
|
-
redirectPath
|
|
564
|
-
cookies
|
|
552
|
+
redirectPath
|
|
565
553
|
}) {
|
|
566
554
|
yield put({
|
|
567
555
|
type: SET_AUTHENTICATION_STATE,
|
|
568
556
|
user: null
|
|
569
557
|
});
|
|
570
|
-
yield LoginHelper.
|
|
558
|
+
yield LoginHelper.LogoutUser(redirectPath);
|
|
571
559
|
}
|
|
572
560
|
function* refreshSecurityToken() {
|
|
573
561
|
const clientCredentials = yield select(selectClientCredentials, 'js');
|
|
@@ -583,145 +571,5 @@ function* refreshSecurityToken() {
|
|
|
583
571
|
}
|
|
584
572
|
}
|
|
585
573
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
password,
|
|
589
|
-
cookies
|
|
590
|
-
});
|
|
591
|
-
const logoutUser = (redirectPath, cookies) => action(LOGOUT_USER, {
|
|
592
|
-
redirectPath,
|
|
593
|
-
cookies
|
|
594
|
-
});
|
|
595
|
-
const registerUser = (user, mappers) => action(REGISTER_USER, {
|
|
596
|
-
user,
|
|
597
|
-
mappers
|
|
598
|
-
});
|
|
599
|
-
const requestPasswordReset = userEmailObject => action(REQUEST_USER_PASSWORD_RESET, {
|
|
600
|
-
userEmailObject
|
|
601
|
-
});
|
|
602
|
-
const resetPassword = resetPasswordObject => action(RESET_USER_PASSWORD, {
|
|
603
|
-
resetPasswordObject
|
|
604
|
-
});
|
|
605
|
-
const changePassword = (userId, currentPassword, newPassword) => action(CHANGE_USER_PASSWORD, {
|
|
606
|
-
userId,
|
|
607
|
-
currentPassword,
|
|
608
|
-
newPassword
|
|
609
|
-
});
|
|
610
|
-
|
|
611
|
-
var actions = /*#__PURE__*/Object.freeze({
|
|
612
|
-
__proto__: null,
|
|
613
|
-
loginUser: loginUser,
|
|
614
|
-
logoutUser: logoutUser,
|
|
615
|
-
registerUser: registerUser,
|
|
616
|
-
requestPasswordReset: requestPasswordReset,
|
|
617
|
-
resetPassword: resetPassword,
|
|
618
|
-
changePassword: changePassword
|
|
619
|
-
});
|
|
620
|
-
|
|
621
|
-
const useLogin = () => {
|
|
622
|
-
const cookies = new CookieHelper(...useCookies());
|
|
623
|
-
const dispatch = useDispatch();
|
|
624
|
-
const select = useSelector;
|
|
625
|
-
return {
|
|
626
|
-
loginUser: (username, password) => dispatch(loginUser(username, password, cookies)),
|
|
627
|
-
logoutUser: redirectPath => dispatch(logoutUser(redirectPath, cookies)),
|
|
628
|
-
errorMessage: select(selectUserErrorMessage),
|
|
629
|
-
isAuthenticated: select(selectUserIsAuthenticated),
|
|
630
|
-
isAuthenticationError: select(selectUserIsAuthenticationError),
|
|
631
|
-
isError: select(selectUserIsError),
|
|
632
|
-
isLoading: select(selectUserIsLoading),
|
|
633
|
-
user: select(selectUser),
|
|
634
|
-
// DEPRECATED: authenticationError is deprecated use isAuthenticationError instead
|
|
635
|
-
authenticationError: select(selectUserIsAuthenticationError),
|
|
636
|
-
// DEPRECATED: authenticationErrorMessage is deprecated use errorMessage instead
|
|
637
|
-
authenticationErrorMessage: select(selectUserErrorMessage),
|
|
638
|
-
// DEPRECATED: error is deprecated use isError instead
|
|
639
|
-
error: select(selectUserIsError)
|
|
640
|
-
};
|
|
641
|
-
};
|
|
642
|
-
|
|
643
|
-
const LoginContainer = ({
|
|
644
|
-
children,
|
|
645
|
-
...props
|
|
646
|
-
}) => {
|
|
647
|
-
const userProps = useLogin();
|
|
648
|
-
return children(userProps);
|
|
649
|
-
};
|
|
650
|
-
LoginContainer.propTypes = {};
|
|
651
|
-
var Login_container = toJS(LoginContainer);
|
|
652
|
-
|
|
653
|
-
const useRegistration = () => {
|
|
654
|
-
const dispatch = useDispatch();
|
|
655
|
-
const select = useSelector;
|
|
656
|
-
return {
|
|
657
|
-
registerUser: (user, mappers) => dispatch(registerUser(user, mappers)),
|
|
658
|
-
error: select(selectUserRegistrationError),
|
|
659
|
-
isLoading: select(selectUserRegistrationIsLoading),
|
|
660
|
-
isSuccess: select(selectUserRegistrationIsSuccess),
|
|
661
|
-
user: select(selectUserRegistration)
|
|
662
|
-
};
|
|
663
|
-
};
|
|
664
|
-
|
|
665
|
-
const RegistrationContainer = ({
|
|
666
|
-
children,
|
|
667
|
-
...props
|
|
668
|
-
}) => {
|
|
669
|
-
const userProps = useRegistration();
|
|
670
|
-
return children(userProps);
|
|
671
|
-
};
|
|
672
|
-
RegistrationContainer.propTypes = {};
|
|
673
|
-
var Registration_container = toJS(RegistrationContainer);
|
|
674
|
-
|
|
675
|
-
const useForgotPassword = () => {
|
|
676
|
-
const dispatch = useDispatch();
|
|
677
|
-
const select = useSelector;
|
|
678
|
-
return {
|
|
679
|
-
isLoading: select(selectPasswordResetRequestSending),
|
|
680
|
-
isSuccess: select(selectPasswordResetRequestSent),
|
|
681
|
-
error: select(selectPasswordResetRequestError),
|
|
682
|
-
requestPasswordReset: userEmailObject => dispatch(requestPasswordReset(userEmailObject)),
|
|
683
|
-
setNewPassword: {
|
|
684
|
-
queryString: select(selectCurrentSearch),
|
|
685
|
-
isLoading: select(selectResetPasswordSending),
|
|
686
|
-
isSuccess: select(selectResetPasswordSent),
|
|
687
|
-
error: select(selectResetPasswordError),
|
|
688
|
-
submit: resetPasswordObject => dispatch(resetPassword(resetPasswordObject))
|
|
689
|
-
}
|
|
690
|
-
};
|
|
691
|
-
};
|
|
692
|
-
|
|
693
|
-
const ForgotPasswordContainer = ({
|
|
694
|
-
children,
|
|
695
|
-
...props
|
|
696
|
-
}) => {
|
|
697
|
-
const userProps = useForgotPassword();
|
|
698
|
-
return children(userProps);
|
|
699
|
-
};
|
|
700
|
-
ForgotPasswordContainer.propTypes = {};
|
|
701
|
-
var ForgotPassword_container = toJS(ForgotPasswordContainer);
|
|
702
|
-
|
|
703
|
-
const useChangePassword = () => {
|
|
704
|
-
const dispatch = useDispatch();
|
|
705
|
-
const select = useSelector;
|
|
706
|
-
return {
|
|
707
|
-
isLoading: select(selectChangePasswordSending),
|
|
708
|
-
isSuccess: select(selectChangePasswordSent),
|
|
709
|
-
userId: select(selectUserGuid),
|
|
710
|
-
isLoggedIn: select(selectUserIsAuthenticated),
|
|
711
|
-
error: select(selectChangePasswordError),
|
|
712
|
-
changePassword: (userId, currentPassword, newPassword) => dispatch(changePassword(userId, currentPassword, newPassword))
|
|
713
|
-
};
|
|
714
|
-
};
|
|
715
|
-
|
|
716
|
-
const ChangePasswordContainer = ({
|
|
717
|
-
children,
|
|
718
|
-
...props
|
|
719
|
-
}) => {
|
|
720
|
-
const userProps = useChangePassword();
|
|
721
|
-
return children(userProps);
|
|
722
|
-
};
|
|
723
|
-
ChangePasswordContainer.propTypes = {};
|
|
724
|
-
var ChangePassword_container = toJS(ChangePasswordContainer);
|
|
725
|
-
|
|
726
|
-
export { ChangePassword_container as C, ForgotPassword_container as F, LoginHelper as L, Registration_container as R, loginUser as a, logoutUser as b, actions as c, Login_container as d, useRegistration as e, findContentTypeMapping as f, getManagementApiClient as g, handleRequiresLoginSaga as h, useForgotPassword as i, useChangePassword as j, refreshSecurityToken as k, loginSagas as l, registerUser as r, useLogin as u };
|
|
727
|
-
//# sourceMappingURL=ChangePassword.container-54b4011d.js.map
|
|
574
|
+
export { LoginHelper as L, findContentTypeMapping as f, getManagementApiClient as g, handleRequiresLoginSaga as h, loginSagas as l, refreshSecurityToken as r };
|
|
575
|
+
//# sourceMappingURL=login-71ff3fcb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-71ff3fcb.js","sources":["../src/routing/util/find-contenttype-mapping.ts","../src/user/transformations/mapClientCredentials.js","../src/user/util/ContensisManagementApi.js","../src/user/util/CookieHelper.class.ts","../src/user/util/OidcUserManager.ts","../src/user/util/LoginHelper.class.js","../src/user/redux/sagas/login.js"],"sourcesContent":["import { ContentTypeMapping } from '../routes';\n\nexport const findContentTypeMapping = (\n ContentTypeMappings: ContentTypeMapping[],\n contentTypeId: string\n) => ContentTypeMappings.find(ct => ct.contentTypeID === contentTypeId);\n","import { mapJson } from '~/util/json-mapper';\n\nconst clientCredentials = {\n bearerToken: 'bearerToken',\n bearerTokenExpiryDate: ({ bearerTokenExpiryDate }) =>\n bearerTokenExpiryDate.toISOString(),\n refreshToken: 'refreshToken',\n refreshTokenExpiryDate: ({ refreshTokenExpiryDate }) =>\n refreshTokenExpiryDate.toISOString(),\n contensisClassicToken: 'contensisClassicToken',\n};\nexport default obj => mapJson(obj, clientCredentials);\n","// import { Client } from 'contensis-management-api';\n\nexport const getManagementApiClient = async ({\n bearerToken,\n bearerTokenExpiryDate,\n refreshToken,\n refreshTokenExpiryDate,\n contensisClassicToken,\n username,\n password,\n}) => {\n const rootUrl = SERVERS.api || SERVERS.cms; /* global SERVERS */\n const projectId = PROJECTS[0].id; /* global PROJECTS */\n\n let config = {};\n if (refreshToken) {\n config = {\n clientType: 'contensis_classic_refresh_token',\n clientDetails: {\n refreshToken,\n },\n };\n } else {\n config = {\n clientType: 'contensis_classic',\n clientDetails: {\n username,\n password,\n },\n };\n }\n const { Client } = await import('contensis-management-api');\n\n const client = Client.create({\n ...config,\n projectId,\n rootUrl,\n });\n\n if (bearerToken) client.bearerToken = bearerToken;\n if (bearerTokenExpiryDate)\n client.bearerTokenExpiryDate = bearerTokenExpiryDate;\n if (refreshToken) client.refreshToken = refreshToken;\n if (refreshTokenExpiryDate)\n client.refreshTokenExpiryDate = refreshTokenExpiryDate;\n if (contensisClassicToken)\n client.contensisClassicToken = contensisClassicToken;\n\n return client;\n};\n","import JSCookie from 'js-cookie';\n\nconst COOKIE_VALID_DAYS = 1; // 0 = Session cookie\n\n// Override the default js-cookie conversion / encoding\n// methods so the written values work with Contensis sites\nconst Cookies = JSCookie.withConverter({\n read: value => decodeURIComponent(value),\n write: value => encodeURIComponent(value),\n});\n\nexport class CookieHelper {\n static GetCookie(name) {\n const cookie = Cookies.get(name);\n if (typeof cookie === 'undefined') {\n return null;\n }\n return cookie;\n }\n\n static SetCookie(name, value, maxAgeDays = COOKIE_VALID_DAYS) {\n if (maxAgeDays === 0) Cookies.set(name, value);\n else Cookies.set(name, value, { expires: maxAgeDays });\n }\n\n static DeleteCookie(name) {\n Cookies.remove(name);\n }\n}\n","import { UserManagerSettings } from 'oidc-client';\n\nconst context = (\n typeof window != 'undefined' ? window : global\n) as typeof globalThis & {\n WSFED_LOGIN: string;\n};\n\nconst requireOidc =\n process.env.NODE_ENV === 'development'\n ? WSFED_LOGIN === 'true' /* global WSFED_LOGIN */\n : context.WSFED_LOGIN === 'true';\n\nconst servers = SERVERS; /* global SERVERS */\n\nexport const userManagerConfig =\n typeof window !== 'undefined'\n ? {\n authority: `${servers.cms}/authenticate/`,\n client_id: 'WebsiteAdfsClient',\n redirect_uri: window.location.toString(),\n post_logout_redirect_uri: window.location.toString(),\n response_type: 'id_token',\n scope: 'openid',\n filterProtocolClaims: false,\n }\n : {};\n\nexport const createUserManager = async (config: UserManagerSettings) => {\n if (typeof window !== 'undefined' && requireOidc) {\n try {\n const { UserManager } = await import(\n /* webpackChunkName: \"oidcclient\" */ 'oidc-client'\n );\n return new UserManager(config);\n } catch (e) {\n console.error('Exception in createUserManager: ', e);\n }\n } else return {};\n};\n","/* eslint-disable require-atomic-updates */\nimport { getManagementApiClient } from './ContensisManagementApi';\nimport { to } from 'await-to-js';\n\nimport { CookieHelper } from './CookieHelper.class';\n\nimport mapClientCredentials from '../transformations/mapClientCredentials';\nimport { createUserManager, userManagerConfig } from './OidcUserManager';\n\nconst LOGIN_COOKIE = 'ContensisCMSUserName';\nconst REFRESH_TOKEN_COOKIE = 'RefreshToken';\n\nconst context = typeof window != 'undefined' ? window : global;\n\nexport class LoginHelper {\n static CMS_URL = SERVERS.cms /* global SERVERS */;\n static WSFED_LOGIN =\n process.env.NODE_ENV === 'development'\n ? WSFED_LOGIN === 'true' /* global WSFED_LOGIN */\n : context.WSFED_LOGIN === 'true';\n static LOGIN_ROUTE = '/account/login';\n static ACCESS_DENIED_ROUTE = '/account/access-denied';\n\n static SetLoginCookies({ contensisClassicToken, refreshToken }) {\n console.info(\n 'SetLoginCookies:',\n LOGIN_COOKIE,\n contensisClassicToken,\n REFRESH_TOKEN_COOKIE,\n refreshToken\n );\n if (contensisClassicToken)\n CookieHelper.SetCookie(LOGIN_COOKIE, contensisClassicToken);\n if (refreshToken)\n CookieHelper.SetCookie(REFRESH_TOKEN_COOKIE, refreshToken);\n }\n\n static GetCachedCredentials() {\n return {\n bearerToken: null,\n bearerTokenExpiryDate: null,\n refreshToken: CookieHelper.GetCookie(REFRESH_TOKEN_COOKIE),\n refreshTokenExpiryDate: null,\n contensisClassicToken: CookieHelper.GetCookie(LOGIN_COOKIE),\n };\n }\n\n static ClearCachedCredentials() {\n CookieHelper.DeleteCookie(LOGIN_COOKIE);\n CookieHelper.DeleteCookie(REFRESH_TOKEN_COOKIE);\n\n if (LoginHelper.WSFED_LOGIN && typeof window !== 'undefined') {\n // remove any oidc keys left over in localStorage\n const { localStorage } = window;\n const keys = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (typeof key === 'string' && key.startsWith('oidc.'))\n keys.push(localStorage.key(i));\n }\n keys.forEach(key => localStorage.removeItem(key));\n }\n }\n\n static async LoginUser({ username, password, clientCredentials }) {\n let credentials = clientCredentials;\n let authenticationState = {\n clientCredentials: null,\n isAuthenticated: false,\n isAuthenticationError: false,\n isError: false,\n };\n let transientClient;\n let user;\n\n if (username && password) {\n // Get a management client with username and password\n transientClient = await getManagementApiClient({\n username,\n password,\n });\n\n // Ensure the client has requested a bearer token\n const [loginError, clientBearerToken] = await to(\n transientClient.ensureBearerToken()\n );\n\n // Problem getting token with username and password\n if (loginError) {\n authenticationState = {\n clientCredentials: null,\n errorMessage: loginError.message || null,\n isAuthenticated: false,\n isAuthenticationError: loginError.name.includes(\n 'ContensisAuthenticationError'\n ),\n isError: true,\n };\n LoginHelper.ClearCachedCredentials();\n }\n\n // Got a token using username and password\n if (clientBearerToken) {\n // Set credentials so we can continue to GetUserDetails\n credentials = mapClientCredentials(transientClient);\n LoginHelper.SetLoginCookies(credentials);\n authenticationState = {\n clientCredentials: credentials,\n isAuthenticated: true,\n isAuthenticationError: false,\n isError: false,\n };\n }\n }\n\n // If we have credentials supplied by a successful username and password login\n // or clientCredentials supplied in the options argument we can continue to\n // fetch the user's details\n if (credentials) {\n const client =\n transientClient || (await getManagementApiClient(credentials));\n const [error, userDetails] = await LoginHelper.GetUserDetails(client);\n\n if (error) {\n authenticationState = {\n clientCredentials: null,\n errorMessage: error.message,\n isAuthenticated: false,\n isAuthenticationError: false,\n isError: true,\n };\n LoginHelper.ClearCachedCredentials();\n } else {\n // Ensure we get latest refreshToken and contensisClassicToken from the latest client\n const latestCredentials = mapClientCredentials(client);\n LoginHelper.SetLoginCookies(latestCredentials);\n\n user = userDetails;\n authenticationState = {\n clientCredentials: latestCredentials,\n isAuthenticated: true,\n isAuthenticationError: false,\n isError: false,\n };\n }\n }\n\n return { authenticationState, user };\n }\n\n static GetUserDetails = async client => {\n let userError,\n groupsError,\n user = {},\n groupsResult;\n\n [userError, user] = await to(client.security.users.getCurrent());\n if (user && user.id) {\n [groupsError, groupsResult] = await to(\n client.security.users.getUserGroups({\n userId: user.id,\n includeInherited: true,\n pageOptions: { pageSize: 100 }\n })\n );\n // Set groups attribute in user object to be the items\n // array from the getUserGroups result\n if (groupsResult && groupsResult.items) user.groups = groupsResult.items;\n\n //If groups call fails then log the error but allow the user to login still\n // eslint-disable-next-line no-console\n if (groupsError) console.log(groupsError);\n }\n return [userError, user];\n };\n\n static LogoutUser(redirectPath) {\n LoginHelper.ClearCachedCredentials();\n if (LoginHelper.WSFED_LOGIN) {\n LoginHelper.WsFedLogout(redirectPath);\n } else {\n if (redirectPath) LoginHelper.ClientRedirectToPath(redirectPath);\n else LoginHelper.ClientRedirectToSignInPage();\n }\n }\n\n static ClientRedirectToHome(location) {\n if (typeof window != 'undefined') {\n let url = '/';\n if (location) {\n const { search, hash } = location;\n url = search ? `${url}${search}` : url;\n url = hash ? `${url}${hash}` : url;\n }\n window.location.href = url;\n }\n }\n\n static async ClientRedirectToSignInPage(redirectPath) {\n if (LoginHelper.WSFED_LOGIN) {\n await LoginHelper.WsFedLogout();\n await LoginHelper.WsFedLogin();\n } else {\n // Standard Contensis Login\n let url = LoginHelper.LOGIN_ROUTE;\n if (typeof redirectPath === 'string')\n url = `${url}?redirect_uri=${redirectPath}`;\n if (\n typeof location !== 'undefined' &&\n redirectPath !== LoginHelper.LOGIN_ROUTE\n )\n location.replace(url);\n }\n }\n\n static ClientRedirectToAccessDeniedPage(originalPath) {\n let url = LoginHelper.ACCESS_DENIED_ROUTE;\n if (originalPath === url) return;\n\n if (typeof originalPath === 'string')\n url = `${url}?original_uri=${originalPath}`;\n if (typeof location !== 'undefined') location.href = url;\n }\n\n static ClientRedirectToPath(redirectPath) {\n if (typeof redirectPath === 'string') {\n if (typeof location !== 'undefined') window.location.href = redirectPath;\n } else LoginHelper.ClientRedirectToHome();\n }\n\n static async WsFedLogin(redirectUri) {\n const userManager = await createUserManager(userManagerConfig);\n userManager.signinRedirect({\n scope: 'openid',\n response_type: 'id_token',\n redirect_uri: redirectUri || window.location.toString(),\n });\n }\n\n static RemoveSecurityTokenQuery() {\n const params = new URLSearchParams(window.location.search);\n if (params.has('securitytoken') || params.has('securityToken')) {\n params.delete('securitytoken');\n params.delete('securityToken');\n window.location = `${window.location.pathname}${\n params.toString() ? `?${params}` : ''\n }`;\n }\n }\n\n static async WsFedLogout(redirectPath) {\n await fetch(\n `${LoginHelper.CMS_URL}/authenticate/logout?jsonResponseRequired=true`,\n {\n credentials: 'include',\n }\n );\n if (redirectPath) {\n window.location = redirectPath;\n } else {\n // Explicitly check and remove any stale\n // security token that may be in the query string\n LoginHelper.RemoveSecurityTokenQuery();\n }\n }\n\n static async GetCredentialsForSecurityToken(securityToken) {\n const [error, response] = await to(\n fetch(`${LoginHelper.CMS_URL}/REST/Contensis/Security/IsAuthenticated`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n securityToken: encodeURIComponent(securityToken),\n }),\n })\n );\n if (error) return [{ message: 'Failed to fetch credentials' }];\n if (response.ok) {\n const [parseError, body] = await to(response.json());\n if (parseError) return [parseError];\n\n const { LogonResult, ApplicationData = [] } = body;\n if (LogonResult !== 0) {\n return [\n { message: 'Security token is invalid', data: ApplicationData },\n ];\n }\n if (ApplicationData.length > 0) {\n let refreshToken;\n ApplicationData.forEach(item => {\n if (item.Key === 'ContensisSecurityRefreshToken')\n refreshToken = item.Value;\n });\n if (!refreshToken) {\n return [\n {\n message:\n 'Fetch credentials: Unable to find ContensisSecurityRefreshToken',\n },\n ];\n }\n return [undefined, refreshToken];\n } else {\n return [\n {\n message:\n 'Fetch credentials: Unable to find ContensisSecurityRefreshToken',\n },\n ];\n }\n } else {\n return [\n {\n message: `Fetch credentials error: ${response.status} ${response.statusText}`,\n },\n ];\n }\n }\n\n // static isZengentiStaff(email) {\n // const emailRefs = ['@zengenti', '@contensis'];\n\n // return emailRefs.some(emailRef => {\n // if (email.includes(emailRef)) {\n // return true;\n // }\n // });\n // }\n}\n","import { takeEvery, select, put, call } from 'redux-saga/effects';\nimport {\n SET_AUTHENTICATION_STATE,\n LOGIN_USER,\n LOGOUT_USER,\n VALIDATE_USER,\n} from '../types';\nimport {\n selectUserIsAuthenticated,\n selectClientCredentials,\n selectUserGroups,\n} from '../selectors';\n\nimport { setRoute } from '~/routing/redux/actions';\nimport { selectCurrentSearch } from '~/routing/redux/selectors';\nimport { findContentTypeMapping } from '~/routing/util/find-contenttype-mapping';\n\nimport mapClientCredentials from '~/user/transformations/mapClientCredentials';\n\nimport { getManagementApiClient } from '~/user/util/ContensisManagementApi';\nimport { LoginHelper } from '~/user/util/LoginHelper.class';\nimport { matchUserGroup } from '~/user/util/matchGroups';\nimport { queryParams } from '~/util/navigation';\n\nexport const loginSagas = [\n takeEvery(LOGIN_USER, loginUserSaga),\n takeEvery(LOGOUT_USER, logoutUserSaga),\n takeEvery(VALIDATE_USER, validateUserSaga),\n takeEvery(SET_AUTHENTICATION_STATE, redirectAfterSuccessfulLoginSaga),\n];\n\nexport function* handleRequiresLoginSaga(action) {\n const {\n entry,\n requireLogin,\n routes: { ContentTypeMappings },\n staticRoute,\n } = action;\n let userLoggedIn = yield select(selectUserIsAuthenticated);\n\n // Check for a securityToken in querystring\n const currentQs = queryParams(yield select(selectCurrentSearch));\n const securityToken = currentQs.securityToken || currentQs.securitytoken;\n\n // Check if any of the defined routes have \"requireLogin\" attribute\n const { requireLogin: authRoute } = (staticRoute && staticRoute.route) || {};\n const { requireLogin: authContentType } =\n (entry &&\n findContentTypeMapping(ContentTypeMappings, entry?.sys?.contentTypeId)) ||\n {};\n\n // If requireLogin, authRoute or authContentType has been specified as an\n // array of groups we can merge all the arrays and match on any group supplied\n const routeRequiresGroups = [\n ...((Array.isArray(authContentType) && authContentType) || []),\n ...((Array.isArray(authRoute) && authRoute) || []),\n ...((Array.isArray(requireLogin) && requireLogin) || []),\n ];\n const routeRequiresLogin = !!authContentType || !!authRoute || !!requireLogin;\n\n if (!userLoggedIn) {\n // If cookies or securityToken are found on any route change\n // always validate and login the user\n if (routeRequiresLogin) {\n // If routeRequiresLogin do a blocking call that returns userLoggedIn\n userLoggedIn = yield call(validateUserSaga, { securityToken });\n }\n // otherwise do a non blocking put to handle validation in the background\n else yield put({ type: VALIDATE_USER, securityToken });\n }\n\n if (routeRequiresLogin) {\n // If a security token is in the querystring and we are not already\n // logged in something is wrong and we won't bother going on another redirect loop\n if (!userLoggedIn && !securityToken) {\n LoginHelper.ClientRedirectToSignInPage(action.location.pathname);\n } else if (routeRequiresGroups.length > 0) {\n const userGroups = yield select(selectUserGroups, 'js');\n const groupMatch = matchUserGroup(userGroups, routeRequiresGroups);\n\n if (!groupMatch)\n LoginHelper.ClientRedirectToAccessDeniedPage(action.location.pathname);\n }\n }\n}\n\nfunction* validateUserSaga({ securityToken }) {\n // Check for refreshToken in cookies\n let clientCredentials = LoginHelper.GetCachedCredentials();\n\n if (securityToken || clientCredentials.refreshToken) {\n // We only attempt to validate the user if one of the stored\n // tokens are found, in this case we set loading state manually\n // so we don't need to set and unset loading if there are no stored\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState: {\n isLoading: true,\n },\n });\n // If we have just a security token we will call a CMS endpoint\n // and provide us with a RefreshToken cookie we can use during login\n const [error, refreshToken] =\n yield LoginHelper.GetCredentialsForSecurityToken(securityToken);\n if (refreshToken) {\n // Set cookies and reload values\n LoginHelper.SetLoginCookies({\n contensisClassicToken: securityToken,\n refreshToken,\n });\n clientCredentials = LoginHelper.GetCachedCredentials();\n }\n\n // Log the user in if a refreshToken is found\n if (clientCredentials.refreshToken)\n yield call(loginUserSaga, { clientCredentials });\n else if (error)\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState: {\n isError: true,\n errorMessage:\n error?.message ||\n (error && 'toString' in error && error.toString()),\n },\n });\n }\n\n // Tell any callers have we successfully logged in?\n return yield select(selectUserIsAuthenticated);\n}\n\nfunction* loginUserSaga(action = {}) {\n const { username, password, clientCredentials } = action;\n\n // If a WSFED_LOGIN site has dispatched the loginUser action\n // just redirect them to the Identity Provider sign in\n if (action.type === LOGIN_USER && LoginHelper.WSFED_LOGIN)\n LoginHelper.ClientRedirectToSignInPage();\n\n const { authenticationState, user } = yield LoginHelper.LoginUser({\n username,\n password,\n clientCredentials,\n });\n\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState,\n user,\n });\n}\nconst removeHostnamePart = path => {\n // eslint-disable-next-line no-console\n console.log(path);\n const relativePath = '/' + path.split('/').splice(3).join('/');\n // eslint-disable-next-line no-console\n console.log(relativePath);\n return relativePath;\n};\n\nfunction* redirectAfterSuccessfulLoginSaga() {\n const isLoggedIn = yield select(selectUserIsAuthenticated);\n const { redirect_uri: redirectPath, ReturnURL: assetRedirectPath } =\n queryParams(yield select(selectCurrentSearch));\n\n if (isLoggedIn && assetRedirectPath && typeof window != 'undefined') {\n const path = removeHostnamePart(assetRedirectPath);\n // This has to be a hard href to get the app to\n // leave React and hit the server for the IIS hosted assets\n window.location.href = path;\n // yield put(setRoute(path)); // does not work in this scenario\n } else if (isLoggedIn && redirectPath) {\n yield put(setRoute(redirectPath));\n }\n}\n\nfunction* logoutUserSaga({ redirectPath }) {\n yield put({\n type: SET_AUTHENTICATION_STATE,\n user: null,\n });\n yield LoginHelper.LogoutUser(redirectPath);\n}\n\nexport function* refreshSecurityToken() {\n const clientCredentials = yield select(selectClientCredentials, 'js');\n if (Object.keys(clientCredentials).length > 0) {\n const client = yield getManagementApiClient(clientCredentials);\n yield client.authenticate();\n\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState: {\n clientCredentials: mapClientCredentials(client),\n },\n });\n }\n}\n"],"names":["findContentTypeMapping","ContentTypeMappings","contentTypeId","find","ct","contentTypeID","clientCredentials","bearerToken","bearerTokenExpiryDate","toISOString","refreshToken","refreshTokenExpiryDate","contensisClassicToken","obj","mapJson","getManagementApiClient","username","password","rootUrl","SERVERS","api","cms","projectId","PROJECTS","id","config","clientType","clientDetails","Client","client","create","COOKIE_VALID_DAYS","Cookies","JSCookie","withConverter","read","value","decodeURIComponent","write","encodeURIComponent","CookieHelper","GetCookie","name","cookie","get","SetCookie","maxAgeDays","set","expires","DeleteCookie","remove","context","window","global","requireOidc","process","env","NODE_ENV","WSFED_LOGIN","servers","userManagerConfig","authority","client_id","redirect_uri","location","toString","post_logout_redirect_uri","response_type","scope","filterProtocolClaims","createUserManager","UserManager","e","console","error","LOGIN_COOKIE","REFRESH_TOKEN_COOKIE","LoginHelper","SetLoginCookies","info","GetCachedCredentials","ClearCachedCredentials","localStorage","keys","i","length","key","startsWith","push","forEach","removeItem","LoginUser","credentials","authenticationState","isAuthenticated","isAuthenticationError","isError","transientClient","user","loginError","clientBearerToken","to","ensureBearerToken","errorMessage","message","includes","mapClientCredentials","userDetails","GetUserDetails","latestCredentials","LogoutUser","redirectPath","WsFedLogout","ClientRedirectToPath","ClientRedirectToSignInPage","ClientRedirectToHome","url","search","hash","href","WsFedLogin","LOGIN_ROUTE","replace","ClientRedirectToAccessDeniedPage","originalPath","ACCESS_DENIED_ROUTE","redirectUri","userManager","signinRedirect","RemoveSecurityTokenQuery","params","URLSearchParams","has","delete","pathname","fetch","CMS_URL","GetCredentialsForSecurityToken","securityToken","response","method","headers","Accept","body","JSON","stringify","ok","parseError","json","LogonResult","ApplicationData","data","item","Key","Value","undefined","status","statusText","userError","groupsError","groupsResult","security","users","getCurrent","getUserGroups","userId","includeInherited","pageOptions","pageSize","items","groups","log","loginSagas","takeEvery","LOGIN_USER","loginUserSaga","LOGOUT_USER","logoutUserSaga","VALIDATE_USER","validateUserSaga","SET_AUTHENTICATION_STATE","redirectAfterSuccessfulLoginSaga","handleRequiresLoginSaga","action","_entry$sys","entry","requireLogin","routes","staticRoute","userLoggedIn","select","selectUserIsAuthenticated","currentQs","queryParams","selectCurrentSearch","securitytoken","authRoute","route","authContentType","sys","routeRequiresGroups","Array","isArray","routeRequiresLogin","call","put","type","userGroups","selectUserGroups","groupMatch","matchUserGroup","isLoading","removeHostnamePart","path","relativePath","split","splice","join","isLoggedIn","ReturnURL","assetRedirectPath","setRoute","refreshSecurityToken","selectClientCredentials","Object","authenticate"],"mappings":"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"}
|
package/esm/redux.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { n as navigation$2, v as version$1, G as GET_NODE_TREE, e as version$3 } from './version-
|
|
2
|
-
export { r as store } from './version-
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
5
|
-
import { v as version$2, n as navigation$3 } from './version-
|
|
6
|
-
export { c as convertSagaArray, b as injectReducer, i as injectRedux, d as injectSaga, u as useInjectRedux } from './version-
|
|
1
|
+
import { n as navigation$2, v as version$1, G as GET_NODE_TREE, e as version$3 } from './version-ef107106.js';
|
|
2
|
+
export { r as store } from './version-ef107106.js';
|
|
3
|
+
import { E as routing$1, D as action, F as routing$2, G as routing$3 } from './selectors-74de49a3.js';
|
|
4
|
+
export { D as action, g as getIn, H as getJS } from './selectors-74de49a3.js';
|
|
5
|
+
import { v as version$2, n as navigation$3 } from './version-b15807c5.js';
|
|
6
|
+
export { c as convertSagaArray, b as injectReducer, i as injectRedux, d as injectSaga, u as useInjectRedux } from './version-b15807c5.js';
|
|
7
7
|
import 'redux';
|
|
8
8
|
import 'redux-thunk';
|
|
9
9
|
import 'redux-saga';
|
package/esm/routing.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { R as RouteLoader } from './RouteLoader-
|
|
1
|
+
export { F as actions, G as selectors, E as types } from './selectors-74de49a3.js';
|
|
2
|
+
export { R as RouteLoader } from './RouteLoader-6eac364e.js';
|
|
3
3
|
import 'jsonpath-mapper';
|
|
4
4
|
import 'query-string';
|
|
5
5
|
import 'react';
|
|
6
|
-
import 'react-cookie';
|
|
7
6
|
import 'react-redux';
|
|
8
7
|
import 'react-hot-loader';
|
|
9
8
|
import 'react-router-dom';
|
|
10
9
|
import 'react-router-config';
|
|
11
10
|
import 'reselect';
|
|
12
|
-
import './ToJs-
|
|
13
|
-
import './CookieHelper.class-4d6ee27b.js';
|
|
11
|
+
import './ToJs-9b30636a.js';
|
|
14
12
|
//# sourceMappingURL=routing.js.map
|
package/esm/routing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routing.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|