@strapi/plugin-users-permissions 0.0.0-next.f0bfcece1007e5aa527570187635aefc86db536e → 0.0.0-next.f0f36e3df4b18f167036dcbca529dcb933bf4e1d
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/admin/src/components/Permissions/PermissionRow/SubCategory.jsx +8 -1
- package/admin/src/components/Policies/index.jsx +1 -0
- package/admin/src/components/UsersPermissions/index.jsx +1 -0
- package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +2 -1
- package/admin/src/pages/Providers/index.jsx +74 -76
- package/admin/src/pages/Roles/pages/CreatePage.jsx +20 -7
- package/admin/src/pages/Roles/pages/EditPage.jsx +12 -7
- package/admin/src/pages/Roles/pages/ListPage/index.jsx +91 -93
- package/admin/src/translations/en.json +1 -0
- package/dist/admin/components/FormModal/Input/index.js.map +1 -1
- package/dist/admin/components/FormModal/Input/index.mjs.map +1 -1
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.js +3 -1
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.js.map +1 -1
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs +3 -1
- package/dist/admin/components/Permissions/PermissionRow/SubCategory.mjs.map +1 -1
- package/dist/admin/components/Permissions/PermissionRow/index.js.map +1 -1
- package/dist/admin/components/Permissions/PermissionRow/index.mjs.map +1 -1
- package/dist/admin/components/Policies/index.js +1 -0
- package/dist/admin/components/Policies/index.js.map +1 -1
- package/dist/admin/components/Policies/index.mjs +1 -0
- package/dist/admin/components/Policies/index.mjs.map +1 -1
- package/dist/admin/components/UsersPermissions/index.js +1 -0
- package/dist/admin/components/UsersPermissions/index.js.map +1 -1
- package/dist/admin/components/UsersPermissions/index.mjs +1 -0
- package/dist/admin/components/UsersPermissions/index.mjs.map +1 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js +2 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.js.map +1 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs +2 -1
- package/dist/admin/pages/EmailTemplates/components/EmailForm.mjs.map +1 -1
- package/dist/admin/pages/Providers/index.js +84 -88
- package/dist/admin/pages/Providers/index.js.map +1 -1
- package/dist/admin/pages/Providers/index.mjs +84 -88
- package/dist/admin/pages/Providers/index.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/CreatePage.js +14 -1
- package/dist/admin/pages/Roles/pages/CreatePage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/CreatePage.mjs +16 -3
- package/dist/admin/pages/Roles/pages/CreatePage.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.js +13 -3
- package/dist/admin/pages/Roles/pages/EditPage.js.map +1 -1
- package/dist/admin/pages/Roles/pages/EditPage.mjs +14 -4
- package/dist/admin/pages/Roles/pages/EditPage.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.js.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/components/TableBody.mjs.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.js +95 -99
- package/dist/admin/pages/Roles/pages/ListPage/index.js.map +1 -1
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs +95 -99
- package/dist/admin/pages/Roles/pages/ListPage/index.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/getTrad.js.map +1 -1
- package/dist/admin/utils/getTrad.mjs.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
- package/dist/server/bootstrap/index.js +28 -7
- package/dist/server/bootstrap/index.js.map +1 -1
- package/dist/server/bootstrap/index.mjs +28 -7
- package/dist/server/bootstrap/index.mjs.map +1 -1
- package/dist/server/config.js +16 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +16 -0
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/auth.js +204 -3
- package/dist/server/controllers/auth.js.map +1 -1
- package/dist/server/controllers/auth.mjs +204 -3
- package/dist/server/controllers/auth.mjs.map +1 -1
- package/dist/server/controllers/content-manager-user.js.map +1 -1
- package/dist/server/controllers/content-manager-user.mjs.map +1 -1
- package/dist/server/graphql/resolvers-configs.js.map +1 -1
- package/dist/server/graphql/resolvers-configs.mjs.map +1 -1
- package/dist/server/middlewares/rateLimit.js.map +1 -1
- package/dist/server/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/routes/content-api/auth.js +16 -0
- package/dist/server/routes/content-api/auth.js.map +1 -1
- package/dist/server/routes/content-api/auth.mjs +16 -0
- package/dist/server/routes/content-api/auth.mjs.map +1 -1
- package/dist/server/routes/content-api/validation.js +1 -0
- package/dist/server/routes/content-api/validation.js.map +1 -1
- package/dist/server/routes/content-api/validation.mjs +1 -0
- package/dist/server/routes/content-api/validation.mjs.map +1 -1
- package/dist/server/services/constants.js +19 -0
- package/dist/server/services/constants.js.map +1 -0
- package/dist/server/services/constants.mjs +17 -0
- package/dist/server/services/constants.mjs.map +1 -0
- package/dist/server/services/jwt.js +45 -2
- package/dist/server/services/jwt.js.map +1 -1
- package/dist/server/services/jwt.mjs +45 -2
- package/dist/server/services/jwt.mjs.map +1 -1
- package/dist/server/services/providers-registry.js.map +1 -1
- package/dist/server/services/providers-registry.mjs.map +1 -1
- package/dist/server/services/role.js.map +1 -1
- package/dist/server/services/role.mjs.map +1 -1
- package/dist/server/services/user.js +29 -20
- package/dist/server/services/user.js.map +1 -1
- package/dist/server/services/user.mjs +29 -20
- package/dist/server/services/user.mjs.map +1 -1
- package/dist/server/services/users-permissions.js +8 -0
- package/dist/server/services/users-permissions.js.map +1 -1
- package/dist/server/services/users-permissions.mjs +8 -0
- package/dist/server/services/users-permissions.mjs.map +1 -1
- package/package.json +9 -9
- package/server/bootstrap/index.js +31 -0
- package/server/config.js +22 -0
- package/server/controllers/auth.js +248 -8
- package/server/routes/content-api/auth.js +12 -0
- package/server/routes/content-api/validation.js +1 -0
- package/server/services/constants.js +9 -0
- package/server/services/jwt.js +50 -2
- package/server/services/user.js +11 -0
- package/server/services/users-permissions.js +2 -0
|
@@ -29,6 +29,10 @@ function requireAuth() {
|
|
|
29
29
|
auth
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
|
+
const extractDeviceId = (requestBody)=>{
|
|
33
|
+
const { deviceId } = requestBody || {};
|
|
34
|
+
return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;
|
|
35
|
+
};
|
|
32
36
|
auth = ({ strapi: strapi1 })=>({
|
|
33
37
|
async callback (ctx) {
|
|
34
38
|
const provider = ctx.params.provider || 'local';
|
|
@@ -84,6 +88,42 @@ function requireAuth() {
|
|
|
84
88
|
if (user.blocked === true) {
|
|
85
89
|
throw new ApplicationError('Your account has been blocked by an administrator');
|
|
86
90
|
}
|
|
91
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
92
|
+
if (mode === 'refresh') {
|
|
93
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
94
|
+
const refresh = await strapi1.sessionManager('users-permissions').generateRefreshToken(String(user.id), deviceId, {
|
|
95
|
+
type: 'refresh'
|
|
96
|
+
});
|
|
97
|
+
const access = await strapi1.sessionManager('users-permissions').generateAccessToken(refresh.token);
|
|
98
|
+
if ('error' in access) {
|
|
99
|
+
throw new ApplicationError('Invalid credentials');
|
|
100
|
+
}
|
|
101
|
+
const upSessions = strapi1.config.get('plugin::users-permissions.sessions');
|
|
102
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
103
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
104
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
105
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
106
|
+
const isSecure = typeof upSessions.cookie?.secure === 'boolean' ? upSessions.cookie?.secure : isProduction;
|
|
107
|
+
const cookieOptions = {
|
|
108
|
+
httpOnly: true,
|
|
109
|
+
secure: isSecure,
|
|
110
|
+
sameSite: upSessions.cookie?.sameSite ?? 'lax',
|
|
111
|
+
path: upSessions.cookie?.path ?? '/',
|
|
112
|
+
domain: upSessions.cookie?.domain,
|
|
113
|
+
overwrite: true
|
|
114
|
+
};
|
|
115
|
+
ctx.cookies.set(cookieName, refresh.token, cookieOptions);
|
|
116
|
+
return ctx.send({
|
|
117
|
+
jwt: access.token,
|
|
118
|
+
user: await sanitizeUser(user, ctx)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return ctx.send({
|
|
122
|
+
jwt: access.token,
|
|
123
|
+
refreshToken: refresh.token,
|
|
124
|
+
user: await sanitizeUser(user, ctx)
|
|
125
|
+
});
|
|
126
|
+
}
|
|
87
127
|
return ctx.send({
|
|
88
128
|
jwt: getService('jwt').issue({
|
|
89
129
|
id: user.id
|
|
@@ -97,6 +137,42 @@ function requireAuth() {
|
|
|
97
137
|
if (user.blocked) {
|
|
98
138
|
throw new ForbiddenError('Your account has been blocked by an administrator');
|
|
99
139
|
}
|
|
140
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
141
|
+
if (mode === 'refresh') {
|
|
142
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
143
|
+
const refresh = await strapi1.sessionManager('users-permissions').generateRefreshToken(String(user.id), deviceId, {
|
|
144
|
+
type: 'refresh'
|
|
145
|
+
});
|
|
146
|
+
const access = await strapi1.sessionManager('users-permissions').generateAccessToken(refresh.token);
|
|
147
|
+
if ('error' in access) {
|
|
148
|
+
throw new ApplicationError('Invalid credentials');
|
|
149
|
+
}
|
|
150
|
+
const upSessions = strapi1.config.get('plugin::users-permissions.sessions');
|
|
151
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
152
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
153
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
154
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
155
|
+
const isSecure = typeof upSessions.cookie?.secure === 'boolean' ? upSessions.cookie?.secure : isProduction;
|
|
156
|
+
const cookieOptions = {
|
|
157
|
+
httpOnly: true,
|
|
158
|
+
secure: isSecure,
|
|
159
|
+
sameSite: upSessions.cookie?.sameSite ?? 'lax',
|
|
160
|
+
path: upSessions.cookie?.path ?? '/',
|
|
161
|
+
domain: upSessions.cookie?.domain,
|
|
162
|
+
overwrite: true
|
|
163
|
+
};
|
|
164
|
+
ctx.cookies.set(cookieName, refresh.token, cookieOptions);
|
|
165
|
+
return ctx.send({
|
|
166
|
+
jwt: access.token,
|
|
167
|
+
user: await sanitizeUser(user, ctx)
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return ctx.send({
|
|
171
|
+
jwt: access.token,
|
|
172
|
+
refreshToken: refresh.token,
|
|
173
|
+
user: await sanitizeUser(user, ctx)
|
|
174
|
+
});
|
|
175
|
+
}
|
|
100
176
|
return ctx.send({
|
|
101
177
|
jwt: getService('jwt').issue({
|
|
102
178
|
id: user.id
|
|
@@ -128,7 +204,28 @@ function requireAuth() {
|
|
|
128
204
|
await getService('user').edit(user.id, {
|
|
129
205
|
password
|
|
130
206
|
});
|
|
131
|
-
|
|
207
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
208
|
+
if (mode === 'refresh') {
|
|
209
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
210
|
+
if (deviceId) {
|
|
211
|
+
// Invalidate sessions: specific device if deviceId provided
|
|
212
|
+
await strapi1.sessionManager('users-permissions').invalidateRefreshToken(String(user.id), deviceId);
|
|
213
|
+
}
|
|
214
|
+
const newDeviceId = deviceId || crypto.randomUUID();
|
|
215
|
+
const refresh = await strapi1.sessionManager('users-permissions').generateRefreshToken(String(user.id), newDeviceId, {
|
|
216
|
+
type: 'refresh'
|
|
217
|
+
});
|
|
218
|
+
const access = await strapi1.sessionManager('users-permissions').generateAccessToken(refresh.token);
|
|
219
|
+
if ('error' in access) {
|
|
220
|
+
throw new ApplicationError('Invalid credentials');
|
|
221
|
+
}
|
|
222
|
+
return ctx.send({
|
|
223
|
+
jwt: access.token,
|
|
224
|
+
refreshToken: refresh.token,
|
|
225
|
+
user: await sanitizeUser(user, ctx)
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return ctx.send({
|
|
132
229
|
jwt: getService('jwt').issue({
|
|
133
230
|
id: user.id
|
|
134
231
|
}),
|
|
@@ -153,14 +250,102 @@ function requireAuth() {
|
|
|
153
250
|
resetPasswordToken: null,
|
|
154
251
|
password
|
|
155
252
|
});
|
|
156
|
-
|
|
157
|
-
|
|
253
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
254
|
+
if (mode === 'refresh') {
|
|
255
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
256
|
+
if (deviceId) {
|
|
257
|
+
// Invalidate sessions: specific device if deviceId provided
|
|
258
|
+
await strapi1.sessionManager('users-permissions').invalidateRefreshToken(String(user.id), deviceId);
|
|
259
|
+
}
|
|
260
|
+
const newDeviceId = deviceId || crypto.randomUUID();
|
|
261
|
+
const refresh = await strapi1.sessionManager('users-permissions').generateRefreshToken(String(user.id), newDeviceId, {
|
|
262
|
+
type: 'refresh'
|
|
263
|
+
});
|
|
264
|
+
const access = await strapi1.sessionManager('users-permissions').generateAccessToken(refresh.token);
|
|
265
|
+
if ('error' in access) {
|
|
266
|
+
throw new ApplicationError('Invalid credentials');
|
|
267
|
+
}
|
|
268
|
+
return ctx.send({
|
|
269
|
+
jwt: access.token,
|
|
270
|
+
refreshToken: refresh.token,
|
|
271
|
+
user: await sanitizeUser(user, ctx)
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return ctx.send({
|
|
158
275
|
jwt: getService('jwt').issue({
|
|
159
276
|
id: user.id
|
|
160
277
|
}),
|
|
161
278
|
user: await sanitizeUser(user, ctx)
|
|
162
279
|
});
|
|
163
280
|
},
|
|
281
|
+
async refresh (ctx) {
|
|
282
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
283
|
+
if (mode !== 'refresh') {
|
|
284
|
+
return ctx.notFound();
|
|
285
|
+
}
|
|
286
|
+
const { refreshToken } = ctx.request.body || {};
|
|
287
|
+
if (!refreshToken || typeof refreshToken !== 'string') {
|
|
288
|
+
return ctx.badRequest('Missing refresh token');
|
|
289
|
+
}
|
|
290
|
+
const rotation = await strapi1.sessionManager('users-permissions').rotateRefreshToken(refreshToken);
|
|
291
|
+
if ('error' in rotation) {
|
|
292
|
+
return ctx.unauthorized('Invalid refresh token');
|
|
293
|
+
}
|
|
294
|
+
const result = await strapi1.sessionManager('users-permissions').generateAccessToken(rotation.token);
|
|
295
|
+
if ('error' in result) {
|
|
296
|
+
return ctx.unauthorized('Invalid refresh token');
|
|
297
|
+
}
|
|
298
|
+
const upSessions = strapi1.config.get('plugin::users-permissions.sessions');
|
|
299
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
300
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
301
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
302
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
303
|
+
const isSecure = typeof upSessions.cookie?.secure === 'boolean' ? upSessions.cookie?.secure : isProduction;
|
|
304
|
+
const cookieOptions = {
|
|
305
|
+
httpOnly: true,
|
|
306
|
+
secure: isSecure,
|
|
307
|
+
sameSite: upSessions.cookie?.sameSite ?? 'lax',
|
|
308
|
+
path: upSessions.cookie?.path ?? '/',
|
|
309
|
+
domain: upSessions.cookie?.domain,
|
|
310
|
+
overwrite: true
|
|
311
|
+
};
|
|
312
|
+
ctx.cookies.set(cookieName, rotation.token, cookieOptions);
|
|
313
|
+
return ctx.send({
|
|
314
|
+
jwt: result.token
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
return ctx.send({
|
|
318
|
+
jwt: result.token,
|
|
319
|
+
refreshToken: rotation.token
|
|
320
|
+
});
|
|
321
|
+
},
|
|
322
|
+
async logout (ctx) {
|
|
323
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
324
|
+
if (mode !== 'refresh') {
|
|
325
|
+
return ctx.notFound();
|
|
326
|
+
}
|
|
327
|
+
// Invalidate all sessions for the authenticated user, or by deviceId if provided
|
|
328
|
+
if (!ctx.state.user) {
|
|
329
|
+
return ctx.unauthorized('Missing authentication');
|
|
330
|
+
}
|
|
331
|
+
const deviceId = extractDeviceId(ctx.request.body);
|
|
332
|
+
try {
|
|
333
|
+
await strapi1.sessionManager('users-permissions').invalidateRefreshToken(String(ctx.state.user.id), deviceId);
|
|
334
|
+
} catch (err) {
|
|
335
|
+
strapi1.log.error('UP logout failed', err);
|
|
336
|
+
}
|
|
337
|
+
const upSessions = strapi1.config.get('plugin::users-permissions.sessions');
|
|
338
|
+
const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';
|
|
339
|
+
if (upSessions?.httpOnly || requestHttpOnly) {
|
|
340
|
+
const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';
|
|
341
|
+
ctx.cookies.set(cookieName, '', {
|
|
342
|
+
expires: new Date(0)
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
return ctx.send({
|
|
346
|
+
ok: true
|
|
347
|
+
});
|
|
348
|
+
},
|
|
164
349
|
async connect (ctx, next) {
|
|
165
350
|
const grant = require$$6.koa();
|
|
166
351
|
const providers = await strapi1.store({
|
|
@@ -354,6 +539,22 @@ function requireAuth() {
|
|
|
354
539
|
user: sanitizedUser
|
|
355
540
|
});
|
|
356
541
|
}
|
|
542
|
+
const mode = strapi1.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');
|
|
543
|
+
if (mode === 'refresh') {
|
|
544
|
+
const deviceId = extractDeviceId(ctx.request.body) || crypto.randomUUID();
|
|
545
|
+
const refresh = await strapi1.sessionManager('users-permissions').generateRefreshToken(String(user.id), deviceId, {
|
|
546
|
+
type: 'refresh'
|
|
547
|
+
});
|
|
548
|
+
const access = await strapi1.sessionManager('users-permissions').generateAccessToken(refresh.token);
|
|
549
|
+
if ('error' in access) {
|
|
550
|
+
throw new ApplicationError('Invalid credentials');
|
|
551
|
+
}
|
|
552
|
+
return ctx.send({
|
|
553
|
+
jwt: access.token,
|
|
554
|
+
refreshToken: refresh.token,
|
|
555
|
+
user: sanitizedUser
|
|
556
|
+
});
|
|
557
|
+
}
|
|
357
558
|
const jwt = getService('jwt').issue(_.pick(user, [
|
|
358
559
|
'id'
|
|
359
560
|
]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.mjs","sources":["../../../server/controllers/auth.js"],"sourcesContent":["'use strict';\n\n/**\n * Auth.js controller\n *\n * @description: A set of functions called \"actions\" for managing `Auth`.\n */\n\n/* eslint-disable no-useless-escape */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst { concat, compact, isArray } = require('lodash/fp');\nconst utils = require('@strapi/utils');\nconst { getService } = require('../utils');\nconst {\n validateCallbackBody,\n validateRegisterBody,\n validateSendEmailConfirmationBody,\n validateForgotPasswordBody,\n validateResetPasswordBody,\n validateEmailConfirmationBody,\n validateChangePasswordBody,\n} = require('./validation/auth');\n\nconst { ApplicationError, ValidationError, ForbiddenError } = utils.errors;\n\nconst sanitizeUser = (user, ctx) => {\n const { auth } = ctx.state;\n const userSchema = strapi.getModel('plugin::users-permissions.user');\n\n return strapi.contentAPI.sanitize.output(user, userSchema, { auth });\n};\n\nmodule.exports = ({ strapi }) => ({\n async callback(ctx) {\n const provider = ctx.params.provider || 'local';\n const params = ctx.request.body;\n\n const store = strapi.store({ type: 'plugin', name: 'users-permissions' });\n const grantSettings = await store.get({ key: 'grant' });\n\n const grantProvider = provider === 'local' ? 'email' : provider;\n\n if (!_.get(grantSettings, [grantProvider, 'enabled'])) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (provider === 'local') {\n await validateCallbackBody(params);\n\n const { identifier } = params;\n\n // Check if the user exists.\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: {\n provider,\n $or: [{ email: identifier.toLowerCase() }, { username: identifier }],\n },\n });\n\n if (!user) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n if (!user.password) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const validPassword = await getService('user').validatePassword(\n params.password,\n user.password\n );\n\n if (!validPassword) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const advancedSettings = await store.get({ key: 'advanced' });\n const requiresConfirmation = _.get(advancedSettings, 'email_confirmation');\n\n if (requiresConfirmation && user.confirmed !== true) {\n throw new ApplicationError('Your account email is not confirmed');\n }\n\n if (user.blocked === true) {\n throw new ApplicationError('Your account has been blocked by an administrator');\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n }\n\n // Connect the user with the third-party provider.\n try {\n const user = await getService('providers').connect(provider, ctx.query);\n\n if (user.blocked) {\n throw new ForbiddenError('Your account has been blocked by an administrator');\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n\n async changePassword(ctx) {\n if (!ctx.state.user) {\n throw new ApplicationError('You must be authenticated to reset your password');\n }\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { currentPassword, password } = await validateChangePasswordBody(\n ctx.request.body,\n validations\n );\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { id: ctx.state.user.id } });\n\n const validPassword = await getService('user').validatePassword(currentPassword, user.password);\n\n if (!validPassword) {\n throw new ValidationError('The provided current password is invalid');\n }\n\n if (currentPassword === password) {\n throw new ValidationError('Your new password must be different than your current password');\n }\n\n await getService('user').edit(user.id, { password });\n\n ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n\n async resetPassword(ctx) {\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { password, passwordConfirmation, code } = await validateResetPasswordBody(\n ctx.request.body,\n validations\n );\n\n if (password !== passwordConfirmation) {\n throw new ValidationError('Passwords do not match');\n }\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { resetPasswordToken: code } });\n\n if (!user) {\n throw new ValidationError('Incorrect code provided');\n }\n\n await getService('user').edit(user.id, {\n resetPasswordToken: null,\n password,\n });\n\n // Update the user.\n ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n\n async connect(ctx, next) {\n const grant = require('grant').koa();\n\n const providers = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })\n .get();\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n const grantConfig = {\n defaults: {\n prefix: `${apiPrefix}/connect`,\n },\n ...providers,\n };\n\n const [requestPath] = ctx.request.url.split('?');\n const provider = requestPath.split('/connect/')[1].split('/')[0];\n\n if (!_.get(grantConfig[provider], 'enabled')) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (!strapi.config.server.url.startsWith('http')) {\n strapi.log.warn(\n 'You are using a third party provider for login. Make sure to set an absolute url in config/server.js. More info here: https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#setting-up-the-server-url'\n );\n }\n\n // Ability to pass OAuth callback dynamically\n const queryCustomCallback = _.get(ctx, 'query.callback');\n const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');\n\n const customCallback = queryCustomCallback ?? dynamicSessionCallback;\n\n // The custom callback is validated to make sure it's not redirecting to an unwanted actor.\n if (customCallback !== undefined) {\n try {\n // We're extracting the callback validator from the plugin config since it can be user-customized\n const { validate: validateCallback } = strapi\n .plugin('users-permissions')\n .config('callback');\n\n await validateCallback(customCallback, grantConfig[provider]);\n\n grantConfig[provider].callback = customCallback;\n } catch (e) {\n throw new ValidationError('Invalid callback URL provided', { callback: customCallback });\n }\n }\n\n // Build a valid redirect URI for the current provider\n grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);\n\n return grant(grantConfig)(ctx, next);\n },\n\n async forgotPassword(ctx) {\n const { email } = await validateForgotPasswordBody(ctx.request.body);\n\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const emailSettings = await pluginStore.get({ key: 'email' });\n const advancedSettings = await pluginStore.get({ key: 'advanced' });\n\n // Find the user by email.\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (!user || user.blocked) {\n return ctx.send({ ok: true });\n }\n\n // Generate random token.\n const userInfo = await sanitizeUser(user, ctx);\n\n const resetPasswordToken = crypto.randomBytes(64).toString('hex');\n\n const resetPasswordSettings = _.get(emailSettings, 'reset_password.options', {});\n const emailBody = await getService('users-permissions').template(\n resetPasswordSettings.message,\n {\n URL: advancedSettings.email_reset_password,\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: userInfo,\n TOKEN: resetPasswordToken,\n }\n );\n\n const emailObject = await getService('users-permissions').template(\n resetPasswordSettings.object,\n {\n USER: userInfo,\n }\n );\n\n const emailToSend = {\n to: user.email,\n from:\n resetPasswordSettings.from.email || resetPasswordSettings.from.name\n ? `${resetPasswordSettings.from.name} <${resetPasswordSettings.from.email}>`\n : undefined,\n replyTo: resetPasswordSettings.response_email,\n subject: emailObject,\n text: emailBody,\n html: emailBody,\n };\n\n // NOTE: Update the user before sending the email so an Admin can generate the link if the email fails\n await getService('user').edit(user.id, { resetPasswordToken });\n\n // Send an email to the user.\n await strapi.plugin('email').service('email').send(emailToSend);\n\n ctx.send({ ok: true });\n },\n\n async register(ctx) {\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const settings = await pluginStore.get({ key: 'advanced' });\n\n if (!settings.allow_register) {\n throw new ApplicationError('Register action is currently disabled');\n }\n\n const { register } = strapi.config.get('plugin::users-permissions');\n const alwaysAllowedKeys = ['username', 'password', 'email'];\n\n // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration\n const allowedKeys = compact(\n concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : [])\n );\n\n // Check if there are any keys in requestBody that are not in allowedKeys\n const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));\n\n if (invalidKeys.length > 0) {\n // If there are invalid keys, throw an error\n throw new ValidationError(`Invalid parameters: ${invalidKeys.join(', ')}`);\n }\n\n const params = {\n ..._.pick(ctx.request.body, allowedKeys),\n provider: 'local',\n };\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n await validateRegisterBody(params, validations);\n\n const role = await strapi.db\n .query('plugin::users-permissions.role')\n .findOne({ where: { type: settings.default_role } });\n\n if (!role) {\n throw new ApplicationError('Impossible to find the default role');\n }\n\n const { email, username, provider } = params;\n\n const identifierFilter = {\n $or: [\n { email: email.toLowerCase() },\n { username: email.toLowerCase() },\n { username },\n { email: username },\n ],\n };\n\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter, provider },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n\n if (settings.unique_email) {\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n }\n\n const newUser = {\n ...params,\n role: role.id,\n email: email.toLowerCase(),\n username,\n confirmed: !settings.email_confirmation,\n };\n\n const user = await getService('user').add(newUser);\n\n const sanitizedUser = await sanitizeUser(user, ctx);\n\n if (settings.email_confirmation) {\n try {\n await getService('user').sendConfirmationEmail(sanitizedUser);\n } catch (err) {\n strapi.log.error(err);\n throw new ApplicationError('Error sending confirmation email');\n }\n\n return ctx.send({ user: sanitizedUser });\n }\n\n const jwt = getService('jwt').issue(_.pick(user, ['id']));\n\n return ctx.send({\n jwt,\n user: sanitizedUser,\n });\n },\n\n async emailConfirmation(ctx, next, returnUser) {\n const { confirmation: confirmationToken } = await validateEmailConfirmationBody(ctx.query);\n\n const userService = getService('user');\n const jwtService = getService('jwt');\n\n const [user] = await userService.fetchAll({ filters: { confirmationToken } });\n\n if (!user) {\n throw new ValidationError('Invalid token');\n }\n\n await userService.edit(user.id, { confirmed: true, confirmationToken: null });\n\n if (returnUser) {\n ctx.send({\n jwt: jwtService.issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } else {\n const settings = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n ctx.redirect(settings.email_confirmation_redirection || '/');\n }\n },\n\n async sendEmailConfirmation(ctx) {\n const { email } = await validateSendEmailConfirmationBody(ctx.request.body);\n\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: { email: email.toLowerCase() },\n });\n\n if (!user) {\n return ctx.send({ email, sent: true });\n }\n\n if (user.confirmed) {\n throw new ApplicationError('Already confirmed');\n }\n\n if (user.blocked) {\n throw new ApplicationError('User blocked');\n }\n\n await getService('user').sendConfirmationEmail(user);\n\n ctx.send({\n email: user.email,\n sent: true,\n });\n },\n});\n"],"names":["crypto","require$$0","_","require$$1","concat","compact","isArray","require$$2","utils","require$$3","getService","require$$4","validateCallbackBody","validateRegisterBody","validateSendEmailConfirmationBody","validateForgotPasswordBody","validateResetPasswordBody","validateEmailConfirmationBody","validateChangePasswordBody","require$$5","ApplicationError","ValidationError","ForbiddenError","errors","sanitizeUser","user","ctx","auth","state","userSchema","strapi","getModel","contentAPI","sanitize","output","callback","provider","params","request","body","store","type","name","grantSettings","get","key","grantProvider","identifier","db","query","findOne","where","$or","email","toLowerCase","username","password","validPassword","validatePassword","advancedSettings","requiresConfirmation","confirmed","blocked","send","jwt","issue","id","connect","error","message","changePassword","validations","config","currentPassword","edit","resetPassword","passwordConfirmation","code","resetPasswordToken","next","grant","require$$6","koa","providers","apiPrefix","grantConfig","defaults","prefix","requestPath","url","split","server","startsWith","log","warn","queryCustomCallback","dynamicSessionCallback","customCallback","undefined","validate","validateCallback","plugin","e","redirect_uri","buildRedirectUri","forgotPassword","pluginStore","emailSettings","ok","userInfo","randomBytes","toString","resetPasswordSettings","emailBody","template","URL","email_reset_password","SERVER_URL","ADMIN_URL","USER","TOKEN","emailObject","object","emailToSend","to","from","replyTo","response_email","subject","text","html","service","register","settings","allow_register","alwaysAllowedKeys","allowedKeys","allowedFields","invalidKeys","Object","keys","filter","includes","length","join","pick","role","default_role","identifierFilter","conflictingUserCount","count","unique_email","newUser","email_confirmation","add","sanitizedUser","sendConfirmationEmail","err","emailConfirmation","returnUser","confirmation","confirmationToken","userService","jwtService","fetchAll","filters","redirect","email_confirmation_redirection","sendEmailConfirmation","sent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.mjs","sources":["../../../server/controllers/auth.js"],"sourcesContent":["'use strict';\n\n/**\n * Auth.js controller\n *\n * @description: A set of functions called \"actions\" for managing `Auth`.\n */\n\n/* eslint-disable no-useless-escape */\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst { concat, compact, isArray } = require('lodash/fp');\nconst utils = require('@strapi/utils');\nconst { getService } = require('../utils');\nconst {\n validateCallbackBody,\n validateRegisterBody,\n validateSendEmailConfirmationBody,\n validateForgotPasswordBody,\n validateResetPasswordBody,\n validateEmailConfirmationBody,\n validateChangePasswordBody,\n} = require('./validation/auth');\n\nconst { ApplicationError, ValidationError, ForbiddenError } = utils.errors;\n\nconst sanitizeUser = (user, ctx) => {\n const { auth } = ctx.state;\n const userSchema = strapi.getModel('plugin::users-permissions.user');\n\n return strapi.contentAPI.sanitize.output(user, userSchema, { auth });\n};\n\nconst extractDeviceId = (requestBody) => {\n const { deviceId } = requestBody || {};\n\n return typeof deviceId === 'string' && deviceId.length > 0 ? deviceId : undefined;\n};\n\nmodule.exports = ({ strapi }) => ({\n async callback(ctx) {\n const provider = ctx.params.provider || 'local';\n const params = ctx.request.body;\n\n const store = strapi.store({ type: 'plugin', name: 'users-permissions' });\n const grantSettings = await store.get({ key: 'grant' });\n\n const grantProvider = provider === 'local' ? 'email' : provider;\n\n if (!_.get(grantSettings, [grantProvider, 'enabled'])) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (provider === 'local') {\n await validateCallbackBody(params);\n\n const { identifier } = params;\n\n // Check if the user exists.\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: {\n provider,\n $or: [{ email: identifier.toLowerCase() }, { username: identifier }],\n },\n });\n\n if (!user) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n if (!user.password) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const validPassword = await getService('user').validatePassword(\n params.password,\n user.password\n );\n\n if (!validPassword) {\n throw new ValidationError('Invalid identifier or password');\n }\n\n const advancedSettings = await store.get({ key: 'advanced' });\n const requiresConfirmation = _.get(advancedSettings, 'email_confirmation');\n\n if (requiresConfirmation && user.confirmed !== true) {\n throw new ApplicationError('Your account email is not confirmed');\n }\n\n if (user.blocked === true) {\n throw new ApplicationError('Your account has been blocked by an administrator');\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body);\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n const isProduction = process.env.NODE_ENV === 'production';\n const isSecure =\n typeof upSessions.cookie?.secure === 'boolean'\n ? upSessions.cookie?.secure\n : isProduction;\n\n const cookieOptions = {\n httpOnly: true,\n secure: isSecure,\n sameSite: upSessions.cookie?.sameSite ?? 'lax',\n path: upSessions.cookie?.path ?? '/',\n domain: upSessions.cookie?.domain,\n overwrite: true,\n };\n\n ctx.cookies.set(cookieName, refresh.token, cookieOptions);\n return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n }\n\n // Connect the user with the third-party provider.\n try {\n const user = await getService('providers').connect(provider, ctx.query);\n\n if (user.blocked) {\n throw new ForbiddenError('Your account has been blocked by an administrator');\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body);\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n const isProduction = process.env.NODE_ENV === 'production';\n const isSecure =\n typeof upSessions.cookie?.secure === 'boolean'\n ? upSessions.cookie?.secure\n : isProduction;\n\n const cookieOptions = {\n httpOnly: true,\n secure: isSecure,\n sameSite: upSessions.cookie?.sameSite ?? 'lax',\n path: upSessions.cookie?.path ?? '/',\n domain: upSessions.cookie?.domain,\n overwrite: true,\n };\n ctx.cookies.set(cookieName, refresh.token, cookieOptions);\n return ctx.send({ jwt: access.token, user: await sanitizeUser(user, ctx) });\n }\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n\n async changePassword(ctx) {\n if (!ctx.state.user) {\n throw new ApplicationError('You must be authenticated to reset your password');\n }\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { currentPassword, password } = await validateChangePasswordBody(\n ctx.request.body,\n validations\n );\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { id: ctx.state.user.id } });\n\n const validPassword = await getService('user').validatePassword(currentPassword, user.password);\n\n if (!validPassword) {\n throw new ValidationError('The provided current password is invalid');\n }\n\n if (currentPassword === password) {\n throw new ValidationError('Your new password must be different than your current password');\n }\n\n await getService('user').edit(user.id, { password });\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body);\n\n if (deviceId) {\n // Invalidate sessions: specific device if deviceId provided\n await strapi\n .sessionManager('users-permissions')\n .invalidateRefreshToken(String(user.id), deviceId);\n }\n\n const newDeviceId = deviceId || crypto.randomUUID();\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n\n async resetPassword(ctx) {\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n const { password, passwordConfirmation, code } = await validateResetPasswordBody(\n ctx.request.body,\n validations\n );\n\n if (password !== passwordConfirmation) {\n throw new ValidationError('Passwords do not match');\n }\n\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { resetPasswordToken: code } });\n\n if (!user) {\n throw new ValidationError('Incorrect code provided');\n }\n\n await getService('user').edit(user.id, {\n resetPasswordToken: null,\n password,\n });\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body);\n\n if (deviceId) {\n // Invalidate sessions: specific device if deviceId provided\n await strapi\n .sessionManager('users-permissions')\n .invalidateRefreshToken(String(user.id), deviceId);\n }\n\n const newDeviceId = deviceId || crypto.randomUUID();\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), newDeviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({\n jwt: access.token,\n refreshToken: refresh.token,\n user: await sanitizeUser(user, ctx),\n });\n }\n\n return ctx.send({\n jwt: getService('jwt').issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n },\n async refresh(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n const { refreshToken } = ctx.request.body || {};\n if (!refreshToken || typeof refreshToken !== 'string') {\n return ctx.badRequest('Missing refresh token');\n }\n\n const rotation = await strapi\n .sessionManager('users-permissions')\n .rotateRefreshToken(refreshToken);\n if ('error' in rotation) {\n return ctx.unauthorized('Invalid refresh token');\n }\n\n const result = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(rotation.token);\n if ('error' in result) {\n return ctx.unauthorized('Invalid refresh token');\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n const isProduction = process.env.NODE_ENV === 'production';\n const isSecure =\n typeof upSessions.cookie?.secure === 'boolean' ? upSessions.cookie?.secure : isProduction;\n\n const cookieOptions = {\n httpOnly: true,\n secure: isSecure,\n sameSite: upSessions.cookie?.sameSite ?? 'lax',\n path: upSessions.cookie?.path ?? '/',\n domain: upSessions.cookie?.domain,\n overwrite: true,\n };\n ctx.cookies.set(cookieName, rotation.token, cookieOptions);\n return ctx.send({ jwt: result.token });\n }\n return ctx.send({ jwt: result.token, refreshToken: rotation.token });\n },\n async logout(ctx) {\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode !== 'refresh') {\n return ctx.notFound();\n }\n\n // Invalidate all sessions for the authenticated user, or by deviceId if provided\n if (!ctx.state.user) {\n return ctx.unauthorized('Missing authentication');\n }\n\n const deviceId = extractDeviceId(ctx.request.body);\n try {\n await strapi\n .sessionManager('users-permissions')\n .invalidateRefreshToken(String(ctx.state.user.id), deviceId);\n } catch (err) {\n strapi.log.error('UP logout failed', err);\n }\n\n const upSessions = strapi.config.get('plugin::users-permissions.sessions');\n const requestHttpOnly = ctx.request.header['x-strapi-refresh-cookie'] === 'httpOnly';\n if (upSessions?.httpOnly || requestHttpOnly) {\n const cookieName = upSessions.cookie?.name || 'strapi_up_refresh';\n ctx.cookies.set(cookieName, '', { expires: new Date(0) });\n }\n return ctx.send({ ok: true });\n },\n async connect(ctx, next) {\n const grant = require('grant').koa();\n\n const providers = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'grant' })\n .get();\n\n const apiPrefix = strapi.config.get('api.rest.prefix');\n const grantConfig = {\n defaults: {\n prefix: `${apiPrefix}/connect`,\n },\n ...providers,\n };\n\n const [requestPath] = ctx.request.url.split('?');\n const provider = requestPath.split('/connect/')[1].split('/')[0];\n\n if (!_.get(grantConfig[provider], 'enabled')) {\n throw new ApplicationError('This provider is disabled');\n }\n\n if (!strapi.config.server.url.startsWith('http')) {\n strapi.log.warn(\n 'You are using a third party provider for login. Make sure to set an absolute url in config/server.js. More info here: https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#setting-up-the-server-url'\n );\n }\n\n // Ability to pass OAuth callback dynamically\n const queryCustomCallback = _.get(ctx, 'query.callback');\n const dynamicSessionCallback = _.get(ctx, 'session.grant.dynamic.callback');\n\n const customCallback = queryCustomCallback ?? dynamicSessionCallback;\n\n // The custom callback is validated to make sure it's not redirecting to an unwanted actor.\n if (customCallback !== undefined) {\n try {\n // We're extracting the callback validator from the plugin config since it can be user-customized\n const { validate: validateCallback } = strapi\n .plugin('users-permissions')\n .config('callback');\n\n await validateCallback(customCallback, grantConfig[provider]);\n\n grantConfig[provider].callback = customCallback;\n } catch (e) {\n throw new ValidationError('Invalid callback URL provided', { callback: customCallback });\n }\n }\n\n // Build a valid redirect URI for the current provider\n grantConfig[provider].redirect_uri = getService('providers').buildRedirectUri(provider);\n\n return grant(grantConfig)(ctx, next);\n },\n\n async forgotPassword(ctx) {\n const { email } = await validateForgotPasswordBody(ctx.request.body);\n\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const emailSettings = await pluginStore.get({ key: 'email' });\n const advancedSettings = await pluginStore.get({ key: 'advanced' });\n\n // Find the user by email.\n const user = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (!user || user.blocked) {\n return ctx.send({ ok: true });\n }\n\n // Generate random token.\n const userInfo = await sanitizeUser(user, ctx);\n\n const resetPasswordToken = crypto.randomBytes(64).toString('hex');\n\n const resetPasswordSettings = _.get(emailSettings, 'reset_password.options', {});\n const emailBody = await getService('users-permissions').template(\n resetPasswordSettings.message,\n {\n URL: advancedSettings.email_reset_password,\n SERVER_URL: strapi.config.get('server.absoluteUrl'),\n ADMIN_URL: strapi.config.get('admin.absoluteUrl'),\n USER: userInfo,\n TOKEN: resetPasswordToken,\n }\n );\n\n const emailObject = await getService('users-permissions').template(\n resetPasswordSettings.object,\n {\n USER: userInfo,\n }\n );\n\n const emailToSend = {\n to: user.email,\n from:\n resetPasswordSettings.from.email || resetPasswordSettings.from.name\n ? `${resetPasswordSettings.from.name} <${resetPasswordSettings.from.email}>`\n : undefined,\n replyTo: resetPasswordSettings.response_email,\n subject: emailObject,\n text: emailBody,\n html: emailBody,\n };\n\n // NOTE: Update the user before sending the email so an Admin can generate the link if the email fails\n await getService('user').edit(user.id, { resetPasswordToken });\n\n // Send an email to the user.\n await strapi.plugin('email').service('email').send(emailToSend);\n\n ctx.send({ ok: true });\n },\n\n async register(ctx) {\n const pluginStore = await strapi.store({ type: 'plugin', name: 'users-permissions' });\n\n const settings = await pluginStore.get({ key: 'advanced' });\n\n if (!settings.allow_register) {\n throw new ApplicationError('Register action is currently disabled');\n }\n\n const { register } = strapi.config.get('plugin::users-permissions');\n const alwaysAllowedKeys = ['username', 'password', 'email'];\n\n // Note that we intentionally do not filter allowedFields to allow a project to explicitly accept private or other Strapi field on registration\n const allowedKeys = compact(\n concat(alwaysAllowedKeys, isArray(register?.allowedFields) ? register.allowedFields : [])\n );\n\n // Check if there are any keys in requestBody that are not in allowedKeys\n const invalidKeys = Object.keys(ctx.request.body).filter((key) => !allowedKeys.includes(key));\n\n if (invalidKeys.length > 0) {\n // If there are invalid keys, throw an error\n throw new ValidationError(`Invalid parameters: ${invalidKeys.join(', ')}`);\n }\n\n const params = {\n ..._.pick(ctx.request.body, allowedKeys),\n provider: 'local',\n };\n\n const validations = strapi.config.get('plugin::users-permissions.validationRules');\n\n await validateRegisterBody(params, validations);\n\n const role = await strapi.db\n .query('plugin::users-permissions.role')\n .findOne({ where: { type: settings.default_role } });\n\n if (!role) {\n throw new ApplicationError('Impossible to find the default role');\n }\n\n const { email, username, provider } = params;\n\n const identifierFilter = {\n $or: [\n { email: email.toLowerCase() },\n { username: email.toLowerCase() },\n { username },\n { email: username },\n ],\n };\n\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter, provider },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n\n if (settings.unique_email) {\n const conflictingUserCount = await strapi.db.query('plugin::users-permissions.user').count({\n where: { ...identifierFilter },\n });\n\n if (conflictingUserCount > 0) {\n throw new ApplicationError('Email or Username are already taken');\n }\n }\n\n const newUser = {\n ...params,\n role: role.id,\n email: email.toLowerCase(),\n username,\n confirmed: !settings.email_confirmation,\n };\n\n const user = await getService('user').add(newUser);\n\n const sanitizedUser = await sanitizeUser(user, ctx);\n\n if (settings.email_confirmation) {\n try {\n await getService('user').sendConfirmationEmail(sanitizedUser);\n } catch (err) {\n strapi.log.error(err);\n throw new ApplicationError('Error sending confirmation email');\n }\n\n return ctx.send({ user: sanitizedUser });\n }\n\n const mode = strapi.config.get('plugin::users-permissions.jwtManagement', 'legacy-support');\n if (mode === 'refresh') {\n const deviceId = extractDeviceId(ctx.request.body) || crypto.randomUUID();\n\n const refresh = await strapi\n .sessionManager('users-permissions')\n .generateRefreshToken(String(user.id), deviceId, { type: 'refresh' });\n\n const access = await strapi\n .sessionManager('users-permissions')\n .generateAccessToken(refresh.token);\n if ('error' in access) {\n throw new ApplicationError('Invalid credentials');\n }\n\n return ctx.send({ jwt: access.token, refreshToken: refresh.token, user: sanitizedUser });\n }\n\n const jwt = getService('jwt').issue(_.pick(user, ['id']));\n return ctx.send({ jwt, user: sanitizedUser });\n },\n\n async emailConfirmation(ctx, next, returnUser) {\n const { confirmation: confirmationToken } = await validateEmailConfirmationBody(ctx.query);\n\n const userService = getService('user');\n const jwtService = getService('jwt');\n\n const [user] = await userService.fetchAll({ filters: { confirmationToken } });\n\n if (!user) {\n throw new ValidationError('Invalid token');\n }\n\n await userService.edit(user.id, { confirmed: true, confirmationToken: null });\n\n if (returnUser) {\n ctx.send({\n jwt: jwtService.issue({ id: user.id }),\n user: await sanitizeUser(user, ctx),\n });\n } else {\n const settings = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n ctx.redirect(settings.email_confirmation_redirection || '/');\n }\n },\n\n async sendEmailConfirmation(ctx) {\n const { email } = await validateSendEmailConfirmationBody(ctx.request.body);\n\n const user = await strapi.db.query('plugin::users-permissions.user').findOne({\n where: { email: email.toLowerCase() },\n });\n\n if (!user) {\n return ctx.send({ email, sent: true });\n }\n\n if (user.confirmed) {\n throw new ApplicationError('Already confirmed');\n }\n\n if (user.blocked) {\n throw new ApplicationError('User blocked');\n }\n\n await getService('user').sendConfirmationEmail(user);\n\n ctx.send({\n email: user.email,\n sent: true,\n });\n },\n});\n"],"names":["crypto","require$$0","_","require$$1","concat","compact","isArray","require$$2","utils","require$$3","getService","require$$4","validateCallbackBody","validateRegisterBody","validateSendEmailConfirmationBody","validateForgotPasswordBody","validateResetPasswordBody","validateEmailConfirmationBody","validateChangePasswordBody","require$$5","ApplicationError","ValidationError","ForbiddenError","errors","sanitizeUser","user","ctx","auth","state","userSchema","strapi","getModel","contentAPI","sanitize","output","extractDeviceId","requestBody","deviceId","length","undefined","callback","provider","params","request","body","store","type","name","grantSettings","get","key","grantProvider","identifier","db","query","findOne","where","$or","email","toLowerCase","username","password","validPassword","validatePassword","advancedSettings","requiresConfirmation","confirmed","blocked","mode","config","refresh","sessionManager","generateRefreshToken","String","id","access","generateAccessToken","token","upSessions","requestHttpOnly","header","httpOnly","cookieName","cookie","isProduction","process","env","NODE_ENV","isSecure","secure","cookieOptions","sameSite","path","domain","overwrite","cookies","set","send","jwt","refreshToken","issue","connect","error","message","changePassword","validations","currentPassword","edit","invalidateRefreshToken","newDeviceId","randomUUID","resetPassword","passwordConfirmation","code","resetPasswordToken","notFound","badRequest","rotation","rotateRefreshToken","unauthorized","result","logout","err","log","expires","Date","ok","next","grant","require$$6","koa","providers","apiPrefix","grantConfig","defaults","prefix","requestPath","url","split","server","startsWith","warn","queryCustomCallback","dynamicSessionCallback","customCallback","validate","validateCallback","plugin","e","redirect_uri","buildRedirectUri","forgotPassword","pluginStore","emailSettings","userInfo","randomBytes","toString","resetPasswordSettings","emailBody","template","URL","email_reset_password","SERVER_URL","ADMIN_URL","USER","TOKEN","emailObject","object","emailToSend","to","from","replyTo","response_email","subject","text","html","service","register","settings","allow_register","alwaysAllowedKeys","allowedKeys","allowedFields","invalidKeys","Object","keys","filter","includes","join","pick","role","default_role","identifierFilter","conflictingUserCount","count","unique_email","newUser","email_confirmation","add","sanitizedUser","sendConfirmationEmail","emailConfirmation","returnUser","confirmation","confirmationToken","userService","jwtService","fetchAll","filters","redirect","email_confirmation_redirection","sendEmailConfirmation","sent"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-manager-user.js","sources":["../../../server/controllers/content-manager-user.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { contentTypes: contentTypesUtils } = require('@strapi/utils');\nconst { ApplicationError, NotFoundError, ForbiddenError } = require('@strapi/utils').errors;\nconst { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\n\nconst userModel = 'plugin::users-permissions.user';\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n edit: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n};\n\nconst findEntityAndCheckPermissions = async (ability, action, model, id) => {\n const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {\n populate: [`${CREATED_BY_ATTRIBUTE}.roles`],\n });\n\n if (_.isNil(doc)) {\n throw new NotFoundError();\n }\n\n const pm = strapi\n .service('admin::permission')\n .createPermissionsManager({ ability, action, model });\n\n if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {\n throw new ForbiddenError();\n }\n\n const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);\n\n return { pm, doc: docWithoutCreatorRoles };\n};\n\nmodule.exports = {\n /**\n * Create a/an user record.\n * @return {Object}\n */\n async create(ctx) {\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const { email, username } = body;\n\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: userModel,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const sanitizedBody = await pm.pickPermittedFieldsOf(body, { subject: userModel });\n\n const advanced = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n await validateCreateUserBody(ctx.request.body);\n\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername) {\n throw new ApplicationError('Username already taken');\n }\n\n if (advanced.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (userWithSameEmail) {\n throw new ApplicationError('Email already taken');\n }\n }\n\n const user = {\n ...sanitizedBody,\n provider: 'local',\n [CREATED_BY_ATTRIBUTE]: admin.id,\n [UPDATED_BY_ATTRIBUTE]: admin.id,\n };\n\n user.email = _.toLower(user.email);\n\n try {\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .create(userModel, { data: user });\n\n const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n\n ctx.created(sanitizedData);\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n /**\n * Update a/an user record.\n * @return {Object}\n */\n\n async update(ctx) {\n const { id: documentId } = ctx.params;\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const advancedConfigs = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n const { email, username, password } = body;\n\n const { pm, doc } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.edit,\n userModel,\n documentId\n );\n\n const user = doc;\n\n await validateUpdateUserBody(ctx.request.body);\n\n if (_.has(body, 'password') && (password == null || password === '')) {\n delete body.password;\n }\n\n if (_.has(body, 'username')) {\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {\n throw new ApplicationError('Username already taken');\n }\n }\n\n if (_.has(body, 'email') && advancedConfigs.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: _.toLower(email) } });\n\n if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {\n throw new ApplicationError('Email already taken');\n }\n\n body.email = _.toLower(body.email);\n }\n\n const sanitizedData = await pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });\n const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');\n\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .update(documentId, userModel, {\n data: updateData,\n });\n\n ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n },\n};\n"],"names":["_","require$$0","contentTypes","contentTypesUtils","require$$1","ApplicationError","NotFoundError","ForbiddenError","errors","validateCreateUserBody","validateUpdateUserBody","require$$2","UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","constants","userModel","ACTIONS","read","create","edit","delete","findEntityAndCheckPermissions","ability","action","model","id","doc","strapi","service","findOne","populate","isNil","pm","createPermissionsManager","cannot","toSubject","docWithoutCreatorRoles","omit","contentManagerUser","ctx","body","request","user","admin","userAbility","state","email","username","isAllowed","forbidden","sanitizedBody","pickPermittedFieldsOf","subject","advanced","store","type","name","key","get","userWithSameUsername","db","query","where","unique_email","userWithSameEmail","toLowerCase","provider","toLower","data","sanitizedData","sanitizeOutput","created","error","message","update","documentId","params","advancedConfigs","password","has","toString","updateData","updatedBy"],"mappings":";;;;;;;;;;;AAEA,IAAA,MAAMA,CAAIC,GAAAA,UAAAA;AACV,IAAA,MAAM,EAAEC,YAAAA,EAAcC,iBAAiB,EAAE,GAAGC,UAAAA;IAC5C,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAEC,cAAc,EAAE,GAAGH,UAAAA,CAAyBI,MAAM;AAC3F,IAAA,MAAM,EAAEC,sBAAsB,EAAEC,sBAAsB,EAAE,GAAGC,cAAAA,EAAAA;AAE3D,IAAA,MAAM,EAAEC,oBAAoB,EAAEC,oBAAoB,EAAE,GAAGV,kBAAkBW,SAAS;AAElF,IAAA,MAAMC,SAAY,GAAA,gCAAA;AAClB,IAAA,MAAMC,OAAU,GAAA;QACdC,IAAM,EAAA,uCAAA;QACNC,MAAQ,EAAA,yCAAA;QACRC,IAAM,EAAA,yCAAA;QACNC,MAAQ,EAAA;AACV,KAAA;AAEA,IAAA,MAAMC,6BAAgC,GAAA,OAAOC,OAASC,EAAAA,MAAAA,EAAQC,KAAOC,EAAAA,EAAAA,GAAAA;QACnE,MAAMC,GAAAA,GAAM,MAAMC,MAAOC,CAAAA,OAAO,CAAC,0CAA4CC,CAAAA,CAAAA,OAAO,CAACJ,EAAAA,EAAID,KAAO,EAAA;YAC9FM,QAAU,EAAA;gBAAC,CAAC,EAAEjB,oBAAqB,CAAA,MAAM;AAAE;AAC/C,SAAA,CAAA;QAEE,IAAIb,CAAAA,CAAE+B,KAAK,CAACL,GAAM,CAAA,EAAA;AAChB,YAAA,MAAM,IAAIpB,aAAAA,EAAAA;AACX;AAED,QAAA,MAAM0B,KAAKL,MACRC,CAAAA,OAAO,CAAC,mBAAA,CAAA,CACRK,wBAAwB,CAAC;AAAEX,YAAAA,OAAAA;AAASC,YAAAA,MAAAA;AAAQC,YAAAA;AAAO,SAAA,CAAA;QAEtD,IAAIQ,EAAAA,CAAGV,OAAO,CAACY,MAAM,CAACF,EAAGT,CAAAA,MAAM,EAAES,EAAAA,CAAGG,SAAS,CAACT,GAAO,CAAA,CAAA,EAAA;AACnD,YAAA,MAAM,IAAInB,cAAAA,EAAAA;AACX;QAED,MAAM6B,sBAAAA,GAAyBpC,EAAEqC,IAAI,CAACX,KAAK,CAAC,EAAEb,oBAAqB,CAAA,MAAM,CAAC,CAAA;QAE1E,OAAO;AAAEmB,YAAAA,EAAAA;YAAIN,GAAKU,EAAAA;;AACpB,KAAA;IAEAE,kBAAiB,GAAA;AACjB;;;OAIE,MAAMpB,QAAOqB,GAAG,EAAA;AACd,YAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,IAAIE,OAAO;YAC5B,MAAM,EAAEC,MAAMC,KAAK,EAAEC,WAAW,EAAE,GAAGL,IAAIM,KAAK;AAE9C,YAAA,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGP,IAAAA;AAE5B,YAAA,MAAMR,KAAKL,MAAOC,CAAAA,OAAO,CAAC,mBAAA,CAAA,CAAqBK,wBAAwB,CAAC;gBACtEX,OAASsB,EAAAA,WAAAA;AACTrB,gBAAAA,MAAAA,EAAQP,QAAQE,MAAM;gBACtBM,KAAOT,EAAAA;AACb,aAAA,CAAA;YAEI,IAAI,CAACiB,EAAGgB,CAAAA,SAAS,EAAE;AACjB,gBAAA,OAAOT,IAAIU,SAAS,EAAA;AACrB;AAED,YAAA,MAAMC,aAAgB,GAAA,MAAMlB,EAAGmB,CAAAA,qBAAqB,CAACX,IAAM,EAAA;gBAAEY,OAASrC,EAAAA;AAAS,aAAA,CAAA;AAE/E,YAAA,MAAMsC,QAAW,GAAA,MAAM1B,MACpB2B,CAAAA,KAAK,CAAC;gBAAEC,IAAM,EAAA,QAAA;gBAAUC,IAAM,EAAA,mBAAA;gBAAqBC,GAAK,EAAA;eACxDC,GAAG,EAAA;AAEN,YAAA,MAAMjD,sBAAuB8B,CAAAA,GAAAA,CAAIE,OAAO,CAACD,IAAI,CAAA;YAE7C,MAAMmB,oBAAAA,GAAuB,MAAMhC,MAAOiC,CAAAA,EAAE,CACzCC,KAAK,CAAC,gCACNhC,CAAAA,CAAAA,OAAO,CAAC;gBAAEiC,KAAO,EAAA;AAAEf,oBAAAA;AAAQ;AAAI,aAAA,CAAA;AAElC,YAAA,IAAIY,oBAAsB,EAAA;AACxB,gBAAA,MAAM,IAAItD,gBAAiB,CAAA,wBAAA,CAAA;AAC5B;YAED,IAAIgD,QAAAA,CAASU,YAAY,EAAE;gBACzB,MAAMC,iBAAAA,GAAoB,MAAMrC,MAAOiC,CAAAA,EAAE,CACtCC,KAAK,CAAC,gCACNhC,CAAAA,CAAAA,OAAO,CAAC;oBAAEiC,KAAO,EAAA;AAAEhB,wBAAAA,KAAAA,EAAOA,MAAMmB,WAAW;AAAI;AAAA,iBAAA,CAAA;AAElD,gBAAA,IAAID,iBAAmB,EAAA;AACrB,oBAAA,MAAM,IAAI3D,gBAAiB,CAAA,qBAAA,CAAA;AAC5B;AACF;AAED,YAAA,MAAMqC,IAAO,GAAA;AACX,gBAAA,GAAGQ,aAAa;gBAChBgB,QAAU,EAAA,OAAA;gBACV,CAACrD,oBAAAA,GAAuB8B,KAAAA,CAAMlB,EAAE;gBAChC,CAACb,oBAAAA,GAAuB+B,KAAAA,CAAMlB;AACpC,aAAA;AAEIiB,YAAAA,IAAAA,CAAKI,KAAK,GAAG9C,CAAAA,CAAEmE,OAAO,CAACzB,KAAKI,KAAK,CAAA;YAEjC,IAAI;gBACF,MAAMsB,IAAAA,GAAO,MAAMzC,MAChBC,CAAAA,OAAO,CAAC,0CACRV,CAAAA,CAAAA,MAAM,CAACH,SAAW,EAAA;oBAAEqD,IAAM1B,EAAAA;AAAM,iBAAA,CAAA;AAEnC,gBAAA,MAAM2B,aAAgB,GAAA,MAAMrC,EAAGsC,CAAAA,cAAc,CAACF,IAAM,EAAA;AAAE7C,oBAAAA,MAAAA,EAAQP,QAAQC;AAAI,iBAAA,CAAA;AAE1EsB,gBAAAA,GAAAA,CAAIgC,OAAO,CAACF,aAAAA,CAAAA;AACb,aAAA,CAAC,OAAOG,KAAO,EAAA;gBACd,MAAM,IAAInE,gBAAiBmE,CAAAA,KAAAA,CAAMC,OAAO,CAAA;AACzC;AACF,SAAA;AACH;;;OAKE,MAAMC,QAAOnC,GAAG,EAAA;AACd,YAAA,MAAM,EAAEd,EAAIkD,EAAAA,UAAU,EAAE,GAAGpC,IAAIqC,MAAM;AACrC,YAAA,MAAM,EAAEpC,IAAI,EAAE,GAAGD,IAAIE,OAAO;YAC5B,MAAM,EAAEC,MAAMC,KAAK,EAAEC,WAAW,EAAE,GAAGL,IAAIM,KAAK;AAE9C,YAAA,MAAMgC,eAAkB,GAAA,MAAMlD,MAC3B2B,CAAAA,KAAK,CAAC;gBAAEC,IAAM,EAAA,QAAA;gBAAUC,IAAM,EAAA,mBAAA;gBAAqBC,GAAK,EAAA;eACxDC,GAAG,EAAA;AAEN,YAAA,MAAM,EAAEZ,KAAK,EAAEC,QAAQ,EAAE+B,QAAQ,EAAE,GAAGtC,IAAAA;AAEtC,YAAA,MAAM,EAAER,EAAE,EAAEN,GAAG,EAAE,GAAG,MAAML,6BAAAA,CACxBuB,WACA5B,EAAAA,OAAAA,CAAQG,IAAI,EACZJ,SACA4D,EAAAA,UAAAA,CAAAA;AAGF,YAAA,MAAMjC,IAAOhB,GAAAA,GAAAA;AAEb,YAAA,MAAMhB,sBAAuB6B,CAAAA,GAAAA,CAAIE,OAAO,CAACD,IAAI,CAAA;YAE7C,IAAIxC,CAAAA,CAAE+E,GAAG,CAACvC,IAAM,EAAA,UAAA,CAAA,KAAgBsC,QAAY,IAAA,IAAA,IAAQA,QAAa,KAAA,EAAA,CAAK,EAAA;AACpE,gBAAA,OAAOtC,KAAKsC,QAAQ;AACrB;AAED,YAAA,IAAI9E,CAAE+E,CAAAA,GAAG,CAACvC,IAAAA,EAAM,UAAa,CAAA,EAAA;gBAC3B,MAAMmB,oBAAAA,GAAuB,MAAMhC,MAAOiC,CAAAA,EAAE,CACzCC,KAAK,CAAC,gCACNhC,CAAAA,CAAAA,OAAO,CAAC;oBAAEiC,KAAO,EAAA;AAAEf,wBAAAA;AAAQ;AAAI,iBAAA,CAAA;AAElC,gBAAA,IAAIY,oBAAwB3D,IAAAA,CAAAA,CAAEgF,QAAQ,CAACrB,oBAAqBlC,CAAAA,EAAE,CAAMzB,KAAAA,CAAAA,CAAEgF,QAAQ,CAACtC,IAAKjB,CAAAA,EAAE,CAAG,EAAA;AACvF,oBAAA,MAAM,IAAIpB,gBAAiB,CAAA,wBAAA,CAAA;AAC5B;AACF;AAED,YAAA,IAAIL,EAAE+E,GAAG,CAACvC,MAAM,OAAYqC,CAAAA,IAAAA,eAAAA,CAAgBd,YAAY,EAAE;gBACxD,MAAMC,iBAAAA,GAAoB,MAAMrC,MAAOiC,CAAAA,EAAE,CACtCC,KAAK,CAAC,gCACNhC,CAAAA,CAAAA,OAAO,CAAC;oBAAEiC,KAAO,EAAA;wBAAEhB,KAAO9C,EAAAA,CAAAA,CAAEmE,OAAO,CAACrB,KAAAA;AAAQ;AAAA,iBAAA,CAAA;AAE/C,gBAAA,IAAIkB,iBAAqBhE,IAAAA,CAAAA,CAAEgF,QAAQ,CAAChB,iBAAkBvC,CAAAA,EAAE,CAAMzB,KAAAA,CAAAA,CAAEgF,QAAQ,CAACtC,IAAKjB,CAAAA,EAAE,CAAG,EAAA;AACjF,oBAAA,MAAM,IAAIpB,gBAAiB,CAAA,qBAAA,CAAA;AAC5B;AAEDmC,gBAAAA,IAAAA,CAAKM,KAAK,GAAG9C,CAAAA,CAAEmE,OAAO,CAAC3B,KAAKM,KAAK,CAAA;AAClC;AAED,YAAA,MAAMuB,aAAgB,GAAA,MAAMrC,EAAGmB,CAAAA,qBAAqB,CAACX,IAAM,EAAA;gBAAEY,OAASpB,EAAAA,EAAAA,CAAGG,SAAS,CAACO,IAAAA;AAAO,aAAA,CAAA;YAC1F,MAAMuC,UAAAA,GAAajF,CAAEqC,CAAAA,IAAI,CAAC;AAAE,gBAAA,GAAGgC,aAAa;AAAEa,gBAAAA,SAAAA,EAAWvC,MAAMlB;aAAM,EAAA,WAAA,CAAA;YAErE,MAAM2C,IAAAA,GAAO,MAAMzC,MAChBC,CAAAA,OAAO,CAAC,0CACR8C,CAAAA,CAAAA,MAAM,CAACC,UAAAA,EAAY5D,SAAW,EAAA;gBAC7BqD,IAAMa,EAAAA;AACd,aAAA,CAAA;AAEI1C,YAAAA,GAAAA,CAAIC,IAAI,GAAG,MAAMR,EAAGsC,CAAAA,cAAc,CAACF,IAAM,EAAA;AAAE7C,gBAAAA,MAAAA,EAAQP,QAAQC;AAAI,aAAA,CAAA;AAChE;AACH,KAAA;;;;;;"}
|
|
1
|
+
{"version":3,"file":"content-manager-user.js","sources":["../../../server/controllers/content-manager-user.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { contentTypes: contentTypesUtils } = require('@strapi/utils');\nconst { ApplicationError, NotFoundError, ForbiddenError } = require('@strapi/utils').errors;\nconst { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\n\nconst userModel = 'plugin::users-permissions.user';\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n edit: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n};\n\nconst findEntityAndCheckPermissions = async (ability, action, model, id) => {\n const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {\n populate: [`${CREATED_BY_ATTRIBUTE}.roles`],\n });\n\n if (_.isNil(doc)) {\n throw new NotFoundError();\n }\n\n const pm = strapi\n .service('admin::permission')\n .createPermissionsManager({ ability, action, model });\n\n if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {\n throw new ForbiddenError();\n }\n\n const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);\n\n return { pm, doc: docWithoutCreatorRoles };\n};\n\nmodule.exports = {\n /**\n * Create a/an user record.\n * @return {Object}\n */\n async create(ctx) {\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const { email, username } = body;\n\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: userModel,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const sanitizedBody = await pm.pickPermittedFieldsOf(body, { subject: userModel });\n\n const advanced = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n await validateCreateUserBody(ctx.request.body);\n\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername) {\n throw new ApplicationError('Username already taken');\n }\n\n if (advanced.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (userWithSameEmail) {\n throw new ApplicationError('Email already taken');\n }\n }\n\n const user = {\n ...sanitizedBody,\n provider: 'local',\n [CREATED_BY_ATTRIBUTE]: admin.id,\n [UPDATED_BY_ATTRIBUTE]: admin.id,\n };\n\n user.email = _.toLower(user.email);\n\n try {\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .create(userModel, { data: user });\n\n const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n\n ctx.created(sanitizedData);\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n /**\n * Update a/an user record.\n * @return {Object}\n */\n\n async update(ctx) {\n const { id: documentId } = ctx.params;\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const advancedConfigs = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n const { email, username, password } = body;\n\n const { pm, doc } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.edit,\n userModel,\n documentId\n );\n\n const user = doc;\n\n await validateUpdateUserBody(ctx.request.body);\n\n if (_.has(body, 'password') && (password == null || password === '')) {\n delete body.password;\n }\n\n if (_.has(body, 'username')) {\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {\n throw new ApplicationError('Username already taken');\n }\n }\n\n if (_.has(body, 'email') && advancedConfigs.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: _.toLower(email) } });\n\n if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {\n throw new ApplicationError('Email already taken');\n }\n\n body.email = _.toLower(body.email);\n }\n\n const sanitizedData = await pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });\n const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');\n\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .update(documentId, userModel, {\n data: updateData,\n });\n\n ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n },\n};\n"],"names":["_","require$$0","contentTypes","contentTypesUtils","require$$1","ApplicationError","NotFoundError","ForbiddenError","errors","validateCreateUserBody","validateUpdateUserBody","require$$2","UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","constants","userModel","ACTIONS","read","create","edit","delete","findEntityAndCheckPermissions","ability","action","model","id","doc","strapi","service","findOne","populate","isNil","pm","createPermissionsManager","cannot","toSubject","docWithoutCreatorRoles","omit","contentManagerUser","ctx","body","request","user","admin","userAbility","state","email","username","isAllowed","forbidden","sanitizedBody","pickPermittedFieldsOf","subject","advanced","store","type","name","key","get","userWithSameUsername","db","query","where","unique_email","userWithSameEmail","toLowerCase","provider","toLower","data","sanitizedData","sanitizeOutput","created","error","message","update","documentId","params","advancedConfigs","password","has","toString","updateData","updatedBy"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-manager-user.mjs","sources":["../../../server/controllers/content-manager-user.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { contentTypes: contentTypesUtils } = require('@strapi/utils');\nconst { ApplicationError, NotFoundError, ForbiddenError } = require('@strapi/utils').errors;\nconst { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\n\nconst userModel = 'plugin::users-permissions.user';\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n edit: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n};\n\nconst findEntityAndCheckPermissions = async (ability, action, model, id) => {\n const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {\n populate: [`${CREATED_BY_ATTRIBUTE}.roles`],\n });\n\n if (_.isNil(doc)) {\n throw new NotFoundError();\n }\n\n const pm = strapi\n .service('admin::permission')\n .createPermissionsManager({ ability, action, model });\n\n if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {\n throw new ForbiddenError();\n }\n\n const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);\n\n return { pm, doc: docWithoutCreatorRoles };\n};\n\nmodule.exports = {\n /**\n * Create a/an user record.\n * @return {Object}\n */\n async create(ctx) {\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const { email, username } = body;\n\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: userModel,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const sanitizedBody = await pm.pickPermittedFieldsOf(body, { subject: userModel });\n\n const advanced = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n await validateCreateUserBody(ctx.request.body);\n\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername) {\n throw new ApplicationError('Username already taken');\n }\n\n if (advanced.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (userWithSameEmail) {\n throw new ApplicationError('Email already taken');\n }\n }\n\n const user = {\n ...sanitizedBody,\n provider: 'local',\n [CREATED_BY_ATTRIBUTE]: admin.id,\n [UPDATED_BY_ATTRIBUTE]: admin.id,\n };\n\n user.email = _.toLower(user.email);\n\n try {\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .create(userModel, { data: user });\n\n const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n\n ctx.created(sanitizedData);\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n /**\n * Update a/an user record.\n * @return {Object}\n */\n\n async update(ctx) {\n const { id: documentId } = ctx.params;\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const advancedConfigs = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n const { email, username, password } = body;\n\n const { pm, doc } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.edit,\n userModel,\n documentId\n );\n\n const user = doc;\n\n await validateUpdateUserBody(ctx.request.body);\n\n if (_.has(body, 'password') && (password == null || password === '')) {\n delete body.password;\n }\n\n if (_.has(body, 'username')) {\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {\n throw new ApplicationError('Username already taken');\n }\n }\n\n if (_.has(body, 'email') && advancedConfigs.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: _.toLower(email) } });\n\n if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {\n throw new ApplicationError('Email already taken');\n }\n\n body.email = _.toLower(body.email);\n }\n\n const sanitizedData = await pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });\n const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');\n\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .update(documentId, userModel, {\n data: updateData,\n });\n\n ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n },\n};\n"],"names":["_","require$$0","contentTypes","contentTypesUtils","require$$1","ApplicationError","NotFoundError","ForbiddenError","errors","validateCreateUserBody","validateUpdateUserBody","require$$2","UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","constants","userModel","ACTIONS","read","create","edit","delete","findEntityAndCheckPermissions","ability","action","model","id","doc","strapi","service","findOne","populate","isNil","pm","createPermissionsManager","cannot","toSubject","docWithoutCreatorRoles","omit","contentManagerUser","ctx","body","request","user","admin","userAbility","state","email","username","isAllowed","forbidden","sanitizedBody","pickPermittedFieldsOf","subject","advanced","store","type","name","key","get","userWithSameUsername","db","query","where","unique_email","userWithSameEmail","toLowerCase","provider","toLower","data","sanitizedData","sanitizeOutput","created","error","message","update","documentId","params","advancedConfigs","password","has","toString","updateData","updatedBy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-manager-user.mjs","sources":["../../../server/controllers/content-manager-user.js"],"sourcesContent":["'use strict';\n\nconst _ = require('lodash');\nconst { contentTypes: contentTypesUtils } = require('@strapi/utils');\nconst { ApplicationError, NotFoundError, ForbiddenError } = require('@strapi/utils').errors;\nconst { validateCreateUserBody, validateUpdateUserBody } = require('./validation/user');\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\n\nconst userModel = 'plugin::users-permissions.user';\nconst ACTIONS = {\n read: 'plugin::content-manager.explorer.read',\n create: 'plugin::content-manager.explorer.create',\n edit: 'plugin::content-manager.explorer.update',\n delete: 'plugin::content-manager.explorer.delete',\n};\n\nconst findEntityAndCheckPermissions = async (ability, action, model, id) => {\n const doc = await strapi.service('plugin::content-manager.document-manager').findOne(id, model, {\n populate: [`${CREATED_BY_ATTRIBUTE}.roles`],\n });\n\n if (_.isNil(doc)) {\n throw new NotFoundError();\n }\n\n const pm = strapi\n .service('admin::permission')\n .createPermissionsManager({ ability, action, model });\n\n if (pm.ability.cannot(pm.action, pm.toSubject(doc))) {\n throw new ForbiddenError();\n }\n\n const docWithoutCreatorRoles = _.omit(doc, `${CREATED_BY_ATTRIBUTE}.roles`);\n\n return { pm, doc: docWithoutCreatorRoles };\n};\n\nmodule.exports = {\n /**\n * Create a/an user record.\n * @return {Object}\n */\n async create(ctx) {\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const { email, username } = body;\n\n const pm = strapi.service('admin::permission').createPermissionsManager({\n ability: userAbility,\n action: ACTIONS.create,\n model: userModel,\n });\n\n if (!pm.isAllowed) {\n return ctx.forbidden();\n }\n\n const sanitizedBody = await pm.pickPermittedFieldsOf(body, { subject: userModel });\n\n const advanced = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n await validateCreateUserBody(ctx.request.body);\n\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername) {\n throw new ApplicationError('Username already taken');\n }\n\n if (advanced.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: email.toLowerCase() } });\n\n if (userWithSameEmail) {\n throw new ApplicationError('Email already taken');\n }\n }\n\n const user = {\n ...sanitizedBody,\n provider: 'local',\n [CREATED_BY_ATTRIBUTE]: admin.id,\n [UPDATED_BY_ATTRIBUTE]: admin.id,\n };\n\n user.email = _.toLower(user.email);\n\n try {\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .create(userModel, { data: user });\n\n const sanitizedData = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n\n ctx.created(sanitizedData);\n } catch (error) {\n throw new ApplicationError(error.message);\n }\n },\n /**\n * Update a/an user record.\n * @return {Object}\n */\n\n async update(ctx) {\n const { id: documentId } = ctx.params;\n const { body } = ctx.request;\n const { user: admin, userAbility } = ctx.state;\n\n const advancedConfigs = await strapi\n .store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })\n .get();\n\n const { email, username, password } = body;\n\n const { pm, doc } = await findEntityAndCheckPermissions(\n userAbility,\n ACTIONS.edit,\n userModel,\n documentId\n );\n\n const user = doc;\n\n await validateUpdateUserBody(ctx.request.body);\n\n if (_.has(body, 'password') && (password == null || password === '')) {\n delete body.password;\n }\n\n if (_.has(body, 'username')) {\n const userWithSameUsername = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { username } });\n\n if (userWithSameUsername && _.toString(userWithSameUsername.id) !== _.toString(user.id)) {\n throw new ApplicationError('Username already taken');\n }\n }\n\n if (_.has(body, 'email') && advancedConfigs.unique_email) {\n const userWithSameEmail = await strapi.db\n .query('plugin::users-permissions.user')\n .findOne({ where: { email: _.toLower(email) } });\n\n if (userWithSameEmail && _.toString(userWithSameEmail.id) !== _.toString(user.id)) {\n throw new ApplicationError('Email already taken');\n }\n\n body.email = _.toLower(body.email);\n }\n\n const sanitizedData = await pm.pickPermittedFieldsOf(body, { subject: pm.toSubject(user) });\n const updateData = _.omit({ ...sanitizedData, updatedBy: admin.id }, 'createdBy');\n\n const data = await strapi\n .service('plugin::content-manager.document-manager')\n .update(documentId, userModel, {\n data: updateData,\n });\n\n ctx.body = await pm.sanitizeOutput(data, { action: ACTIONS.read });\n },\n};\n"],"names":["_","require$$0","contentTypes","contentTypesUtils","require$$1","ApplicationError","NotFoundError","ForbiddenError","errors","validateCreateUserBody","validateUpdateUserBody","require$$2","UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","constants","userModel","ACTIONS","read","create","edit","delete","findEntityAndCheckPermissions","ability","action","model","id","doc","strapi","service","findOne","populate","isNil","pm","createPermissionsManager","cannot","toSubject","docWithoutCreatorRoles","omit","contentManagerUser","ctx","body","request","user","admin","userAbility","state","email","username","isAllowed","forbidden","sanitizedBody","pickPermittedFieldsOf","subject","advanced","store","type","name","key","get","userWithSameUsername","db","query","where","unique_email","userWithSameEmail","toLowerCase","provider","toLower","data","sanitizedData","sanitizeOutput","created","error","message","update","documentId","params","advancedConfigs","password","has","toString","updateData","updatedBy"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers-configs.js","sources":["../../../server/graphql/resolvers-configs.js"],"sourcesContent":["'use strict';\n\nconst userUID = 'plugin::users-permissions.user';\nconst roleUID = 'plugin::users-permissions.role';\n\nmodule.exports = ({ strapi }) => {\n const { naming } = strapi.plugin('graphql').service('utils');\n\n const user = strapi.getModel(userUID);\n const role = strapi.getModel(roleUID);\n\n const createRole = naming.getCreateMutationTypeName(role);\n const updateRole = naming.getUpdateMutationTypeName(role);\n const deleteRole = naming.getDeleteMutationTypeName(role);\n const createUser = naming.getCreateMutationTypeName(user);\n const updateUser = naming.getUpdateMutationTypeName(user);\n const deleteUser = naming.getDeleteMutationTypeName(user);\n\n return {\n // Disabled auth for some operations\n 'Mutation.login': { auth: false },\n 'Mutation.register': { auth: false },\n 'Mutation.forgotPassword': { auth: false },\n 'Mutation.resetPassword': { auth: false },\n 'Mutation.emailConfirmation': { auth: false },\n 'Mutation.changePassword': {\n auth: {\n scope: 'plugin::users-permissions.auth.changePassword',\n },\n },\n\n // Scoped auth for replaced CRUD operations\n // Role\n [`Mutation.${createRole}`]: { auth: { scope: [`${roleUID}.createRole`] } },\n [`Mutation.${updateRole}`]: { auth: { scope: [`${roleUID}.updateRole`] } },\n [`Mutation.${deleteRole}`]: { auth: { scope: [`${roleUID}.deleteRole`] } },\n // User\n [`Mutation.${createUser}`]: { auth: { scope: [`${userUID}.create`] } },\n [`Mutation.${updateUser}`]: { auth: { scope: [`${userUID}.update`] } },\n [`Mutation.${deleteUser}`]: { auth: { scope: [`${userUID}.destroy`] } },\n };\n};\n"],"names":["userUID","roleUID","resolversConfigs","strapi","naming","plugin","service","user","getModel","role","createRole","getCreateMutationTypeName","updateRole","getUpdateMutationTypeName","deleteRole","getDeleteMutationTypeName","createUser","updateUser","deleteUser","auth","scope"],"mappings":";;;;;;;AAEA,IAAA,MAAMA,OAAU,GAAA,gCAAA;AAChB,IAAA,MAAMC,OAAU,GAAA,gCAAA;IAEhBC,gBAAiB,GAAA,CAAC,EAAEC,MAAM,EAAE,GAAA;QAC1B,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAOE,MAAM,CAAC,SAAWC,CAAAA,CAAAA,OAAO,CAAC,OAAA,CAAA;QAEpD,MAAMC,IAAAA,GAAOJ,MAAOK,CAAAA,QAAQ,CAACR,OAAAA,CAAAA;QAC7B,MAAMS,IAAAA,GAAON,MAAOK,CAAAA,QAAQ,CAACP,OAAAA,CAAAA;QAE7B,MAAMS,UAAAA,GAAaN,MAAOO,CAAAA,yBAAyB,CAACF,IAAAA,CAAAA;QACpD,MAAMG,UAAAA,GAAaR,MAAOS,CAAAA,yBAAyB,CAACJ,IAAAA,CAAAA;QACpD,MAAMK,UAAAA,GAAaV,MAAOW,CAAAA,yBAAyB,CAACN,IAAAA,CAAAA;QACpD,MAAMO,UAAAA,GAAaZ,MAAOO,CAAAA,yBAAyB,CAACJ,IAAAA,CAAAA;QACpD,MAAMU,UAAAA,GAAab,MAAOS,CAAAA,yBAAyB,CAACN,IAAAA,CAAAA;QACpD,MAAMW,UAAAA,GAAad,MAAOW,CAAAA,yBAAyB,CAACR,IAAAA,CAAAA;QAEpD,OAAO;;YAEL,gBAAkB,EAAA;gBAAEY,IAAM,EAAA;AAAO,aAAA;YACjC,mBAAqB,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YACpC,yBAA2B,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YAC1C,wBAA0B,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YACzC,4BAA8B,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YAC7C,yBAA2B,EAAA;gBACzBA,IAAM,EAAA;oBACJC,KAAO,EAAA;AACR;AACF,aAAA;;;AAID,YAAA,CAAC,CAAC,SAAS,EAAEV,
|
|
1
|
+
{"version":3,"file":"resolvers-configs.js","sources":["../../../server/graphql/resolvers-configs.js"],"sourcesContent":["'use strict';\n\nconst userUID = 'plugin::users-permissions.user';\nconst roleUID = 'plugin::users-permissions.role';\n\nmodule.exports = ({ strapi }) => {\n const { naming } = strapi.plugin('graphql').service('utils');\n\n const user = strapi.getModel(userUID);\n const role = strapi.getModel(roleUID);\n\n const createRole = naming.getCreateMutationTypeName(role);\n const updateRole = naming.getUpdateMutationTypeName(role);\n const deleteRole = naming.getDeleteMutationTypeName(role);\n const createUser = naming.getCreateMutationTypeName(user);\n const updateUser = naming.getUpdateMutationTypeName(user);\n const deleteUser = naming.getDeleteMutationTypeName(user);\n\n return {\n // Disabled auth for some operations\n 'Mutation.login': { auth: false },\n 'Mutation.register': { auth: false },\n 'Mutation.forgotPassword': { auth: false },\n 'Mutation.resetPassword': { auth: false },\n 'Mutation.emailConfirmation': { auth: false },\n 'Mutation.changePassword': {\n auth: {\n scope: 'plugin::users-permissions.auth.changePassword',\n },\n },\n\n // Scoped auth for replaced CRUD operations\n // Role\n [`Mutation.${createRole}`]: { auth: { scope: [`${roleUID}.createRole`] } },\n [`Mutation.${updateRole}`]: { auth: { scope: [`${roleUID}.updateRole`] } },\n [`Mutation.${deleteRole}`]: { auth: { scope: [`${roleUID}.deleteRole`] } },\n // User\n [`Mutation.${createUser}`]: { auth: { scope: [`${userUID}.create`] } },\n [`Mutation.${updateUser}`]: { auth: { scope: [`${userUID}.update`] } },\n [`Mutation.${deleteUser}`]: { auth: { scope: [`${userUID}.destroy`] } },\n };\n};\n"],"names":["userUID","roleUID","resolversConfigs","strapi","naming","plugin","service","user","getModel","role","createRole","getCreateMutationTypeName","updateRole","getUpdateMutationTypeName","deleteRole","getDeleteMutationTypeName","createUser","updateUser","deleteUser","auth","scope"],"mappings":";;;;;;;AAEA,IAAA,MAAMA,OAAU,GAAA,gCAAA;AAChB,IAAA,MAAMC,OAAU,GAAA,gCAAA;IAEhBC,gBAAiB,GAAA,CAAC,EAAEC,MAAM,EAAE,GAAA;QAC1B,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAOE,MAAM,CAAC,SAAWC,CAAAA,CAAAA,OAAO,CAAC,OAAA,CAAA;QAEpD,MAAMC,IAAAA,GAAOJ,MAAOK,CAAAA,QAAQ,CAACR,OAAAA,CAAAA;QAC7B,MAAMS,IAAAA,GAAON,MAAOK,CAAAA,QAAQ,CAACP,OAAAA,CAAAA;QAE7B,MAAMS,UAAAA,GAAaN,MAAOO,CAAAA,yBAAyB,CAACF,IAAAA,CAAAA;QACpD,MAAMG,UAAAA,GAAaR,MAAOS,CAAAA,yBAAyB,CAACJ,IAAAA,CAAAA;QACpD,MAAMK,UAAAA,GAAaV,MAAOW,CAAAA,yBAAyB,CAACN,IAAAA,CAAAA;QACpD,MAAMO,UAAAA,GAAaZ,MAAOO,CAAAA,yBAAyB,CAACJ,IAAAA,CAAAA;QACpD,MAAMU,UAAAA,GAAab,MAAOS,CAAAA,yBAAyB,CAACN,IAAAA,CAAAA;QACpD,MAAMW,UAAAA,GAAad,MAAOW,CAAAA,yBAAyB,CAACR,IAAAA,CAAAA;QAEpD,OAAO;;YAEL,gBAAkB,EAAA;gBAAEY,IAAM,EAAA;AAAO,aAAA;YACjC,mBAAqB,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YACpC,yBAA2B,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YAC1C,wBAA0B,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YACzC,4BAA8B,EAAA;gBAAEA,IAAM,EAAA;AAAO,aAAA;YAC7C,yBAA2B,EAAA;gBACzBA,IAAM,EAAA;oBACJC,KAAO,EAAA;AACR;AACF,aAAA;;;AAID,YAAA,CAAC,CAAC,SAAS,EAAEV,UAAAA,CAAAA,CAAY,GAAG;gBAAES,IAAM,EAAA;oBAAEC,KAAO,EAAA;wBAAC,CAAGnB,EAAAA,OAAAA,CAAQ,WAAW;AAAE;AAAA;AAAI,aAAA;AAC1E,YAAA,CAAC,CAAC,SAAS,EAAEW,UAAAA,CAAAA,CAAY,GAAG;gBAAEO,IAAM,EAAA;oBAAEC,KAAO,EAAA;wBAAC,CAAGnB,EAAAA,OAAAA,CAAQ,WAAW;AAAE;AAAA;AAAI,aAAA;AAC1E,YAAA,CAAC,CAAC,SAAS,EAAEa,UAAAA,CAAAA,CAAY,GAAG;gBAAEK,IAAM,EAAA;oBAAEC,KAAO,EAAA;wBAAC,CAAGnB,EAAAA,OAAAA,CAAQ,WAAW;AAAE;AAAA;AAAI,aAAA;;AAE1E,YAAA,CAAC,CAAC,SAAS,EAAEe,UAAAA,CAAAA,CAAY,GAAG;gBAAEG,IAAM,EAAA;oBAAEC,KAAO,EAAA;wBAAC,CAAGpB,EAAAA,OAAAA,CAAQ,OAAO;AAAE;AAAA;AAAI,aAAA;AACtE,YAAA,CAAC,CAAC,SAAS,EAAEiB,UAAAA,CAAAA,CAAY,GAAG;gBAAEE,IAAM,EAAA;oBAAEC,KAAO,EAAA;wBAAC,CAAGpB,EAAAA,OAAAA,CAAQ,OAAO;AAAE;AAAA;AAAI,aAAA;AACtE,YAAA,CAAC,CAAC,SAAS,EAAEkB,UAAAA,CAAAA,CAAY,GAAG;gBAAEC,IAAM,EAAA;oBAAEC,KAAO,EAAA;wBAAC,CAAGpB,EAAAA,OAAAA,CAAQ,QAAQ;AAAE;AAAA;AAAI;AAC3E,SAAA;AACA,KAAA;;;;;;"}
|