@strapi/admin 4.3.7 → 4.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/admin/src/contexts/ApiTokenPermissions/index.js +24 -0
  2. package/admin/src/hooks/index.js +1 -0
  3. package/admin/src/hooks/useRegenerate/index.js +34 -0
  4. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js +56 -0
  5. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/getMethodColor.js +41 -0
  6. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js +72 -0
  7. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js +30 -0
  8. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +150 -0
  9. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js +37 -0
  10. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js +40 -0
  11. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +68 -0
  12. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +452 -180
  13. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/init.js +13 -0
  14. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js +55 -0
  15. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/getDateOfExpiration.js +16 -0
  16. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/index.js +5 -0
  17. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js +2 -1
  18. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/transformPermissionsData.js +36 -0
  19. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DefaultButton/index.js +63 -0
  20. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +1 -0
  21. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/ReadButton/index.js +19 -0
  22. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +3 -36
  23. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/index.js +13 -11
  24. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +3 -2
  25. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/utils/tableHeaders.js +8 -8
  26. package/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js +1 -1
  27. package/admin/src/permissions/defaultPermissions.js +2 -6
  28. package/admin/src/translations/en.json +17 -0
  29. package/admin/src/translations/fr.json +32 -0
  30. package/build/4235.982b5799.chunk.js +30 -0
  31. package/build/7379.d246dd38.chunk.js +1 -0
  32. package/build/{Admin-authenticatedApp.0d299d1a.chunk.js → Admin-authenticatedApp.3a31a087.chunk.js} +1 -1
  33. package/build/{Admin_homePage.118926e0.chunk.js → Admin_homePage.6d5e3236.chunk.js} +1 -1
  34. package/build/{Admin_profilePage.8617313a.chunk.js → Admin_profilePage.83991a6c.chunk.js} +1 -1
  35. package/build/{Admin_settingsPage.98a711e5.chunk.js → Admin_settingsPage.fc9c607a.chunk.js} +16 -16
  36. package/build/admin-app.41b6472c.chunk.js +112 -0
  37. package/build/admin-edit-roles-page.4dd6bcb9.chunk.js +1 -0
  38. package/build/api-tokens-create-page.29cc87b6.chunk.js +1 -0
  39. package/build/api-tokens-edit-page.c294a88f.chunk.js +1 -0
  40. package/build/api-tokens-list-page.bb36535f.chunk.js +16 -0
  41. package/build/en-json.a9918c93.chunk.js +1 -0
  42. package/build/{fr-json.6d5a7e14.chunk.js → fr-json.4ed1fc2c.chunk.js} +1 -1
  43. package/build/index.html +1 -1
  44. package/build/{main.e73468bf.js → main.cdfda31e.js} +1 -1
  45. package/build/{runtime~main.edd06c9f.js → runtime~main.fa8f8898.js} +2 -2
  46. package/build/sso-settings-page.9ceb0140.chunk.js +1 -0
  47. package/build/{webhook-edit-page.d2ea3351.chunk.js → webhook-edit-page.9e46fc3f.chunk.js} +1 -1
  48. package/package.json +9 -8
  49. package/scripts/build.js +2 -4
  50. package/server/bootstrap.js +19 -1
  51. package/server/config/admin-actions.js +20 -0
  52. package/server/content-types/api-token-permission.js +36 -0
  53. package/server/content-types/api-token.js +25 -1
  54. package/server/content-types/index.js +1 -0
  55. package/server/controllers/api-token.js +24 -1
  56. package/server/controllers/content-api.js +15 -0
  57. package/server/controllers/index.js +1 -0
  58. package/server/routes/api-tokens.js +11 -0
  59. package/server/routes/content-api.js +20 -0
  60. package/server/routes/index.js +2 -0
  61. package/server/services/api-token.js +310 -29
  62. package/server/services/constants.js +10 -0
  63. package/server/services/permission/engine.js +36 -226
  64. package/server/services/permission/permissions-manager/query-builers.js +3 -2
  65. package/server/services/permission/queries.js +1 -1
  66. package/server/services/permission.js +4 -1
  67. package/server/strategies/admin.js +7 -1
  68. package/server/strategies/api-token.js +71 -11
  69. package/server/validation/api-tokens.js +12 -2
  70. package/server/validation/common-functions/check-fields-are-correctly-nested.js +1 -1
  71. package/build/admin-app.05edc328.chunk.js +0 -112
  72. package/build/admin-edit-roles-page.554ba3fa.chunk.js +0 -1
  73. package/build/api-tokens-create-page.4c262d6e.chunk.js +0 -1
  74. package/build/api-tokens-edit-page.10a9d368.chunk.js +0 -1
  75. package/build/api-tokens-list-page.442c9f3c.chunk.js +0 -15
  76. package/build/en-json.12bc5a14.chunk.js +0 -1
  77. package/build/sso-settings-page.445184e0.chunk.js +0 -1
  78. package/server/services/permission/engine-hooks.js +0 -82
@@ -118,12 +118,21 @@ module.exports = {
118
118
  category: 'users and roles',
119
119
  subCategory: 'roles',
120
120
  },
121
+ {
122
+ uid: 'api-tokens.access',
123
+ displayName: 'Access the API tokens settings page',
124
+ pluginName: 'admin',
125
+ section: 'settings',
126
+ category: 'api tokens',
127
+ subCategory: 'api Tokens',
128
+ },
121
129
  {
122
130
  uid: 'api-tokens.create',
123
131
  displayName: 'Create (generate)',
124
132
  pluginName: 'admin',
125
133
  section: 'settings',
126
134
  category: 'api tokens',
135
+ subCategory: 'general',
127
136
  },
128
137
  {
129
138
  uid: 'api-tokens.read',
@@ -131,6 +140,7 @@ module.exports = {
131
140
  pluginName: 'admin',
132
141
  section: 'settings',
133
142
  category: 'api tokens',
143
+ subCategory: 'general',
134
144
  },
135
145
  {
136
146
  uid: 'api-tokens.update',
@@ -138,6 +148,15 @@ module.exports = {
138
148
  pluginName: 'admin',
139
149
  section: 'settings',
140
150
  category: 'api tokens',
151
+ subCategory: 'general',
152
+ },
153
+ {
154
+ uid: 'api-tokens.regenerate',
155
+ displayName: 'Regenerate',
156
+ pluginName: 'admin',
157
+ section: 'settings',
158
+ category: 'api tokens',
159
+ subCategory: 'general',
141
160
  },
142
161
  {
143
162
  uid: 'api-tokens.delete',
@@ -145,6 +164,7 @@ module.exports = {
145
164
  pluginName: 'admin',
146
165
  section: 'settings',
147
166
  category: 'api tokens',
167
+ subCategory: 'general',
148
168
  },
149
169
  {
150
170
  uid: 'project-settings.update',
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ collectionName: 'strapi_api_token_permissions',
5
+ info: {
6
+ name: 'API Token Permission',
7
+ description: '',
8
+ singularName: 'api-token-permission',
9
+ pluralName: 'api-token-permissions',
10
+ displayName: 'API Token Permission',
11
+ },
12
+ options: {},
13
+ pluginOptions: {
14
+ 'content-manager': {
15
+ visible: false,
16
+ },
17
+ 'content-type-builder': {
18
+ visible: false,
19
+ },
20
+ },
21
+ attributes: {
22
+ action: {
23
+ type: 'string',
24
+ minLength: 1,
25
+ configurable: false,
26
+ required: true,
27
+ },
28
+ token: {
29
+ configurable: false,
30
+ type: 'relation',
31
+ relation: 'manyToOne',
32
+ inversedBy: 'permissions',
33
+ target: 'admin::api-token',
34
+ },
35
+ },
36
+ };
@@ -26,6 +26,7 @@ module.exports = {
26
26
  minLength: 1,
27
27
  configurable: false,
28
28
  required: true,
29
+ unique: true,
29
30
  },
30
31
  description: {
31
32
  type: 'string',
@@ -38,7 +39,7 @@ module.exports = {
38
39
  type: 'enumeration',
39
40
  enum: Object.values(constants.API_TOKEN_TYPE),
40
41
  configurable: false,
41
- required: false,
42
+ required: true,
42
43
  default: constants.API_TOKEN_TYPE.READ_ONLY,
43
44
  },
44
45
  accessKey: {
@@ -47,5 +48,28 @@ module.exports = {
47
48
  configurable: false,
48
49
  required: true,
49
50
  },
51
+ lastUsedAt: {
52
+ type: 'datetime',
53
+ configurable: false,
54
+ required: false,
55
+ },
56
+ permissions: {
57
+ type: 'relation',
58
+ target: 'admin::api-token-permission',
59
+ relation: 'oneToMany',
60
+ mappedBy: 'token',
61
+ configurable: false,
62
+ required: false,
63
+ },
64
+ expiresAt: {
65
+ type: 'datetime',
66
+ configurable: false,
67
+ required: false,
68
+ },
69
+ lifespan: {
70
+ type: 'integer',
71
+ configurable: false,
72
+ required: false,
73
+ },
50
74
  },
51
75
  };
@@ -5,4 +5,5 @@ module.exports = {
5
5
  user: { schema: require('./User') },
6
6
  role: { schema: require('./Role') },
7
7
  'api-token': { schema: require('./api-token') },
8
+ 'api-token-permission': { schema: require('./api-token-permission') },
8
9
  };
@@ -24,6 +24,8 @@ module.exports = {
24
24
  name: trim(body.name),
25
25
  description: trim(body.description),
26
26
  type: body.type,
27
+ permissions: body.permissions,
28
+ lifespan: body.lifespan,
27
29
  };
28
30
 
29
31
  await validateApiTokenCreationInput(attributes);
@@ -37,6 +39,21 @@ module.exports = {
37
39
  ctx.created({ data: apiToken });
38
40
  },
39
41
 
42
+ async regenerate(ctx) {
43
+ const { id } = ctx.params;
44
+ const apiTokenService = getService('api-token');
45
+
46
+ const apiTokenExists = await apiTokenService.getById(id);
47
+ if (!apiTokenExists) {
48
+ ctx.notFound('API Token not found');
49
+ return;
50
+ }
51
+
52
+ const accessToken = await apiTokenService.regenerate(id);
53
+
54
+ ctx.created({ data: accessToken });
55
+ },
56
+
40
57
  async list(ctx) {
41
58
  const apiTokenService = getService('api-token');
42
59
  const apiTokens = await apiTokenService.list();
@@ -59,7 +76,6 @@ module.exports = {
59
76
 
60
77
  if (!apiToken) {
61
78
  ctx.notFound('API Token not found');
62
-
63
79
  return;
64
80
  }
65
81
 
@@ -108,4 +124,11 @@ module.exports = {
108
124
  const apiToken = await apiTokenService.update(id, attributes);
109
125
  ctx.send({ data: apiToken });
110
126
  },
127
+
128
+ async getLayout(ctx) {
129
+ const apiTokenService = getService('api-token');
130
+ const layout = await apiTokenService.getApiTokenLayout();
131
+
132
+ ctx.send({ data: layout });
133
+ },
111
134
  };
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ async getPermissions(ctx) {
5
+ const actionsMap = await strapi.contentAPI.permissions.getActionsMap();
6
+
7
+ ctx.send({ data: actionsMap });
8
+ },
9
+
10
+ async getRoutes(ctx) {
11
+ const routesMap = await strapi.contentAPI.getRoutesMap();
12
+
13
+ ctx.send({ data: routesMap });
14
+ },
15
+ };
@@ -9,4 +9,5 @@ module.exports = {
9
9
  role: require('./role'),
10
10
  user: require('./user'),
11
11
  webhooks: require('./webhooks'),
12
+ 'content-api': require('./content-api'),
12
13
  };
@@ -56,4 +56,15 @@ module.exports = [
56
56
  ],
57
57
  },
58
58
  },
59
+ {
60
+ method: 'POST',
61
+ path: '/api-tokens/:id/regenerate',
62
+ handler: 'api-token.regenerate',
63
+ config: {
64
+ policies: [
65
+ 'admin::isAuthenticatedAdmin',
66
+ { name: 'admin::hasPermissions', config: { actions: ['admin::api-tokens.regenerate'] } },
67
+ ],
68
+ },
69
+ },
59
70
  ];
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ module.exports = [
4
+ {
5
+ method: 'GET',
6
+ path: '/content-api/permissions',
7
+ handler: 'content-api.getPermissions',
8
+ config: {
9
+ policies: ['admin::isAuthenticatedAdmin'],
10
+ },
11
+ },
12
+ {
13
+ method: 'GET',
14
+ path: '/content-api/routes',
15
+ handler: 'content-api.getRoutes',
16
+ config: {
17
+ policies: ['admin::isAuthenticatedAdmin'],
18
+ },
19
+ },
20
+ ];
@@ -7,6 +7,7 @@ const users = require('./users');
7
7
  const roles = require('./roles');
8
8
  const webhooks = require('./webhooks');
9
9
  const apiTokens = require('./api-tokens');
10
+ const contentApi = require('./content-api');
10
11
 
11
12
  module.exports = [
12
13
  ...admin,
@@ -16,4 +17,5 @@ module.exports = [
16
17
  ...roles,
17
18
  ...webhooks,
18
19
  ...apiTokens,
20
+ ...contentApi,
19
21
  ];