@strapi/plugin-users-permissions 4.2.0-beta.0 → 4.2.0-beta.3
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/FormModal/index.js +1 -1
- package/admin/src/index.js +1 -1
- package/admin/src/pages/AdvancedSettings/index.js +2 -2
- package/admin/src/pages/EmailTemplates/components/EmailTable.js +2 -2
- package/admin/src/pages/Providers/index.js +4 -4
- package/admin/src/pages/Roles/CreatePage/index.js +3 -3
- package/admin/src/pages/Roles/EditPage/index.js +15 -15
- package/admin/src/pages/Roles/ListPage/components/TableBody.js +2 -3
- package/admin/src/pages/Roles/ListPage/index.js +6 -6
- package/admin/src/translations/ar.json +0 -1
- package/admin/src/translations/cs.json +0 -1
- package/admin/src/translations/de.json +0 -2
- package/admin/src/translations/dk.json +0 -11
- package/admin/src/translations/en.json +0 -11
- package/admin/src/translations/es.json +0 -11
- package/admin/src/translations/fr.json +0 -1
- package/admin/src/translations/id.json +0 -2
- package/admin/src/translations/it.json +0 -2
- package/admin/src/translations/ja.json +0 -1
- package/admin/src/translations/ko.json +0 -11
- package/admin/src/translations/ms.json +0 -1
- package/admin/src/translations/nl.json +0 -1
- package/admin/src/translations/pl.json +0 -1
- package/admin/src/translations/pt-BR.json +0 -1
- package/admin/src/translations/pt.json +0 -1
- package/admin/src/translations/ru.json +0 -2
- package/admin/src/translations/sk.json +0 -1
- package/admin/src/translations/sv.json +0 -2
- package/admin/src/translations/th.json +0 -2
- package/admin/src/translations/tr.json +0 -1
- package/admin/src/translations/uk.json +0 -1
- package/admin/src/translations/vi.json +0 -1
- package/admin/src/translations/zh-Hans.json +0 -3
- package/admin/src/translations/zh.json +0 -1
- package/package.json +6 -8
- package/server/bootstrap/index.js +13 -4
- package/server/controllers/auth.js +11 -16
- package/server/controllers/role.js +4 -4
- package/server/controllers/settings.js +1 -1
- package/server/controllers/user.js +10 -5
- package/server/controllers/validation/email-template.js +10 -1
- package/server/graphql/mutations/auth/email-confirmation.js +1 -1
- package/server/graphql/mutations/crud/user/delete-user.js +1 -1
- package/server/graphql/resolvers-configs.js +4 -4
- package/server/register.js +2 -0
- package/server/routes/admin/role.js +2 -2
- package/server/routes/content-api/role.js +2 -2
- package/server/services/providers-list.js +152 -348
- package/server/services/providers.js +58 -69
- package/server/services/role.js +2 -2
- package/server/services/user.js +7 -5
- package/server/utils/index.js +3 -0
- package/server/utils/sanitize/index.js +9 -0
- package/server/utils/sanitize/sanitizers.js +19 -0
- package/server/utils/sanitize/visitors/index.js +5 -0
- package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +11 -0
|
@@ -18,17 +18,16 @@ module.exports = ({ strapi }) => {
|
|
|
18
18
|
* Helper to get profiles
|
|
19
19
|
*
|
|
20
20
|
* @param {String} provider
|
|
21
|
-
* @param {Function} callback
|
|
22
21
|
*/
|
|
23
22
|
|
|
24
|
-
const getProfile = async (provider, query
|
|
23
|
+
const getProfile = async (provider, query) => {
|
|
25
24
|
const access_token = query.access_token || query.code || query.oauth_token;
|
|
26
25
|
|
|
27
26
|
const providers = await strapi
|
|
28
27
|
.store({ type: 'plugin', name: 'users-permissions', key: 'grant' })
|
|
29
28
|
.get();
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
return providerRequest({ provider, query, access_token, providers });
|
|
32
31
|
};
|
|
33
32
|
|
|
34
33
|
/**
|
|
@@ -46,79 +45,69 @@ module.exports = ({ strapi }) => {
|
|
|
46
45
|
|
|
47
46
|
return new Promise((resolve, reject) => {
|
|
48
47
|
if (!access_token) {
|
|
49
|
-
return reject(
|
|
48
|
+
return reject({ message: 'No access_token.' });
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
// Get the profile.
|
|
53
|
-
getProfile(provider, query
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const email = _.toLower(profile.email);
|
|
59
|
-
|
|
60
|
-
// We need at least the mail.
|
|
61
|
-
if (!email) {
|
|
62
|
-
return reject([null, { message: 'Email was not available.' }]);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
try {
|
|
66
|
-
const users = await strapi.query('plugin::users-permissions.user').findMany({
|
|
67
|
-
where: { email },
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const advanced = await strapi
|
|
71
|
-
.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
|
|
72
|
-
.get();
|
|
73
|
-
|
|
74
|
-
const user = _.find(users, { provider });
|
|
75
|
-
|
|
76
|
-
if (_.isEmpty(user) && !advanced.allow_register) {
|
|
77
|
-
return resolve([
|
|
78
|
-
null,
|
|
79
|
-
[{ messages: [{ id: 'Auth.advanced.allow_register' }] }],
|
|
80
|
-
'Register action is actually not available.',
|
|
81
|
-
]);
|
|
82
|
-
}
|
|
52
|
+
getProfile(provider, query)
|
|
53
|
+
.then(async profile => {
|
|
54
|
+
const email = _.toLower(profile.email);
|
|
83
55
|
|
|
84
|
-
|
|
85
|
-
|
|
56
|
+
// We need at least the mail.
|
|
57
|
+
if (!email) {
|
|
58
|
+
return reject({ message: 'Email was not available.' });
|
|
86
59
|
}
|
|
87
60
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
61
|
+
try {
|
|
62
|
+
const users = await strapi.query('plugin::users-permissions.user').findMany({
|
|
63
|
+
where: { email },
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const advanced = await strapi
|
|
67
|
+
.store({ type: 'plugin', name: 'users-permissions', key: 'advanced' })
|
|
68
|
+
.get();
|
|
69
|
+
|
|
70
|
+
const user = _.find(users, { provider });
|
|
71
|
+
|
|
72
|
+
if (_.isEmpty(user) && !advanced.allow_register) {
|
|
73
|
+
return reject({ message: 'Register action is actually not available.' });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (!_.isEmpty(user)) {
|
|
77
|
+
return resolve(user);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (
|
|
81
|
+
!_.isEmpty(_.find(users, user => user.provider !== provider)) &&
|
|
82
|
+
advanced.unique_email
|
|
83
|
+
) {
|
|
84
|
+
return reject({ message: 'Email is already taken.' });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Retrieve default role.
|
|
88
|
+
const defaultRole = await strapi
|
|
89
|
+
.query('plugin::users-permissions.role')
|
|
90
|
+
.findOne({ where: { type: advanced.default_role } });
|
|
91
|
+
|
|
92
|
+
// Create the new user.
|
|
93
|
+
const params = {
|
|
94
|
+
...profile,
|
|
95
|
+
email, // overwrite with lowercased email
|
|
96
|
+
provider,
|
|
97
|
+
role: defaultRole.id,
|
|
98
|
+
confirmed: true,
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const createdUser = await strapi
|
|
102
|
+
.query('plugin::users-permissions.user')
|
|
103
|
+
.create({ data: params });
|
|
104
|
+
|
|
105
|
+
return resolve(createdUser);
|
|
106
|
+
} catch (err) {
|
|
107
|
+
reject(err);
|
|
97
108
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const defaultRole = await strapi
|
|
101
|
-
.query('plugin::users-permissions.role')
|
|
102
|
-
.findOne({ where: { type: advanced.default_role } });
|
|
103
|
-
|
|
104
|
-
// Create the new user.
|
|
105
|
-
const params = {
|
|
106
|
-
...profile,
|
|
107
|
-
email, // overwrite with lowercased email
|
|
108
|
-
provider,
|
|
109
|
-
role: defaultRole.id,
|
|
110
|
-
confirmed: true,
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const createdUser = await strapi
|
|
114
|
-
.query('plugin::users-permissions.user')
|
|
115
|
-
.create({ data: params });
|
|
116
|
-
|
|
117
|
-
return resolve([createdUser, null]);
|
|
118
|
-
} catch (err) {
|
|
119
|
-
reject([null, err]);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
109
|
+
})
|
|
110
|
+
.catch(reject);
|
|
122
111
|
});
|
|
123
112
|
};
|
|
124
113
|
|
package/server/services/role.js
CHANGED
|
@@ -41,7 +41,7 @@ module.exports = ({ strapi }) => ({
|
|
|
41
41
|
await Promise.all(createPromises);
|
|
42
42
|
},
|
|
43
43
|
|
|
44
|
-
async
|
|
44
|
+
async findOne(roleID) {
|
|
45
45
|
const role = await strapi
|
|
46
46
|
.query('plugin::users-permissions.role')
|
|
47
47
|
.findOne({ where: { id: roleID }, populate: ['permissions'] });
|
|
@@ -68,7 +68,7 @@ module.exports = ({ strapi }) => ({
|
|
|
68
68
|
};
|
|
69
69
|
},
|
|
70
70
|
|
|
71
|
-
async
|
|
71
|
+
async find() {
|
|
72
72
|
const roles = await strapi.query('plugin::users-permissions.role').findMany({ sort: ['name'] });
|
|
73
73
|
|
|
74
74
|
for (const role of roles) {
|
package/server/services/user.js
CHANGED
|
@@ -10,7 +10,7 @@ const crypto = require('crypto');
|
|
|
10
10
|
const bcrypt = require('bcryptjs');
|
|
11
11
|
const urlJoin = require('url-join');
|
|
12
12
|
|
|
13
|
-
const { getAbsoluteServerUrl, sanitize } = require('@strapi/utils');
|
|
13
|
+
const { getAbsoluteAdminUrl, getAbsoluteServerUrl, sanitize } = require('@strapi/utils');
|
|
14
14
|
const { getService } = require('../utils');
|
|
15
15
|
|
|
16
16
|
module.exports = ({ strapi }) => ({
|
|
@@ -58,8 +58,8 @@ module.exports = ({ strapi }) => ({
|
|
|
58
58
|
* Promise to fetch a/an user.
|
|
59
59
|
* @return {Promise}
|
|
60
60
|
*/
|
|
61
|
-
fetch(
|
|
62
|
-
return strapi.
|
|
61
|
+
fetch(id, params) {
|
|
62
|
+
return strapi.entityService.findOne('plugin::users-permissions.user', id, params);
|
|
63
63
|
},
|
|
64
64
|
|
|
65
65
|
/**
|
|
@@ -76,8 +76,8 @@ module.exports = ({ strapi }) => ({
|
|
|
76
76
|
* Promise to fetch all users.
|
|
77
77
|
* @return {Promise}
|
|
78
78
|
*/
|
|
79
|
-
fetchAll(params
|
|
80
|
-
return strapi.
|
|
79
|
+
fetchAll(params) {
|
|
80
|
+
return strapi.entityService.findMany('plugin::users-permissions.user', params);
|
|
81
81
|
},
|
|
82
82
|
|
|
83
83
|
/**
|
|
@@ -118,6 +118,8 @@ module.exports = ({ strapi }) => ({
|
|
|
118
118
|
const apiPrefix = strapi.config.get('api.rest.prefix');
|
|
119
119
|
settings.message = await userPermissionService.template(settings.message, {
|
|
120
120
|
URL: urlJoin(getAbsoluteServerUrl(strapi.config), apiPrefix, '/auth/email-confirmation'),
|
|
121
|
+
SERVER_URL: getAbsoluteServerUrl(strapi.config),
|
|
122
|
+
ADMIN_URL: getAbsoluteAdminUrl(strapi.config),
|
|
121
123
|
USER: sanitizedUserInfo,
|
|
122
124
|
CODE: confirmationToken,
|
|
123
125
|
});
|
package/server/utils/index.js
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { curry } = require('lodash/fp');
|
|
4
|
+
const { traverseEntity, pipeAsync } = require('@strapi/utils');
|
|
5
|
+
|
|
6
|
+
const { removeUserRelationFromRoleEntities } = require('./visitors');
|
|
7
|
+
|
|
8
|
+
const sanitizeUserRelationFromRoleEntities = curry((schema, entity) => {
|
|
9
|
+
return traverseEntity(removeUserRelationFromRoleEntities, { schema }, entity);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const defaultSanitizeOutput = curry((schema, entity) => {
|
|
13
|
+
return pipeAsync(sanitizeUserRelationFromRoleEntities(schema))(entity);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
sanitizeUserRelationFromRoleEntities,
|
|
18
|
+
defaultSanitizeOutput,
|
|
19
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = ({ schema, key, attribute }, { remove }) => {
|
|
4
|
+
if (
|
|
5
|
+
attribute.type === 'relation' &&
|
|
6
|
+
attribute.target === 'plugin::users-permissions.user' &&
|
|
7
|
+
schema.uid === 'plugin::users-permissions.role'
|
|
8
|
+
) {
|
|
9
|
+
remove(key);
|
|
10
|
+
}
|
|
11
|
+
};
|