abmp-npm 1.9.6 → 2.0.0
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/backend/consts.js +0 -2
- package/backend/data-hooks.js +1 -1
- package/backend/http-functions/httpFunctions.js +15 -1
- package/backend/index.js +1 -1
- package/backend/jobs.js +1 -1
- package/backend/login/index.js +7 -0
- package/backend/login/login-methods-factory.js +24 -0
- package/backend/{qa-login-methods.js → login/qa-login-methods.js} +15 -10
- package/backend/{sso-methods.js → login/sso-methods.js} +16 -19
- package/backend/tasks/tasks-configs.js +2 -2
- package/backend/utils.js +1 -1
- package/package.json +1 -1
- package/pages/LoadingPage.js +1 -1
- package/pages/QAPage.js +1 -1
- package/pages/SaveAlerts.js +13 -0
- package/pages/{selecBannerImages.js → SelectBannerImages.js} +2 -2
- package/pages/deleteConfirm.js +19 -0
- package/pages/index.js +3 -1
- package/public/consts.js +1 -1
- package/public/sso-auth-methods.js +1 -1
package/backend/consts.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const PAC_API_URL = 'https://members.abmp.com/eweb/api/Wix';
|
|
2
2
|
const SSO_TOKEN_AUTH_API_URL = 'https://members.professionalassistcorp.com/';
|
|
3
|
-
const SSO_TOKEN_AUTH_API_KEY = 'testkey';
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Valid configuration keys for getSiteConfigs function
|
|
@@ -41,5 +40,4 @@ module.exports = {
|
|
|
41
40
|
COMPILED_FILTERS_FIELDS,
|
|
42
41
|
MEMBERSHIPS_TYPES,
|
|
43
42
|
SSO_TOKEN_AUTH_API_URL,
|
|
44
|
-
SSO_TOKEN_AUTH_API_KEY,
|
|
45
43
|
};
|
package/backend/data-hooks.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const { taskManager, TASK_TYPE } = require('psdev-task-manager');
|
|
2
2
|
|
|
3
3
|
const { COMPILED_FILTERS_FIELDS } = require('./consts');
|
|
4
|
-
const { TASKS_NAMES } = require('./tasks');
|
|
4
|
+
const { TASKS_NAMES } = require('./tasks/consts');
|
|
5
5
|
|
|
6
6
|
const scheduleCompileFiltersTask = field =>
|
|
7
7
|
taskManager().schedule({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const { COLLECTIONS } = require('../../public/consts');
|
|
2
2
|
const { clearCollection } = require('../cms-data-methods');
|
|
3
|
-
const {
|
|
3
|
+
const { CONFIG_KEYS } = require('../consts');
|
|
4
|
+
const { getSecret, getSiteConfigs } = require('../utils');
|
|
4
5
|
|
|
5
6
|
const { migrateInterests } = require('./interests');
|
|
6
7
|
|
|
@@ -62,10 +63,23 @@ const createHTTPFunctionsHelpers = wixHTTPFunctionsMethods => {
|
|
|
62
63
|
return serverError(error);
|
|
63
64
|
}
|
|
64
65
|
};
|
|
66
|
+
const getSiteAssociationHandler = async _request => {
|
|
67
|
+
try {
|
|
68
|
+
const siteAssociation = await getSiteConfigs(CONFIG_KEYS.SITE_ASSOCIATION);
|
|
69
|
+
return ok({
|
|
70
|
+
...responseOptions,
|
|
71
|
+
body: { siteAssociation },
|
|
72
|
+
});
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.error('Error getting site association:', error);
|
|
75
|
+
return serverError(error);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
65
78
|
|
|
66
79
|
return {
|
|
67
80
|
post_migrateInterests: withAuth(migrateInterestsHandler),
|
|
68
81
|
delete_clearCollection: withAuth(clearCollectionHandler),
|
|
82
|
+
get_getSiteAssociation: withAuth(getSiteAssociationHandler),
|
|
69
83
|
};
|
|
70
84
|
};
|
|
71
85
|
|
package/backend/index.js
CHANGED
|
@@ -10,7 +10,7 @@ module.exports = {
|
|
|
10
10
|
...require('./members-data-methods'), //TODO: remove it once we finish NPM movement
|
|
11
11
|
...require('./cms-data-methods'), //TODO: remove it once we finish NPM movement
|
|
12
12
|
...require('./routers'),
|
|
13
|
-
...require('./
|
|
13
|
+
...require('./login'),
|
|
14
14
|
...require('./data-hooks'),
|
|
15
15
|
...require('./http-functions'),
|
|
16
16
|
};
|
package/backend/jobs.js
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const { loginQAMember } = require('./qa-login-methods');
|
|
2
|
+
const { authenticateSSOToken } = require('./sso-methods');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates login methods with injected generateSessionToken dependency
|
|
6
|
+
* @param {Function} generateSessionToken - The Velo generateSessionToken function to inject
|
|
7
|
+
* @returns {Object} Object containing loginQAMember and authenticateSSOToken methods
|
|
8
|
+
*/
|
|
9
|
+
const createLoginMethods = generateSessionToken => {
|
|
10
|
+
//There is no generateSessionToken SDK version, and the signOn of @wix/identity returns 403 error regardless that the permissions are valid
|
|
11
|
+
//Therefore, as a workaround we need to inject the Velo version of generateSessionToken to the login methods.
|
|
12
|
+
const injectGenerateSessionTokenToMethod =
|
|
13
|
+
method =>
|
|
14
|
+
async (...args) =>
|
|
15
|
+
await method(...args, generateSessionToken);
|
|
16
|
+
return {
|
|
17
|
+
loginQAMember: injectGenerateSessionTokenToMethod(loginQAMember),
|
|
18
|
+
authenticateSSOToken: injectGenerateSessionTokenToMethod(authenticateSSOToken),
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
module.exports = {
|
|
23
|
+
createLoginMethods,
|
|
24
|
+
};
|
|
@@ -1,18 +1,24 @@
|
|
|
1
|
-
const {
|
|
2
|
-
|
|
3
|
-
const { getMemberByEmail, getQAUsers } = require('./members-data-methods');
|
|
4
|
-
const { getSecret } = require('./utils');
|
|
1
|
+
const { getMemberByEmail, getQAUsers } = require('../members-data-methods');
|
|
2
|
+
const { getSecret } = require('../utils');
|
|
5
3
|
|
|
6
4
|
const validateQAUser = async userEmail => {
|
|
7
5
|
const qaUsers = await getQAUsers();
|
|
8
|
-
const
|
|
9
|
-
if (!
|
|
6
|
+
const matchingUserEmail = qaUsers.find(user => user.email === userEmail)?.email;
|
|
7
|
+
if (!matchingUserEmail) {
|
|
10
8
|
return { error: `Invalid user email: ${userEmail}` };
|
|
11
9
|
}
|
|
12
|
-
return { valid: true,
|
|
10
|
+
return { valid: true, email: matchingUserEmail };
|
|
13
11
|
};
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Login a QA user
|
|
15
|
+
* @param {Object} params - The parameters for the login
|
|
16
|
+
* @param {string} params.userEmail - The email of the user to login
|
|
17
|
+
* @param {string} params.secret - The secret of the user to login
|
|
18
|
+
* @param {Function} generateSessionToken - a dependency of the method, injected by the createLoginMethods function
|
|
19
|
+
* @returns {Promise<Object>} The result of the login
|
|
20
|
+
*/
|
|
21
|
+
const loginQAMember = async ({ userEmail, secret }, generateSessionToken) => {
|
|
16
22
|
try {
|
|
17
23
|
const userValidation = await validateQAUser(userEmail);
|
|
18
24
|
if (userValidation.error) {
|
|
@@ -24,8 +30,7 @@ const loginQAMember = async (userEmail, secret) => {
|
|
|
24
30
|
return { success: false, error: 'Invalid secret' };
|
|
25
31
|
}
|
|
26
32
|
|
|
27
|
-
|
|
28
|
-
const token = await authentication.generateSessionToken(userValidation.user, qaSecret);
|
|
33
|
+
const token = await generateSessionToken(userValidation.email, qaSecret);
|
|
29
34
|
|
|
30
35
|
const result = await getMemberCMSId(userEmail);
|
|
31
36
|
if (!result.success) {
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
const { createHmac } = require('crypto');
|
|
2
2
|
|
|
3
|
-
const { auth } = require('@wix/essentials');
|
|
4
|
-
const { authentication } = require('@wix/identity'); //importing from @wix/identity because @wix/members authentication do not have generateSessionToken method
|
|
5
|
-
const generateSessionToken = auth.elevate(authentication.signOn);
|
|
6
3
|
const { decode } = require('jwt-js-decode');
|
|
7
4
|
|
|
8
|
-
const { CONFIG_KEYS, SSO_TOKEN_AUTH_API_URL
|
|
9
|
-
const { MEMBER_ACTIONS } = require('
|
|
10
|
-
const { getCurrentMember } = require('
|
|
11
|
-
const { getMemberByContactId, getSiteMemberId } = require('
|
|
5
|
+
const { CONFIG_KEYS, SSO_TOKEN_AUTH_API_URL } = require('../consts');
|
|
6
|
+
const { MEMBER_ACTIONS } = require('../daily-pull/consts');
|
|
7
|
+
const { getCurrentMember } = require('../members-area-methods');
|
|
8
|
+
const { getMemberByContactId, getSiteMemberId } = require('../members-data-methods');
|
|
12
9
|
const {
|
|
13
10
|
formatDateToMonthYear,
|
|
14
11
|
getAddressDisplayOptions,
|
|
15
12
|
isStudent,
|
|
16
13
|
getSiteConfigs,
|
|
17
|
-
|
|
14
|
+
getSecret,
|
|
15
|
+
} = require('../utils');
|
|
18
16
|
|
|
19
17
|
/**
|
|
20
18
|
* Validates member token and retrieves member data
|
|
@@ -90,6 +88,7 @@ async function validateMemberToken(memberIdInput) {
|
|
|
90
88
|
}
|
|
91
89
|
}
|
|
92
90
|
async function checkAndFetchSSO(token) {
|
|
91
|
+
const SSO_TOKEN_AUTH_API_KEY = await getSecret('SSO_TOKEN_AUTH_API_KEY');
|
|
93
92
|
const signature = createHmac('sha256', SSO_TOKEN_AUTH_API_KEY).update(token).digest('hex');
|
|
94
93
|
const professionalassistcorpUrl = `${SSO_TOKEN_AUTH_API_URL}/eweb/SSOToken.ashx?token=${token}&Partner=Wix&Signature=${signature}`;
|
|
95
94
|
const options = {
|
|
@@ -109,16 +108,14 @@ async function checkAndFetchSSO(token) {
|
|
|
109
108
|
}
|
|
110
109
|
}
|
|
111
110
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const authenticateSSOToken = async token => {
|
|
111
|
+
/**
|
|
112
|
+
* Authenticate an SSO token
|
|
113
|
+
* @param {Object} params - The parameters for the authentication
|
|
114
|
+
* @param {string} params.token - The token to authenticate
|
|
115
|
+
* @param {Function} generateSessionToken - a dependency of the method, injected by the createLoginMethods function
|
|
116
|
+
* @returns {Promise<Object>} The result of the authentication
|
|
117
|
+
*/
|
|
118
|
+
const authenticateSSOToken = async ({ token }, generateSessionToken) => {
|
|
122
119
|
const responseToken = await checkAndFetchSSO(token);
|
|
123
120
|
const isValidToken = Boolean(
|
|
124
121
|
responseToken && typeof responseToken === 'string' && responseToken?.trim()
|
|
@@ -138,7 +135,7 @@ const authenticateSSOToken = async token => {
|
|
|
138
135
|
const payload = jwt.payload;
|
|
139
136
|
const membersData = await getSiteMemberId(payload);
|
|
140
137
|
console.log('membersDataCollectionId', membersData._id);
|
|
141
|
-
const sessionToken = await
|
|
138
|
+
const sessionToken = await generateSessionToken(membersData.email);
|
|
142
139
|
const authObj = {
|
|
143
140
|
type: 'success',
|
|
144
141
|
memberId: membersData._id,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
const { MEMBER_ACTIONS } = require('../daily-pull/consts.js');
|
|
1
2
|
const {
|
|
2
|
-
MEMBER_ACTIONS,
|
|
3
3
|
synchronizeSinglePage,
|
|
4
4
|
syncMembersDataPerAction,
|
|
5
|
-
} = require('../daily-pull');
|
|
5
|
+
} = require('../daily-pull/sync-to-cms-methods');
|
|
6
6
|
|
|
7
7
|
const { TASKS_NAMES } = require('./consts');
|
|
8
8
|
const {
|
package/backend/utils.js
CHANGED
|
@@ -154,7 +154,7 @@ const normalizeUrlForComparison = url => {
|
|
|
154
154
|
};
|
|
155
155
|
|
|
156
156
|
async function getSecret(secretKey) {
|
|
157
|
-
return await elevatedGetSecretValue(secretKey).value;
|
|
157
|
+
return (await elevatedGetSecretValue(secretKey)).value;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
async function getSiteBaseUrl() {
|
package/package.json
CHANGED
package/pages/LoadingPage.js
CHANGED
|
@@ -7,7 +7,7 @@ async function loadingPageOnReady(authenticateSSOToken) {
|
|
|
7
7
|
const renderingEnv = await rendering.env();
|
|
8
8
|
//This calls needs to triggered on client side, otherwise PAC API will return 401 error
|
|
9
9
|
if (renderingEnv === 'browser') {
|
|
10
|
-
//Need to pass
|
|
10
|
+
//Need to pass authenticateSSOToken to checkAndLogin so it will run as a web method not a public one.
|
|
11
11
|
await checkAndLogin(authenticateSSOToken).catch(error => {
|
|
12
12
|
wixWindow.openLightbox(LIGHTBOX_NAMES.LOGIN_ERROR_ALERT);
|
|
13
13
|
console.error(`Something went wrong while logging in: ${error}`);
|
package/pages/QAPage.js
CHANGED
|
@@ -10,7 +10,7 @@ async function qaPageOnReady({ $w: _$w, loginQAMember }) {
|
|
|
10
10
|
throw new Error('Missing required parameters: userEmail and/or secret');
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const result = await loginQAMember(userEmail, secret);
|
|
13
|
+
const result = await loginQAMember({ userEmail, secret });
|
|
14
14
|
|
|
15
15
|
if (!result.success || !result.token) {
|
|
16
16
|
throw new Error(result.error || 'Login failed');
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const { lightbox } = require('@wix/site-window');
|
|
2
|
+
|
|
3
|
+
async function saveAlertsOnReady({ $w: _$w }) {
|
|
4
|
+
const receivedData = await lightbox.getContext();
|
|
5
|
+
_$w('#closeButton').onClick(() => lightbox.close());
|
|
6
|
+
_$w('#cancelButton').onClick(() => lightbox.close());
|
|
7
|
+
_$w('#leaveButton').link = receivedData?.membersExternalPortalUrl;
|
|
8
|
+
_$w('#leaveButton').target = '_blank';
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
module.exports = {
|
|
12
|
+
saveAlertsOnReady,
|
|
13
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { lightbox } = require('@wix/site-window');
|
|
2
2
|
|
|
3
3
|
function selectBannerImagesOnReady({ $w: _$w }) {
|
|
4
4
|
_$w('#imageDataset').onReady(async () => {
|
|
@@ -37,7 +37,7 @@ function selectBannerImagesOnReady({ $w: _$w }) {
|
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
-
|
|
40
|
+
lightbox.close(selectedImage);
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const { lightbox } = require('@wix/site-window');
|
|
2
|
+
|
|
3
|
+
function deleteConfirmOnReady({ $w: _$w }) {
|
|
4
|
+
_$w('#delete').onClick(() => {
|
|
5
|
+
lightbox.close({
|
|
6
|
+
toDelete: true,
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
_$w('#cancel').onClick(() => {
|
|
11
|
+
lightbox.close({
|
|
12
|
+
toDelete: false,
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = {
|
|
18
|
+
deleteConfirmOnReady,
|
|
19
|
+
};
|
package/pages/index.js
CHANGED
|
@@ -5,5 +5,7 @@ module.exports = {
|
|
|
5
5
|
...require('./personalDetails.js'),
|
|
6
6
|
...require('./QAPage.js'),
|
|
7
7
|
...require('./LoadingPage.js'),
|
|
8
|
-
...require('./
|
|
8
|
+
...require('./SelectBannerImages.js'),
|
|
9
|
+
...require('./deleteConfirm.js'),
|
|
10
|
+
...require('./SaveAlerts.js'),
|
|
9
11
|
};
|
package/public/consts.js
CHANGED
|
@@ -12,7 +12,7 @@ const COLLECTIONS = {
|
|
|
12
12
|
INTERESTS: 'interests',
|
|
13
13
|
STATE_CITY_MAP: 'City',
|
|
14
14
|
UPDATED_LOGIN_EMAILS: 'updatedLoginEmails',
|
|
15
|
-
|
|
15
|
+
QA_USERS: 'QA_Users', //Make QA users configurable per site
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -9,7 +9,7 @@ const checkAndLogin = async authenticateSSOToken => {
|
|
|
9
9
|
const token = query['token']?.trim();
|
|
10
10
|
try {
|
|
11
11
|
if (token) {
|
|
12
|
-
const authObj = await authenticateSSOToken(token);
|
|
12
|
+
const authObj = await authenticateSSOToken({ token });
|
|
13
13
|
console.log('authObj', authObj);
|
|
14
14
|
if (authObj.type == 'success') {
|
|
15
15
|
console.log('success');
|