@unchainedshop/core-users 2.0.0-beta8 → 2.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jest.config.js +9 -0
- package/lib/module/configureUsersModule.d.ts +4 -1
- package/lib/module/configureUsersModule.js +64 -35
- package/lib/module/configureUsersModule.js.map +1 -1
- package/lib/services/getUserCountryService.js +2 -2
- package/lib/services/getUserCountryService.js.map +1 -1
- package/lib/services/getUserLanguageService.js +2 -2
- package/lib/services/getUserLanguageService.js.map +1 -1
- package/lib/services/updateUserAvatarAfterUploadService.js +2 -2
- package/lib/services/updateUserAvatarAfterUploadService.js.map +1 -1
- package/lib/services/userServices.js +0 -2
- package/lib/services/userServices.js.map +1 -1
- package/package.json +13 -11
- package/src/module/configureUsersModule.ts +77 -45
- package/src/services/getUserCountryService.ts +2 -3
- package/src/services/getUserLanguageService.ts +2 -3
- package/src/services/updateUserAvatarAfterUploadService.ts +2 -2
- package/src/services/userServices.ts +0 -2
- package/tests/mock/user-mock.js +81 -0
- package/tests/users-index.test.ts +30 -42
- package/lib/services/getUserRoleActionsService.d.ts +0 -2
- package/lib/services/getUserRoleActionsService.js +0 -30
- package/lib/services/getUserRoleActionsService.js.map +0 -1
- package/src/services/getUserRoleActionsService.ts +0 -29
package/jest.config.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { Query } from '@unchainedshop/types/common';
|
|
1
2
|
import { ModuleInput } from '@unchainedshop/types/core';
|
|
2
|
-
import { UsersModule } from '@unchainedshop/types/user';
|
|
3
|
+
import { User, UserQuery, UsersModule } from '@unchainedshop/types/user';
|
|
4
|
+
export declare const removeConfidentialServiceHashes: (rawUser: User) => User;
|
|
5
|
+
export declare const buildFindSelector: ({ includeGuests, queryString, ...rest }: UserQuery) => Query;
|
|
3
6
|
export declare const configureUsersModule: ({ db, migrationRepository, }: ModuleInput<Record<string, never>>) => Promise<UsersModule>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import localePkg from 'locale';
|
|
2
2
|
import { log, LogLevel } from '@unchainedshop/logger';
|
|
3
3
|
import { emit, registerEvents } from '@unchainedshop/events';
|
|
4
|
-
import { generateDbFilterById, generateDbMutations, Schemas, systemLocale } from '@unchainedshop/utils';
|
|
4
|
+
import { generateDbFilterById, generateDbMutations, Schemas, systemLocale, buildSortOptions, } from '@unchainedshop/utils';
|
|
5
5
|
import { FileDirector } from '@unchainedshop/file-upload';
|
|
6
|
+
import { SortDirection } from '@unchainedshop/types/api';
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
6
8
|
import { UsersCollection } from '../db/UsersCollection';
|
|
7
9
|
import addMigrations from './addMigrations';
|
|
8
10
|
const { Locale } = localePkg;
|
|
@@ -16,27 +18,22 @@ const USER_EVENTS = [
|
|
|
16
18
|
'USER_UPDATE_HEARTBEAT',
|
|
17
19
|
'USER_UPDATE_BILLING_ADDRESS',
|
|
18
20
|
'USER_UPDATE_LAST_CONTACT',
|
|
21
|
+
'USER_REMOVE',
|
|
19
22
|
];
|
|
20
|
-
const removeConfidentialServiceHashes = (rawUser) => {
|
|
23
|
+
export const removeConfidentialServiceHashes = (rawUser) => {
|
|
21
24
|
const user = rawUser;
|
|
22
25
|
delete user?.services;
|
|
23
26
|
return user;
|
|
24
27
|
};
|
|
25
|
-
const buildFindSelector = ({ includeGuests, queryString, ...rest }) => {
|
|
26
|
-
const selector = { ...rest };
|
|
28
|
+
export const buildFindSelector = ({ includeGuests, queryString, ...rest }) => {
|
|
29
|
+
const selector = { ...rest, deleted: null };
|
|
27
30
|
if (!includeGuests)
|
|
28
|
-
selector.guest = { $
|
|
31
|
+
selector.guest = { $in: [false, null] };
|
|
29
32
|
if (queryString) {
|
|
30
33
|
selector.$text = { $search: queryString };
|
|
31
34
|
}
|
|
32
35
|
return selector;
|
|
33
36
|
};
|
|
34
|
-
const getUserLocale = (user, params = {}) => {
|
|
35
|
-
const locale = params.localeContext ||
|
|
36
|
-
(user.lastLogin?.locale && new Locale(user.lastLogin.locale)) ||
|
|
37
|
-
systemLocale;
|
|
38
|
-
return locale;
|
|
39
|
-
};
|
|
40
37
|
FileDirector.registerFileUploadCallback('user-avatars', async (file, context) => {
|
|
41
38
|
const { services } = context;
|
|
42
39
|
return services.users.updateUserAvatarAfterUpload({ file }, context);
|
|
@@ -76,6 +73,7 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
76
73
|
return Users.findOne(selector, options);
|
|
77
74
|
},
|
|
78
75
|
findUsers: async ({ limit, offset, ...query }) => {
|
|
76
|
+
const defaultSort = [{ key: 'created', value: SortDirection.ASC }];
|
|
79
77
|
const selector = buildFindSelector(query);
|
|
80
78
|
if (query.queryString) {
|
|
81
79
|
return Users.find(selector, {
|
|
@@ -85,10 +83,15 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
85
83
|
sort: { score: { $meta: 'textScore' } },
|
|
86
84
|
}).toArray();
|
|
87
85
|
}
|
|
88
|
-
return Users.find(selector, {
|
|
86
|
+
return Users.find(selector, {
|
|
87
|
+
skip: offset,
|
|
88
|
+
limit,
|
|
89
|
+
sort: buildSortOptions(query.sort || defaultSort),
|
|
90
|
+
}).toArray();
|
|
89
91
|
},
|
|
90
92
|
userExists: async ({ userId }) => {
|
|
91
93
|
const selector = generateDbFilterById(userId);
|
|
94
|
+
selector.deleted = null; // skip deleted users when checked for existance!
|
|
92
95
|
const userCount = await Users.countDocuments(selector, { limit: 1 });
|
|
93
96
|
return !!userCount;
|
|
94
97
|
},
|
|
@@ -96,8 +99,9 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
96
99
|
primaryEmail: (user) => {
|
|
97
100
|
return (user.emails || []).sort((left, right) => Number(right.verified) - Number(left.verified))?.[0];
|
|
98
101
|
},
|
|
99
|
-
userLocale: (user
|
|
100
|
-
|
|
102
|
+
userLocale: (user) => {
|
|
103
|
+
const locale = (user.lastLogin?.locale && new Locale(user.lastLogin.locale)) || systemLocale;
|
|
104
|
+
return locale;
|
|
101
105
|
},
|
|
102
106
|
// Mutations
|
|
103
107
|
addRoles: async (userId, roles) => {
|
|
@@ -111,17 +115,16 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
111
115
|
});
|
|
112
116
|
return updateResult.modifiedCount;
|
|
113
117
|
},
|
|
114
|
-
updateAvatar: async (_id, fileId
|
|
118
|
+
updateAvatar: async (_id, fileId) => {
|
|
115
119
|
const userFilter = generateDbFilterById(_id);
|
|
116
120
|
log('Update Avatar', { userId: _id });
|
|
117
121
|
const modifier = {
|
|
118
122
|
$set: {
|
|
119
123
|
avatarId: fileId,
|
|
120
124
|
updated: new Date(),
|
|
121
|
-
updatedBy: userId,
|
|
122
125
|
},
|
|
123
126
|
};
|
|
124
|
-
await mutations.update(_id, modifier
|
|
127
|
+
await mutations.update(_id, modifier);
|
|
125
128
|
const user = await Users.findOne(userFilter, {});
|
|
126
129
|
await emit('USER_UPDATE_AVATAR', {
|
|
127
130
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -143,7 +146,7 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
143
146
|
},
|
|
144
147
|
},
|
|
145
148
|
};
|
|
146
|
-
await mutations.update(userId, modifier
|
|
149
|
+
await mutations.update(userId, modifier);
|
|
147
150
|
const user = await Users.findOne(userFilter, {});
|
|
148
151
|
await emit('USER_UPDATE_HEARTBEAT', {
|
|
149
152
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -158,8 +161,40 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
158
161
|
const modifier = { $set: { initialPassword } };
|
|
159
162
|
await Users.updateOne(generateDbFilterById(user._id), modifier);
|
|
160
163
|
},
|
|
161
|
-
|
|
162
|
-
const userFilter = generateDbFilterById(
|
|
164
|
+
delete: async (userId) => {
|
|
165
|
+
const userFilter = generateDbFilterById(userId);
|
|
166
|
+
const existingUser = await Users.findOne(userFilter, {
|
|
167
|
+
projection: { emails: true, username: true },
|
|
168
|
+
});
|
|
169
|
+
if (!existingUser)
|
|
170
|
+
return null;
|
|
171
|
+
const obfuscatedEmails = existingUser.emails?.flatMap(({ address, verified }) => {
|
|
172
|
+
if (!verified)
|
|
173
|
+
return [];
|
|
174
|
+
return [
|
|
175
|
+
{
|
|
176
|
+
address: `${address}@${uuidv4()}.unchained.local`,
|
|
177
|
+
verified: true,
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
});
|
|
181
|
+
const obfuscatedUsername = existingUser.username ? `${existingUser.username}-${uuidv4()}` : null;
|
|
182
|
+
Users.updateOne(userFilter, {
|
|
183
|
+
$set: {
|
|
184
|
+
emails: obfuscatedEmails,
|
|
185
|
+
username: obfuscatedUsername,
|
|
186
|
+
services: {},
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
await mutations.delete(userId);
|
|
190
|
+
const user = await Users.findOne(userFilter, {});
|
|
191
|
+
await emit('USER_REMOVE', {
|
|
192
|
+
user: removeConfidentialServiceHashes(user),
|
|
193
|
+
});
|
|
194
|
+
return user;
|
|
195
|
+
},
|
|
196
|
+
updateProfile: async (userId, updatedData) => {
|
|
197
|
+
const userFilter = generateDbFilterById(userId);
|
|
163
198
|
const { meta, profile } = updatedData;
|
|
164
199
|
if (!meta && !profile) {
|
|
165
200
|
return Users.findOne(userFilter, {});
|
|
@@ -178,22 +213,20 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
178
213
|
// @ts-ignore
|
|
179
214
|
modifier.$set.meta = meta;
|
|
180
215
|
}
|
|
181
|
-
await mutations.update(
|
|
216
|
+
await mutations.update(userId, modifier);
|
|
182
217
|
const user = await Users.findOne(userFilter, {});
|
|
183
218
|
await emit('USER_UPDATE_PROFILE', {
|
|
184
219
|
user: removeConfidentialServiceHashes(user),
|
|
185
220
|
});
|
|
186
221
|
return user;
|
|
187
222
|
},
|
|
188
|
-
updateLastBillingAddress: async (_id, lastBillingAddress
|
|
223
|
+
updateLastBillingAddress: async (_id, lastBillingAddress) => {
|
|
189
224
|
const userFilter = generateDbFilterById(_id);
|
|
190
225
|
const user = await Users.findOne(userFilter, {});
|
|
191
|
-
log('Store Last Billing Address', { userId });
|
|
192
226
|
const modifier = {
|
|
193
227
|
$set: {
|
|
194
228
|
lastBillingAddress,
|
|
195
229
|
updated: new Date(),
|
|
196
|
-
updatedBy: userId,
|
|
197
230
|
},
|
|
198
231
|
};
|
|
199
232
|
const profile = user.profile || {};
|
|
@@ -206,23 +239,21 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
206
239
|
.filter(Boolean)
|
|
207
240
|
.join(' ');
|
|
208
241
|
}
|
|
209
|
-
await mutations.update(_id, modifier
|
|
242
|
+
await mutations.update(_id, modifier);
|
|
210
243
|
const updatedUser = await Users.findOne(userFilter, {});
|
|
211
244
|
await emit('USER_UPDATE_BILLING_ADDRESS', {
|
|
212
245
|
user: removeConfidentialServiceHashes(user),
|
|
213
246
|
});
|
|
214
247
|
return updatedUser;
|
|
215
248
|
},
|
|
216
|
-
updateLastContact: async (_id, lastContact
|
|
249
|
+
updateLastContact: async (_id, lastContact) => {
|
|
217
250
|
const userFilter = generateDbFilterById(_id);
|
|
218
251
|
const user = await Users.findOne(userFilter, {});
|
|
219
|
-
log('Store Last Contact', { userId });
|
|
220
252
|
const profile = user.profile || {};
|
|
221
253
|
const isGuest = !!user.guest;
|
|
222
254
|
const modifier = {
|
|
223
255
|
$set: {
|
|
224
256
|
updated: new Date(),
|
|
225
|
-
updatedBy: userId,
|
|
226
257
|
lastContact,
|
|
227
258
|
},
|
|
228
259
|
};
|
|
@@ -230,39 +261,37 @@ export const configureUsersModule = async ({ db, migrationRepository, }) => {
|
|
|
230
261
|
// Backport the contact phone number to the user profile
|
|
231
262
|
modifier.$set['profile.phoneMobile'] = lastContact.telNumber;
|
|
232
263
|
}
|
|
233
|
-
await mutations.update(_id, modifier
|
|
264
|
+
await mutations.update(_id, modifier);
|
|
234
265
|
const updatedUser = await Users.findOne(userFilter, {});
|
|
235
266
|
await emit('USER_UPDATE_LAST_CONTACT', {
|
|
236
267
|
user: removeConfidentialServiceHashes(user),
|
|
237
268
|
});
|
|
238
269
|
return updatedUser;
|
|
239
270
|
},
|
|
240
|
-
updateRoles: async (_id, roles
|
|
271
|
+
updateRoles: async (_id, roles) => {
|
|
241
272
|
const userFilter = generateDbFilterById(_id);
|
|
242
273
|
const modifier = {
|
|
243
274
|
$set: {
|
|
244
275
|
updated: new Date(),
|
|
245
|
-
updateBy: userId,
|
|
246
276
|
roles,
|
|
247
277
|
},
|
|
248
278
|
};
|
|
249
|
-
await mutations.update(_id, modifier
|
|
279
|
+
await mutations.update(_id, modifier);
|
|
250
280
|
const user = await Users.findOne(userFilter, {});
|
|
251
281
|
await emit('USER_UPDATE_ROLE', {
|
|
252
282
|
user: removeConfidentialServiceHashes(user),
|
|
253
283
|
});
|
|
254
284
|
return user;
|
|
255
285
|
},
|
|
256
|
-
updateTags: async (_id, tags
|
|
286
|
+
updateTags: async (_id, tags) => {
|
|
257
287
|
const userFilter = generateDbFilterById(_id);
|
|
258
288
|
const modifier = {
|
|
259
289
|
$set: {
|
|
260
290
|
updated: new Date(),
|
|
261
|
-
updateBy: userId,
|
|
262
291
|
tags,
|
|
263
292
|
},
|
|
264
293
|
};
|
|
265
|
-
await mutations.update(_id, modifier
|
|
294
|
+
await mutations.update(_id, modifier);
|
|
266
295
|
const user = await Users.findOne(userFilter, {});
|
|
267
296
|
await emit('USER_UPDATE_TAGS', {
|
|
268
297
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureUsersModule.js","sourceRoot":"","sources":["../../src/module/configureUsersModule.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"configureUsersModule.js","sourceRoot":"","sources":["../../src/module/configureUsersModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export const getUserCountryService = async (user,
|
|
2
|
-
const userLocale = modules.users.userLocale(user
|
|
1
|
+
export const getUserCountryService = async (user, { modules }) => {
|
|
2
|
+
const userLocale = modules.users.userLocale(user);
|
|
3
3
|
return modules.countries.findCountry({
|
|
4
4
|
isoCode: userLocale.country.toUpperCase(),
|
|
5
5
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserCountryService.js","sourceRoot":"","sources":["../../src/services/getUserCountryService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAA0B,KAAK,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"getUserCountryService.js","sourceRoot":"","sources":["../../src/services/getUserCountryService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAA0B,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACtF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;QACnC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE;KAC1C,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export const getUserLanguageService = async (user,
|
|
2
|
-
const userLocale = modules.users.userLocale(user
|
|
1
|
+
export const getUserLanguageService = async (user, { modules }) => {
|
|
2
|
+
const userLocale = modules.users.userLocale(user);
|
|
3
3
|
return modules.languages.findLanguage({
|
|
4
4
|
isoCode: userLocale.language,
|
|
5
5
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserLanguageService.js","sourceRoot":"","sources":["../../src/services/getUserLanguageService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAA2B,KAAK,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"getUserLanguageService.js","sourceRoot":"","sources":["../../src/services/getUserLanguageService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAA2B,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACxF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;QACpC,OAAO,EAAE,UAAU,CAAC,QAAQ;KAC7B,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const updateUserAvatarAfterUploadService = async ({ file }, context) => {
|
|
2
|
-
const { modules, services
|
|
2
|
+
const { modules, services } = context;
|
|
3
3
|
const { userId } = file.meta;
|
|
4
4
|
const user = await modules.users.findUserById(userId);
|
|
5
5
|
if (user?.avatarId) {
|
|
@@ -7,6 +7,6 @@ export const updateUserAvatarAfterUploadService = async ({ file }, context) => {
|
|
|
7
7
|
fileIds: [user.avatarId],
|
|
8
8
|
}, context);
|
|
9
9
|
}
|
|
10
|
-
await modules.users.updateAvatar(userId, file._id
|
|
10
|
+
await modules.users.updateAvatar(userId, file._id);
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=updateUserAvatarAfterUploadService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateUserAvatarAfterUploadService.js","sourceRoot":"","sources":["../../src/services/updateUserAvatarAfterUploadService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kCAAkC,GAAuC,KAAK,EACzF,EAAE,IAAI,EAAE,EACR,OAAO,EACP,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"updateUserAvatarAfterUploadService.js","sourceRoot":"","sources":["../../src/services/updateUserAvatarAfterUploadService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kCAAkC,GAAuC,KAAK,EACzF,EAAE,IAAI,EAAE,EACR,OAAO,EACP,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAA0B,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,IAAI,EAAE,QAAQ,EAAE;QAClB,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,CAC9B;YACE,OAAO,EAAE,CAAC,IAAI,CAAC,QAAkB,CAAC;SACnC,EACD,OAAO,CACR,CAAC;KACH;IAED,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { getUserCountryService } from './getUserCountryService';
|
|
2
2
|
import { getUserLanguageService } from './getUserLanguageService';
|
|
3
|
-
import { getUserRoleActionsService } from './getUserRoleActionsService';
|
|
4
3
|
import { updateUserAvatarAfterUploadService } from './updateUserAvatarAfterUploadService';
|
|
5
4
|
export const userServices = {
|
|
6
5
|
getUserCountry: getUserCountryService,
|
|
7
6
|
getUserLanguage: getUserLanguageService,
|
|
8
|
-
getUserRoleActions: getUserRoleActionsService,
|
|
9
7
|
updateUserAvatarAfterUpload: updateUserAvatarAfterUploadService,
|
|
10
8
|
};
|
|
11
9
|
//# sourceMappingURL=userServices.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userServices.js","sourceRoot":"","sources":["../../src/services/userServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"userServices.js","sourceRoot":"","sources":["../../src/services/userServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAE1F,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,cAAc,EAAE,qBAAqB;IACrC,eAAe,EAAE,sBAAsB;IACvC,2BAA2B,EAAE,kCAAkC;CAChE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/core-users",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-rc.1",
|
|
4
4
|
"main": "lib/users-index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./lib/users-index.js",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"clean": "rm -rf lib",
|
|
13
13
|
"build": "npm run clean && tsc",
|
|
14
14
|
"watch": "tsc -w",
|
|
15
|
-
"test": "jest --
|
|
15
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest --detectOpenHandles --forceExit",
|
|
16
|
+
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch --detectOpenHandles --forceExit"
|
|
16
17
|
},
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
|
@@ -30,19 +31,20 @@
|
|
|
30
31
|
},
|
|
31
32
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
32
33
|
"dependencies": {
|
|
33
|
-
"@unchainedshop/events": "^2.0.0-
|
|
34
|
-
"@unchainedshop/file-upload": "^2.0.0-
|
|
35
|
-
"@unchainedshop/logger": "^2.0.0-
|
|
36
|
-
"@unchainedshop/roles": "^2.0.0-
|
|
37
|
-
"@unchainedshop/utils": "^2.0.0-
|
|
34
|
+
"@unchainedshop/events": "^2.0.0-rc.1",
|
|
35
|
+
"@unchainedshop/file-upload": "^2.0.0-rc.1",
|
|
36
|
+
"@unchainedshop/logger": "^2.0.0-rc.1",
|
|
37
|
+
"@unchainedshop/roles": "^2.0.0-rc.1",
|
|
38
|
+
"@unchainedshop/utils": "^2.0.0-rc.1",
|
|
38
39
|
"locale": "^0.1.0",
|
|
39
|
-
"simpl-schema": "
|
|
40
|
+
"simpl-schema": "=3.2.0",
|
|
41
|
+
"uuid": "^9.0.0"
|
|
40
42
|
},
|
|
41
43
|
"devDependencies": {
|
|
42
|
-
"@types/node": "^18.11.
|
|
43
|
-
"@unchainedshop/types": "^2.0.0-
|
|
44
|
+
"@types/node": "^18.11.17",
|
|
45
|
+
"@unchainedshop/types": "^2.0.0-rc.1",
|
|
44
46
|
"jest": "^29.3.1",
|
|
45
47
|
"ts-jest": "^29.0.3",
|
|
46
|
-
"typescript": "^4.9.
|
|
48
|
+
"typescript": "^4.9.4"
|
|
47
49
|
}
|
|
48
50
|
}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import localePkg from 'locale';
|
|
2
|
-
import type { Locale as LocaleType } from 'locale';
|
|
3
2
|
import { Query } from '@unchainedshop/types/common';
|
|
4
|
-
import { ModuleInput, ModuleMutations } from '@unchainedshop/types/core';
|
|
3
|
+
import { ModuleInput, ModuleMutations, UnchainedCore } from '@unchainedshop/types/core';
|
|
5
4
|
import { User, UserQuery, UsersModule } from '@unchainedshop/types/user';
|
|
6
5
|
import { log, LogLevel } from '@unchainedshop/logger';
|
|
7
6
|
import { emit, registerEvents } from '@unchainedshop/events';
|
|
8
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
generateDbFilterById,
|
|
9
|
+
generateDbMutations,
|
|
10
|
+
Schemas,
|
|
11
|
+
systemLocale,
|
|
12
|
+
buildSortOptions,
|
|
13
|
+
} from '@unchainedshop/utils';
|
|
9
14
|
import { FileDirector } from '@unchainedshop/file-upload';
|
|
10
|
-
import {
|
|
15
|
+
import { SortDirection, SortOption } from '@unchainedshop/types/api';
|
|
16
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
11
17
|
import { UsersCollection } from '../db/UsersCollection';
|
|
12
18
|
import addMigrations from './addMigrations';
|
|
13
19
|
|
|
@@ -23,31 +29,24 @@ const USER_EVENTS = [
|
|
|
23
29
|
'USER_UPDATE_HEARTBEAT',
|
|
24
30
|
'USER_UPDATE_BILLING_ADDRESS',
|
|
25
31
|
'USER_UPDATE_LAST_CONTACT',
|
|
32
|
+
'USER_REMOVE',
|
|
26
33
|
];
|
|
27
|
-
const removeConfidentialServiceHashes = (rawUser: User): User => {
|
|
34
|
+
export const removeConfidentialServiceHashes = (rawUser: User): User => {
|
|
28
35
|
const user = rawUser;
|
|
29
36
|
delete user?.services;
|
|
30
37
|
return user;
|
|
31
38
|
};
|
|
32
39
|
|
|
33
|
-
const buildFindSelector = ({ includeGuests, queryString, ...rest }: UserQuery) => {
|
|
34
|
-
const selector: Query = { ...rest };
|
|
35
|
-
if (!includeGuests) selector.guest = { $
|
|
40
|
+
export const buildFindSelector = ({ includeGuests, queryString, ...rest }: UserQuery) => {
|
|
41
|
+
const selector: Query = { ...rest, deleted: null };
|
|
42
|
+
if (!includeGuests) selector.guest = { $in: [false, null] };
|
|
36
43
|
if (queryString) {
|
|
37
44
|
selector.$text = { $search: queryString };
|
|
38
45
|
}
|
|
39
46
|
return selector;
|
|
40
47
|
};
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
const locale =
|
|
44
|
-
params.localeContext ||
|
|
45
|
-
(user.lastLogin?.locale && new Locale(user.lastLogin.locale)) ||
|
|
46
|
-
systemLocale;
|
|
47
|
-
return locale;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
FileDirector.registerFileUploadCallback('user-avatars', async (file, context: Context) => {
|
|
49
|
+
FileDirector.registerFileUploadCallback('user-avatars', async (file, context: UnchainedCore) => {
|
|
51
50
|
const { services } = context;
|
|
52
51
|
|
|
53
52
|
return services.users.updateUserAvatarAfterUpload({ file }, context);
|
|
@@ -100,6 +99,7 @@ export const configureUsersModule = async ({
|
|
|
100
99
|
},
|
|
101
100
|
|
|
102
101
|
findUsers: async ({ limit, offset, ...query }) => {
|
|
102
|
+
const defaultSort = [{ key: 'created', value: SortDirection.ASC }] as SortOption[];
|
|
103
103
|
const selector = buildFindSelector(query);
|
|
104
104
|
|
|
105
105
|
if (query.queryString) {
|
|
@@ -111,11 +111,16 @@ export const configureUsersModule = async ({
|
|
|
111
111
|
}).toArray();
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
return Users.find(selector, {
|
|
114
|
+
return Users.find(selector, {
|
|
115
|
+
skip: offset,
|
|
116
|
+
limit,
|
|
117
|
+
sort: buildSortOptions(query.sort || defaultSort),
|
|
118
|
+
}).toArray();
|
|
115
119
|
},
|
|
116
120
|
|
|
117
121
|
userExists: async ({ userId }) => {
|
|
118
|
-
const selector = generateDbFilterById(userId);
|
|
122
|
+
const selector = generateDbFilterById<User>(userId);
|
|
123
|
+
selector.deleted = null; // skip deleted users when checked for existance!
|
|
119
124
|
const userCount = await Users.countDocuments(selector, { limit: 1 });
|
|
120
125
|
return !!userCount;
|
|
121
126
|
},
|
|
@@ -127,8 +132,9 @@ export const configureUsersModule = async ({
|
|
|
127
132
|
)?.[0];
|
|
128
133
|
},
|
|
129
134
|
|
|
130
|
-
userLocale: (user
|
|
131
|
-
|
|
135
|
+
userLocale: (user) => {
|
|
136
|
+
const locale = (user.lastLogin?.locale && new Locale(user.lastLogin.locale)) || systemLocale;
|
|
137
|
+
return locale;
|
|
132
138
|
},
|
|
133
139
|
|
|
134
140
|
// Mutations
|
|
@@ -146,7 +152,7 @@ export const configureUsersModule = async ({
|
|
|
146
152
|
return updateResult.modifiedCount;
|
|
147
153
|
},
|
|
148
154
|
|
|
149
|
-
updateAvatar: async (_id, fileId
|
|
155
|
+
updateAvatar: async (_id, fileId) => {
|
|
150
156
|
const userFilter = generateDbFilterById(_id);
|
|
151
157
|
log('Update Avatar', { userId: _id });
|
|
152
158
|
|
|
@@ -154,11 +160,10 @@ export const configureUsersModule = async ({
|
|
|
154
160
|
$set: {
|
|
155
161
|
avatarId: fileId,
|
|
156
162
|
updated: new Date(),
|
|
157
|
-
updatedBy: userId,
|
|
158
163
|
},
|
|
159
164
|
};
|
|
160
165
|
|
|
161
|
-
await mutations.update(_id, modifier
|
|
166
|
+
await mutations.update(_id, modifier);
|
|
162
167
|
const user = await Users.findOne(userFilter, {});
|
|
163
168
|
await emit('USER_UPDATE_AVATAR', {
|
|
164
169
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -185,7 +190,7 @@ export const configureUsersModule = async ({
|
|
|
185
190
|
},
|
|
186
191
|
};
|
|
187
192
|
|
|
188
|
-
await mutations.update(userId, modifier
|
|
193
|
+
await mutations.update(userId, modifier);
|
|
189
194
|
const user = await Users.findOne(userFilter, {});
|
|
190
195
|
|
|
191
196
|
await emit('USER_UPDATE_HEARTBEAT', {
|
|
@@ -204,8 +209,44 @@ export const configureUsersModule = async ({
|
|
|
204
209
|
await Users.updateOne(generateDbFilterById(user._id), modifier);
|
|
205
210
|
},
|
|
206
211
|
|
|
207
|
-
|
|
208
|
-
const userFilter = generateDbFilterById(
|
|
212
|
+
delete: async (userId) => {
|
|
213
|
+
const userFilter = generateDbFilterById(userId);
|
|
214
|
+
|
|
215
|
+
const existingUser = await Users.findOne(userFilter, {
|
|
216
|
+
projection: { emails: true, username: true },
|
|
217
|
+
});
|
|
218
|
+
if (!existingUser) return null;
|
|
219
|
+
|
|
220
|
+
const obfuscatedEmails = existingUser.emails?.flatMap(({ address, verified }) => {
|
|
221
|
+
if (!verified) return [];
|
|
222
|
+
return [
|
|
223
|
+
{
|
|
224
|
+
address: `${address}@${uuidv4()}.unchained.local`,
|
|
225
|
+
verified: true,
|
|
226
|
+
},
|
|
227
|
+
];
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
const obfuscatedUsername = existingUser.username ? `${existingUser.username}-${uuidv4()}` : null;
|
|
231
|
+
|
|
232
|
+
Users.updateOne(userFilter, {
|
|
233
|
+
$set: {
|
|
234
|
+
emails: obfuscatedEmails,
|
|
235
|
+
username: obfuscatedUsername,
|
|
236
|
+
services: {},
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
await mutations.delete(userId);
|
|
241
|
+
const user = await Users.findOne(userFilter, {});
|
|
242
|
+
await emit('USER_REMOVE', {
|
|
243
|
+
user: removeConfidentialServiceHashes(user),
|
|
244
|
+
});
|
|
245
|
+
return user;
|
|
246
|
+
},
|
|
247
|
+
|
|
248
|
+
updateProfile: async (userId, updatedData) => {
|
|
249
|
+
const userFilter = generateDbFilterById(userId);
|
|
209
250
|
const { meta, profile } = updatedData;
|
|
210
251
|
|
|
211
252
|
if (!meta && !profile) {
|
|
@@ -229,7 +270,7 @@ export const configureUsersModule = async ({
|
|
|
229
270
|
modifier.$set.meta = meta;
|
|
230
271
|
}
|
|
231
272
|
|
|
232
|
-
await mutations.update(
|
|
273
|
+
await mutations.update(userId, modifier);
|
|
233
274
|
const user = await Users.findOne(userFilter, {});
|
|
234
275
|
await emit('USER_UPDATE_PROFILE', {
|
|
235
276
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -237,17 +278,14 @@ export const configureUsersModule = async ({
|
|
|
237
278
|
return user;
|
|
238
279
|
},
|
|
239
280
|
|
|
240
|
-
updateLastBillingAddress: async (_id, lastBillingAddress
|
|
281
|
+
updateLastBillingAddress: async (_id, lastBillingAddress) => {
|
|
241
282
|
const userFilter = generateDbFilterById(_id);
|
|
242
283
|
const user = await Users.findOne(userFilter, {});
|
|
243
284
|
|
|
244
|
-
log('Store Last Billing Address', { userId });
|
|
245
|
-
|
|
246
285
|
const modifier = {
|
|
247
286
|
$set: {
|
|
248
287
|
lastBillingAddress,
|
|
249
288
|
updated: new Date(),
|
|
250
|
-
updatedBy: userId,
|
|
251
289
|
},
|
|
252
290
|
};
|
|
253
291
|
const profile = user.profile || {};
|
|
@@ -262,7 +300,7 @@ export const configureUsersModule = async ({
|
|
|
262
300
|
.join(' ');
|
|
263
301
|
}
|
|
264
302
|
|
|
265
|
-
await mutations.update(_id, modifier
|
|
303
|
+
await mutations.update(_id, modifier);
|
|
266
304
|
const updatedUser = await Users.findOne(userFilter, {});
|
|
267
305
|
await emit('USER_UPDATE_BILLING_ADDRESS', {
|
|
268
306
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -270,19 +308,15 @@ export const configureUsersModule = async ({
|
|
|
270
308
|
return updatedUser;
|
|
271
309
|
},
|
|
272
310
|
|
|
273
|
-
updateLastContact: async (_id, lastContact
|
|
311
|
+
updateLastContact: async (_id, lastContact) => {
|
|
274
312
|
const userFilter = generateDbFilterById(_id);
|
|
275
313
|
const user = await Users.findOne(userFilter, {});
|
|
276
|
-
|
|
277
|
-
log('Store Last Contact', { userId });
|
|
278
|
-
|
|
279
314
|
const profile = user.profile || {};
|
|
280
315
|
const isGuest = !!user.guest;
|
|
281
316
|
|
|
282
317
|
const modifier = {
|
|
283
318
|
$set: {
|
|
284
319
|
updated: new Date(),
|
|
285
|
-
updatedBy: userId,
|
|
286
320
|
lastContact,
|
|
287
321
|
},
|
|
288
322
|
};
|
|
@@ -292,7 +326,7 @@ export const configureUsersModule = async ({
|
|
|
292
326
|
modifier.$set['profile.phoneMobile'] = lastContact.telNumber;
|
|
293
327
|
}
|
|
294
328
|
|
|
295
|
-
await mutations.update(_id, modifier
|
|
329
|
+
await mutations.update(_id, modifier);
|
|
296
330
|
const updatedUser = await Users.findOne(userFilter, {});
|
|
297
331
|
await emit('USER_UPDATE_LAST_CONTACT', {
|
|
298
332
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -300,35 +334,33 @@ export const configureUsersModule = async ({
|
|
|
300
334
|
return updatedUser;
|
|
301
335
|
},
|
|
302
336
|
|
|
303
|
-
updateRoles: async (_id, roles
|
|
337
|
+
updateRoles: async (_id, roles) => {
|
|
304
338
|
const userFilter = generateDbFilterById(_id);
|
|
305
339
|
|
|
306
340
|
const modifier = {
|
|
307
341
|
$set: {
|
|
308
342
|
updated: new Date(),
|
|
309
|
-
updateBy: userId,
|
|
310
343
|
roles,
|
|
311
344
|
},
|
|
312
345
|
};
|
|
313
|
-
await mutations.update(_id, modifier
|
|
346
|
+
await mutations.update(_id, modifier);
|
|
314
347
|
const user = await Users.findOne(userFilter, {});
|
|
315
348
|
await emit('USER_UPDATE_ROLE', {
|
|
316
349
|
user: removeConfidentialServiceHashes(user),
|
|
317
350
|
});
|
|
318
351
|
return user;
|
|
319
352
|
},
|
|
320
|
-
updateTags: async (_id, tags
|
|
353
|
+
updateTags: async (_id, tags) => {
|
|
321
354
|
const userFilter = generateDbFilterById(_id);
|
|
322
355
|
|
|
323
356
|
const modifier = {
|
|
324
357
|
$set: {
|
|
325
358
|
updated: new Date(),
|
|
326
|
-
updateBy: userId,
|
|
327
359
|
tags,
|
|
328
360
|
},
|
|
329
361
|
};
|
|
330
362
|
|
|
331
|
-
await mutations.update(_id, modifier
|
|
363
|
+
await mutations.update(_id, modifier);
|
|
332
364
|
const user = await Users.findOne(userFilter, {});
|
|
333
365
|
await emit('USER_UPDATE_TAGS', {
|
|
334
366
|
user: removeConfidentialServiceHashes(user),
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { GetUserCountryService } from '@unchainedshop/types/user';
|
|
2
2
|
|
|
3
|
-
export const getUserCountryService: GetUserCountryService = async (user,
|
|
4
|
-
const userLocale = modules.users.userLocale(user
|
|
5
|
-
|
|
3
|
+
export const getUserCountryService: GetUserCountryService = async (user, { modules }) => {
|
|
4
|
+
const userLocale = modules.users.userLocale(user);
|
|
6
5
|
return modules.countries.findCountry({
|
|
7
6
|
isoCode: userLocale.country.toUpperCase(),
|
|
8
7
|
});
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { GetUserLanguageService } from '@unchainedshop/types/user';
|
|
2
2
|
|
|
3
|
-
export const getUserLanguageService: GetUserLanguageService = async (user,
|
|
4
|
-
const userLocale = modules.users.userLocale(user
|
|
5
|
-
|
|
3
|
+
export const getUserLanguageService: GetUserLanguageService = async (user, { modules }) => {
|
|
4
|
+
const userLocale = modules.users.userLocale(user);
|
|
6
5
|
return modules.languages.findLanguage({
|
|
7
6
|
isoCode: userLocale.language,
|
|
8
7
|
});
|
|
@@ -4,7 +4,7 @@ export const updateUserAvatarAfterUploadService: UpdateUserAvatarAfterUploadServ
|
|
|
4
4
|
{ file },
|
|
5
5
|
context,
|
|
6
6
|
) => {
|
|
7
|
-
const { modules, services
|
|
7
|
+
const { modules, services } = context;
|
|
8
8
|
const { userId } = file.meta as { userId: string };
|
|
9
9
|
const user = await modules.users.findUserById(userId);
|
|
10
10
|
|
|
@@ -17,5 +17,5 @@ export const updateUserAvatarAfterUploadService: UpdateUserAvatarAfterUploadServ
|
|
|
17
17
|
);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
await modules.users.updateAvatar(userId, file._id
|
|
20
|
+
await modules.users.updateAvatar(userId, file._id);
|
|
21
21
|
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { UserServices } from '@unchainedshop/types/user';
|
|
2
2
|
import { getUserCountryService } from './getUserCountryService';
|
|
3
3
|
import { getUserLanguageService } from './getUserLanguageService';
|
|
4
|
-
import { getUserRoleActionsService } from './getUserRoleActionsService';
|
|
5
4
|
import { updateUserAvatarAfterUploadService } from './updateUserAvatarAfterUploadService';
|
|
6
5
|
|
|
7
6
|
export const userServices: UserServices = {
|
|
8
7
|
getUserCountry: getUserCountryService,
|
|
9
8
|
getUserLanguage: getUserLanguageService,
|
|
10
|
-
getUserRoleActions: getUserRoleActionsService,
|
|
11
9
|
updateUserAvatarAfterUpload: updateUserAvatarAfterUploadService,
|
|
12
10
|
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
_id: 'PKve0k9fLCUzn2EUi',
|
|
3
|
+
guest: false,
|
|
4
|
+
initialPassword: false,
|
|
5
|
+
lastBillingAddress: {},
|
|
6
|
+
profile: {
|
|
7
|
+
address: {
|
|
8
|
+
firstName: null,
|
|
9
|
+
lastName: null,
|
|
10
|
+
company: null,
|
|
11
|
+
addressLine: null,
|
|
12
|
+
addressLine2: null,
|
|
13
|
+
postalCode: null,
|
|
14
|
+
regionCode: null,
|
|
15
|
+
city: null,
|
|
16
|
+
countryCode: null,
|
|
17
|
+
},
|
|
18
|
+
birthday: new Date('2022-11-21T21:00:00.000Z'),
|
|
19
|
+
displayName: null,
|
|
20
|
+
gender: null,
|
|
21
|
+
phoneMobile: null,
|
|
22
|
+
},
|
|
23
|
+
roles: ['admin'],
|
|
24
|
+
services: {
|
|
25
|
+
password: {
|
|
26
|
+
bcrypt: '$2a$10$EM5ILD3UtmiP/JJzDvhL3ennDpMEYXfFCCPZ6AiSk3ZM1aPUSjoI2',
|
|
27
|
+
reset: [
|
|
28
|
+
{
|
|
29
|
+
token:
|
|
30
|
+
'637dfa08a1a48aba26437de983a6cef32fef369252c97791b81712b2283a1173308efade2666d24dab6aa4',
|
|
31
|
+
address: 'admin@unchained.local',
|
|
32
|
+
when: new Date('2022-11-26T19:37:30.170Z'),
|
|
33
|
+
reason: 'reset',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
token: {
|
|
38
|
+
secret: 'secret',
|
|
39
|
+
},
|
|
40
|
+
resume: {
|
|
41
|
+
loginTokens: [
|
|
42
|
+
{
|
|
43
|
+
hashedToken: '12eK1jAbw9kcP5u/sha4M5T2pKVVQol1aAbITYGmtCI=',
|
|
44
|
+
when: new Date('2022-11-27T10:36:00.313Z'),
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
webAuthn: [],
|
|
49
|
+
web3: [
|
|
50
|
+
{
|
|
51
|
+
address: '0xF5F72AE7fa1fa990ebaF163208Ed7aD6a3f42DEA',
|
|
52
|
+
nonce: '463693',
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
'two-factor': {
|
|
56
|
+
secret: {
|
|
57
|
+
base32: 'JF2HO5SAN4YFE7LLKR4FMRSXN47ESVCE',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
createdAt: new Date('2022-10-20T17:14:48.834Z'),
|
|
62
|
+
updatedAt: new Date('2022-11-26T19:17:57.131Z'),
|
|
63
|
+
username: 'admin',
|
|
64
|
+
emails: [
|
|
65
|
+
{
|
|
66
|
+
address: 'admin@unchained.local',
|
|
67
|
+
verified: false,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
lastLogin: {
|
|
71
|
+
timestamp: new Date('2022-11-28T16:28:53.202Z'),
|
|
72
|
+
remoteAddress: '::ffff:127.0.0.1',
|
|
73
|
+
remotePort: '42978',
|
|
74
|
+
userAgent:
|
|
75
|
+
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
|
|
76
|
+
locale: 'de_CH',
|
|
77
|
+
countryContext: 'CH',
|
|
78
|
+
},
|
|
79
|
+
updated: new Date('2022-11-30T11:02:19.624Z'),
|
|
80
|
+
updatedBy: 'PKve0k9fLCUzn2EUi',
|
|
81
|
+
};
|
|
@@ -1,47 +1,35 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { UsersModule } from '@unchainedshop/types/user';
|
|
5
|
-
import { Db } from '@unchainedshop/types/common';
|
|
1
|
+
import user from './mock/user-mock'
|
|
2
|
+
import {buildFindSelector, removeConfidentialServiceHashes} from '../src/module/configureUsersModule'
|
|
3
|
+
import { User } from '@unchainedshop/types/user';
|
|
6
4
|
|
|
7
|
-
describe('
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
db = await initDb();
|
|
14
|
-
module = await configureUsersModule({ db });
|
|
15
|
-
assert.ok(module);
|
|
16
|
-
});
|
|
17
|
-
before(async () => {
|
|
18
|
-
const Users = db.collection('users');
|
|
19
|
-
await Users.deleteMany({});
|
|
20
|
-
const insertResult = await Users.insertOne({
|
|
21
|
-
emails: [],
|
|
22
|
-
username: 'test.user',
|
|
23
|
-
lastLogin: {},
|
|
24
|
-
profile: {
|
|
25
|
-
displayName: 'Test User',
|
|
26
|
-
birthday: new Date('1995-01-12'),
|
|
27
|
-
phoneMobile: '+41701231212',
|
|
28
|
-
gender: 'Male',
|
|
29
|
-
},
|
|
30
|
-
guest: false,
|
|
31
|
-
tags: [],
|
|
32
|
-
services: {},
|
|
33
|
-
roles: ['admin'],
|
|
5
|
+
describe('User', () => {
|
|
6
|
+
describe('removeConfidentialServiceHashes', () => {
|
|
7
|
+
it('Should remove sensitive user credentials ', async () => {
|
|
8
|
+
expect(user.services).not.toBeUndefined()
|
|
9
|
+
removeConfidentialServiceHashes(user as unknown as User)
|
|
10
|
+
expect(user.services).toBeUndefined()
|
|
34
11
|
});
|
|
35
12
|
|
|
36
|
-
|
|
37
|
-
})
|
|
13
|
+
|
|
14
|
+
})
|
|
38
15
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
16
|
+
describe('buildFindSelector', () => {
|
|
17
|
+
it('Return the correct filter when no parameter is passed', async () => {
|
|
18
|
+
expect(buildFindSelector({})).toEqual({ "deleted": null, guest: { '$in': [false, null] },
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
it('Return the correct filter when no parameter is passed queryString and includeGuest: true', async () => {
|
|
22
|
+
expect(buildFindSelector({queryString: "Hello world", includeGuests: true})).toEqual({ "deleted": null,'$text': { '$search': 'Hello world' } })
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('Should include additional user field selector in addition too queryString and includeGuests', async () => {
|
|
26
|
+
expect(buildFindSelector({queryString: "Hello world", includeGuests: false, "profile.displayName": "mikael"})).toEqual({
|
|
27
|
+
'profile.displayName': 'mikael',
|
|
28
|
+
"deleted": null,
|
|
29
|
+
guest: { '$in': [false, null] },
|
|
30
|
+
'$text': { '$search': 'Hello world' }
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
})
|
|
34
|
+
|
|
47
35
|
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Roles } from '@unchainedshop/roles';
|
|
2
|
-
const permissions = async (userRoles, allRoles) => {
|
|
3
|
-
const actions = userRoles?.flatMap((role) => {
|
|
4
|
-
const foundRole = Object.values(allRoles).find((r) => r.name === role);
|
|
5
|
-
if (!foundRole)
|
|
6
|
-
return [];
|
|
7
|
-
return Object.entries(foundRole.allowRules || {}).flatMap(([roleName, funcs]) => {
|
|
8
|
-
return funcs.map(async (f) => {
|
|
9
|
-
try {
|
|
10
|
-
// return permissions that are by default activated for that role,
|
|
11
|
-
// accidentally don't check context
|
|
12
|
-
const r = await f(null, null, null);
|
|
13
|
-
if (r)
|
|
14
|
-
return roleName;
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
catch (e) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
const resolvedActions = await Promise.all(actions);
|
|
24
|
-
return [...new Set(resolvedActions)].filter(Boolean).sort((a, b) => a.localeCompare(b));
|
|
25
|
-
};
|
|
26
|
-
export const getUserRoleActionsService = async (user, context) => {
|
|
27
|
-
const userRoles = Roles.getUserRoles(user?._id, user.roles, true);
|
|
28
|
-
return permissions(userRoles, context.roles);
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=getUserRoleActionsService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getUserRoleActionsService.js","sourceRoot":"","sources":["../../src/services/getUserRoleActionsService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,MAAM,WAAW,GAAG,KAAK,EAAE,SAAc,EAAE,QAAa,EAAE,EAAE;IAC1D,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAM,EAAE,EAAE;YACnF,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3B,IAAI;oBACF,kEAAkE;oBAClE,mCAAmC;oBACnC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC;wBAAE,OAAO,QAAQ,CAAC;oBACvB,OAAO,IAAI,CAAC;iBACb;gBAAC,OAAO,CAAC,EAAE;oBACV,OAAO,IAAI,CAAC;iBACb;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAA8B,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC1F,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClE,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAsB,CAAC;AACpE,CAAC,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { GetUserRoleActionsService } from '@unchainedshop/types/user';
|
|
2
|
-
import { Roles } from '@unchainedshop/roles';
|
|
3
|
-
|
|
4
|
-
const permissions = async (userRoles: any, allRoles: any) => {
|
|
5
|
-
const actions = userRoles?.flatMap((role) => {
|
|
6
|
-
const foundRole: any = Object.values(allRoles).find((r: any) => r.name === role);
|
|
7
|
-
if (!foundRole) return [];
|
|
8
|
-
return Object.entries(foundRole.allowRules || {}).flatMap(([roleName, funcs]: any) => {
|
|
9
|
-
return funcs.map(async (f) => {
|
|
10
|
-
try {
|
|
11
|
-
// return permissions that are by default activated for that role,
|
|
12
|
-
// accidentally don't check context
|
|
13
|
-
const r = await f(null, null, null);
|
|
14
|
-
if (r) return roleName;
|
|
15
|
-
return null;
|
|
16
|
-
} catch (e) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
const resolvedActions = await Promise.all(actions);
|
|
23
|
-
return [...new Set(resolvedActions)].filter(Boolean).sort((a: any, b: any) => a.localeCompare(b));
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const getUserRoleActionsService: GetUserRoleActionsService = async (user, context) => {
|
|
27
|
-
const userRoles = Roles.getUserRoles(user?._id, user.roles, true);
|
|
28
|
-
return permissions(userRoles, context.roles) as Promise<string[]>;
|
|
29
|
-
};
|