abmp-npm 1.1.73 → 1.1.75
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 +2 -0
- 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/members-data-methods.js +2 -5
- package/backend/{login/qa-login-methods.js → qa-login-methods.js} +10 -17
- package/backend/{login/sso-methods.js → sso-methods.js} +19 -16
- 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/public/sso-auth-methods.js +1 -1
- package/backend/login/index.js +0 -7
- package/backend/login/login-methods-factory.js +0 -24
package/backend/consts.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
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';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Valid configuration keys for getSiteConfigs function
|
|
@@ -40,4 +41,5 @@ module.exports = {
|
|
|
40
41
|
COMPILED_FILTERS_FIELDS,
|
|
41
42
|
MEMBERSHIPS_TYPES,
|
|
42
43
|
SSO_TOKEN_AUTH_API_URL,
|
|
44
|
+
SSO_TOKEN_AUTH_API_KEY,
|
|
43
45
|
};
|
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');
|
|
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('./sso-methods'),
|
|
14
14
|
...require('./data-hooks'),
|
|
15
15
|
...require('./http-functions'),
|
|
16
16
|
};
|
package/backend/jobs.js
CHANGED
|
@@ -444,13 +444,10 @@ const getMemberByEmail = async email => {
|
|
|
444
444
|
const getQAUsers = async () => {
|
|
445
445
|
try {
|
|
446
446
|
return await wixData
|
|
447
|
-
.query(COLLECTIONS.
|
|
447
|
+
.query(COLLECTIONS.QA_USERS)
|
|
448
448
|
.include('member')
|
|
449
449
|
.find()
|
|
450
|
-
.then(res =>
|
|
451
|
-
console.log('res', JSON.stringify(res.items, null, 2));
|
|
452
|
-
return res.items.map(item => item.member);
|
|
453
|
-
});
|
|
450
|
+
.then(res => res.items.map(item => item.member));
|
|
454
451
|
} catch (error) {
|
|
455
452
|
console.error('Error getting QA users:', error);
|
|
456
453
|
throw new Error(`Failed to get QA users: ${error.message}`);
|
|
@@ -1,26 +1,18 @@
|
|
|
1
|
-
const {
|
|
2
|
-
|
|
1
|
+
const { authentication } = require('@wix/members');
|
|
2
|
+
|
|
3
|
+
const { getMemberByEmail, getQAUsers } = require('./members-data-methods');
|
|
4
|
+
const { getSecret } = require('./utils');
|
|
3
5
|
|
|
4
6
|
const validateQAUser = async userEmail => {
|
|
5
7
|
const qaUsers = await getQAUsers();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
console.log('matchingUserEmail', matchingUserEmail);
|
|
9
|
-
if (!matchingUserEmail) {
|
|
8
|
+
const matchingUser = qaUsers.find(user => user.email === userEmail);
|
|
9
|
+
if (!matchingUser) {
|
|
10
10
|
return { error: `Invalid user email: ${userEmail}` };
|
|
11
11
|
}
|
|
12
|
-
return { valid: true,
|
|
12
|
+
return { valid: true, user: matchingUser };
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
* Login a QA user
|
|
17
|
-
* @param {Object} params - The parameters for the login
|
|
18
|
-
* @param {string} params.userEmail - The email of the user to login
|
|
19
|
-
* @param {string} params.secret - The secret of the user to login
|
|
20
|
-
* @param {Function} generateSessionToken - a dependency of the method, injected by the createLoginMethods function
|
|
21
|
-
* @returns {Promise<Object>} The result of the login
|
|
22
|
-
*/
|
|
23
|
-
const loginQAMember = async ({ userEmail, secret }, generateSessionToken) => {
|
|
15
|
+
const loginQAMember = async (userEmail, secret) => {
|
|
24
16
|
try {
|
|
25
17
|
const userValidation = await validateQAUser(userEmail);
|
|
26
18
|
if (userValidation.error) {
|
|
@@ -32,7 +24,8 @@ const loginQAMember = async ({ userEmail, secret }, generateSessionToken) => {
|
|
|
32
24
|
return { success: false, error: 'Invalid secret' };
|
|
33
25
|
}
|
|
34
26
|
|
|
35
|
-
|
|
27
|
+
//TODO: this code still needs fixes, as there is no generateSessionToken method on
|
|
28
|
+
const token = await authentication.generateSessionToken(userValidation.user, qaSecret);
|
|
36
29
|
|
|
37
30
|
const result = await getMemberCMSId(userEmail);
|
|
38
31
|
if (!result.success) {
|
|
@@ -1,18 +1,20 @@
|
|
|
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);
|
|
3
6
|
const { decode } = require('jwt-js-decode');
|
|
4
7
|
|
|
5
|
-
const { CONFIG_KEYS, SSO_TOKEN_AUTH_API_URL } = require('
|
|
6
|
-
const { MEMBER_ACTIONS } = require('
|
|
7
|
-
const { getCurrentMember } = require('
|
|
8
|
-
const { getMemberByContactId, getSiteMemberId } = require('
|
|
8
|
+
const { CONFIG_KEYS, SSO_TOKEN_AUTH_API_URL, SSO_TOKEN_AUTH_API_KEY } = require('./consts');
|
|
9
|
+
const { MEMBER_ACTIONS } = require('./daily-pull');
|
|
10
|
+
const { getCurrentMember } = require('./members-area-methods');
|
|
11
|
+
const { getMemberByContactId, getSiteMemberId } = require('./members-data-methods');
|
|
9
12
|
const {
|
|
10
13
|
formatDateToMonthYear,
|
|
11
14
|
getAddressDisplayOptions,
|
|
12
15
|
isStudent,
|
|
13
16
|
getSiteConfigs,
|
|
14
|
-
|
|
15
|
-
} = require('../utils');
|
|
17
|
+
} = require('./utils');
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Validates member token and retrieves member data
|
|
@@ -88,7 +90,6 @@ async function validateMemberToken(memberIdInput) {
|
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
async function checkAndFetchSSO(token) {
|
|
91
|
-
const SSO_TOKEN_AUTH_API_KEY = await getSecret('SSO_TOKEN_AUTH_API_KEY');
|
|
92
93
|
const signature = createHmac('sha256', SSO_TOKEN_AUTH_API_KEY).update(token).digest('hex');
|
|
93
94
|
const professionalassistcorpUrl = `${SSO_TOKEN_AUTH_API_URL}/eweb/SSOToken.ashx?token=${token}&Partner=Wix&Signature=${signature}`;
|
|
94
95
|
const options = {
|
|
@@ -108,14 +109,16 @@ async function checkAndFetchSSO(token) {
|
|
|
108
109
|
}
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
112
|
+
function generateSessionTokenFunction(email) {
|
|
113
|
+
return generateSessionToken({ email })
|
|
114
|
+
.then(response => response.sessionToken)
|
|
115
|
+
.catch(error => {
|
|
116
|
+
console.error('Error in generateSessionTokenFunction', error);
|
|
117
|
+
throw error;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const authenticateSSOToken = async token => {
|
|
119
122
|
const responseToken = await checkAndFetchSSO(token);
|
|
120
123
|
const isValidToken = Boolean(
|
|
121
124
|
responseToken && typeof responseToken === 'string' && responseToken?.trim()
|
|
@@ -135,7 +138,7 @@ const authenticateSSOToken = async ({ token }, generateSessionToken) => {
|
|
|
135
138
|
const payload = jwt.payload;
|
|
136
139
|
const membersData = await getSiteMemberId(payload);
|
|
137
140
|
console.log('membersDataCollectionId', membersData._id);
|
|
138
|
-
const sessionToken = await
|
|
141
|
+
const sessionToken = await generateSessionTokenFunction(membersData.email);
|
|
139
142
|
const authObj = {
|
|
140
143
|
type: 'success',
|
|
141
144
|
memberId: membersData._id,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const { MEMBER_ACTIONS } = require('../daily-pull/consts.js');
|
|
2
1
|
const {
|
|
2
|
+
MEMBER_ACTIONS,
|
|
3
3
|
synchronizeSinglePage,
|
|
4
4
|
syncMembersDataPerAction,
|
|
5
|
-
} = require('../daily-pull
|
|
5
|
+
} = require('../daily-pull');
|
|
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
|
|
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 processSubmission 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(
|
|
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');
|
|
@@ -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(
|
|
12
|
+
const authObj = await authenticateSSOToken(token);
|
|
13
13
|
console.log('authObj', authObj);
|
|
14
14
|
if (authObj.type == 'success') {
|
|
15
15
|
console.log('success');
|
package/backend/login/index.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
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
|
-
};
|