@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.
Files changed (56) hide show
  1. package/admin/src/components/FormModal/index.js +1 -1
  2. package/admin/src/index.js +1 -1
  3. package/admin/src/pages/AdvancedSettings/index.js +2 -2
  4. package/admin/src/pages/EmailTemplates/components/EmailTable.js +2 -2
  5. package/admin/src/pages/Providers/index.js +4 -4
  6. package/admin/src/pages/Roles/CreatePage/index.js +3 -3
  7. package/admin/src/pages/Roles/EditPage/index.js +15 -15
  8. package/admin/src/pages/Roles/ListPage/components/TableBody.js +2 -3
  9. package/admin/src/pages/Roles/ListPage/index.js +6 -6
  10. package/admin/src/translations/ar.json +0 -1
  11. package/admin/src/translations/cs.json +0 -1
  12. package/admin/src/translations/de.json +0 -2
  13. package/admin/src/translations/dk.json +0 -11
  14. package/admin/src/translations/en.json +0 -11
  15. package/admin/src/translations/es.json +0 -11
  16. package/admin/src/translations/fr.json +0 -1
  17. package/admin/src/translations/id.json +0 -2
  18. package/admin/src/translations/it.json +0 -2
  19. package/admin/src/translations/ja.json +0 -1
  20. package/admin/src/translations/ko.json +0 -11
  21. package/admin/src/translations/ms.json +0 -1
  22. package/admin/src/translations/nl.json +0 -1
  23. package/admin/src/translations/pl.json +0 -1
  24. package/admin/src/translations/pt-BR.json +0 -1
  25. package/admin/src/translations/pt.json +0 -1
  26. package/admin/src/translations/ru.json +0 -2
  27. package/admin/src/translations/sk.json +0 -1
  28. package/admin/src/translations/sv.json +0 -2
  29. package/admin/src/translations/th.json +0 -2
  30. package/admin/src/translations/tr.json +0 -1
  31. package/admin/src/translations/uk.json +0 -1
  32. package/admin/src/translations/vi.json +0 -1
  33. package/admin/src/translations/zh-Hans.json +0 -3
  34. package/admin/src/translations/zh.json +0 -1
  35. package/package.json +6 -8
  36. package/server/bootstrap/index.js +13 -4
  37. package/server/controllers/auth.js +11 -16
  38. package/server/controllers/role.js +4 -4
  39. package/server/controllers/settings.js +1 -1
  40. package/server/controllers/user.js +10 -5
  41. package/server/controllers/validation/email-template.js +10 -1
  42. package/server/graphql/mutations/auth/email-confirmation.js +1 -1
  43. package/server/graphql/mutations/crud/user/delete-user.js +1 -1
  44. package/server/graphql/resolvers-configs.js +4 -4
  45. package/server/register.js +2 -0
  46. package/server/routes/admin/role.js +2 -2
  47. package/server/routes/content-api/role.js +2 -2
  48. package/server/services/providers-list.js +152 -348
  49. package/server/services/providers.js +58 -69
  50. package/server/services/role.js +2 -2
  51. package/server/services/user.js +7 -5
  52. package/server/utils/index.js +3 -0
  53. package/server/utils/sanitize/index.js +9 -0
  54. package/server/utils/sanitize/sanitizers.js +19 -0
  55. package/server/utils/sanitize/visitors/index.js +5 -0
  56. 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, callback) => {
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
- await providerRequest({ provider, query, callback, access_token, providers });
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([null, { message: 'No access_token.' }]);
48
+ return reject({ message: 'No access_token.' });
50
49
  }
51
50
 
52
51
  // Get the profile.
53
- getProfile(provider, query, async (err, profile) => {
54
- if (err) {
55
- return reject([null, err]);
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
- if (!_.isEmpty(user)) {
85
- return resolve([user, null]);
56
+ // We need at least the mail.
57
+ if (!email) {
58
+ return reject({ message: 'Email was not available.' });
86
59
  }
87
60
 
88
- if (
89
- !_.isEmpty(_.find(users, user => user.provider !== provider)) &&
90
- advanced.unique_email
91
- ) {
92
- return resolve([
93
- null,
94
- [{ messages: [{ id: 'Auth.form.error.email.taken' }] }],
95
- 'Email is already taken.',
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
- // Retrieve default role.
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
 
@@ -41,7 +41,7 @@ module.exports = ({ strapi }) => ({
41
41
  await Promise.all(createPromises);
42
42
  },
43
43
 
44
- async getRole(roleID) {
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 getRoles() {
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) {
@@ -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(params, populate) {
62
- return strapi.query('plugin::users-permissions.user').findOne({ where: params, populate });
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, populate) {
80
- return strapi.query('plugin::users-permissions.user').findMany({ where: params, populate });
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
  });
@@ -1,9 +1,12 @@
1
1
  'use strict';
2
2
 
3
+ const sanitize = require('./sanitize');
4
+
3
5
  const getService = name => {
4
6
  return strapi.plugin('users-permissions').service(name);
5
7
  };
6
8
 
7
9
  module.exports = {
8
10
  getService,
11
+ sanitize,
9
12
  };
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ const visitors = require('./visitors');
4
+ const sanitizers = require('./sanitizers');
5
+
6
+ module.exports = {
7
+ sanitizers,
8
+ visitors,
9
+ };
@@ -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,5 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ removeUserRelationFromRoleEntities: require('./remove-user-relation-from-role-entities'),
5
+ };
@@ -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
+ };