@strapi/admin 4.8.2 → 4.9.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.
- package/admin/src/content-manager/components/DynamicZone/utils/select.js +1 -1
- package/admin/src/content-manager/components/FieldComponent/utils/select.js +2 -1
- package/admin/src/content-manager/components/Inputs/utils/getInputType.js +1 -1
- package/admin/src/content-manager/components/Inputs/utils/select.js +1 -1
- package/admin/src/content-manager/hooks/useContentTypeLayout/index.js +1 -2
- package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +4 -1
- package/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js +1 -2
- package/admin/src/content-manager/pages/EditSettingsView/init.js +3 -1
- package/admin/src/content-manager/pages/EditSettingsView/utils/createPossibleMainFieldsForModelsAndComponents.js +2 -4
- package/admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js +1 -1
- package/admin/src/content-manager/pages/EditView/utils/createAttributesLayout.js +2 -1
- package/admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js +2 -1
- package/admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js +1 -1
- package/admin/src/content-manager/utils/createDefaultForm.js +2 -2
- package/admin/src/content-manager/utils/formatLayoutToApi.js +2 -1
- package/admin/src/content-manager/utils/getFieldName.js +1 -1
- package/admin/src/content-manager/utils/mergeMetasWithSchema.js +1 -1
- package/admin/src/content-manager/utils/paths.js +1 -1
- package/admin/src/content-manager/utils/removePasswordFieldsFromData.js +1 -1
- package/admin/src/hooks/useRegenerate/index.js +12 -7
- package/admin/src/hooks/useSettingsForm/index.js +3 -3
- package/admin/src/hooks/useSettingsForm/reducer.js +3 -1
- package/admin/src/hooks/useSettingsMenu/reducer.js +1 -1
- package/admin/src/pages/AuthPage/reducer.js +1 -1
- package/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js +4 -0
- package/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js +5 -3
- package/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js +7 -5
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js +1 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/transformPermissionsData.js +6 -8
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/createDefaultConditionsForm.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/generateCheckboxesActions.js +2 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/utils/getRowLabelCheckboxeState.js +2 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/getRowLabelCheckboxesState.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/reducer.js +6 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultCTFormFromLayout.js +5 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultPluginsFormFromLayout.js +1 -2
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/formatContentTypesPermissionToAPI.js +2 -2
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/updateConditionsToFalse.js +4 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/updateValues.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/formatActions.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/utils/createArrayOfValues.js +2 -1
- package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js +41 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js +53 -9
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js +1 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js +27 -5
- package/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js +2 -2
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/utils/formatData.js +1 -7
- package/admin/src/permissions/index.js +1 -1
- package/admin/src/translations/en.json +1 -0
- package/admin/src/utils/getAttributesToDisplay.js +2 -4
- package/admin/src/utils/getExistingActions.js +1 -3
- package/admin/src/utils/sortLinks.js +1 -1
- package/build/{8580.0aa21940.chunk.js → 2263.4c5916f9.chunk.js} +61 -61
- package/build/5563.aa832e5f.chunk.js +30 -0
- package/build/6985.66cca29c.chunk.js +1 -0
- package/build/7259.e6ef3b8e.chunk.js +1 -0
- package/build/{7112.2bf13da3.chunk.js → 9505.dbe702ab.chunk.js} +6 -6
- package/build/Admin-authenticatedApp.cb754f73.chunk.js +79 -0
- package/build/{Admin_profilePage.d2a8f9ab.chunk.js → Admin_profilePage.76afeca0.chunk.js} +1 -1
- package/build/{Admin_settingsPage.7450acfc.chunk.js → Admin_settingsPage.0aa4fcdc.chunk.js} +2 -2
- package/build/admin-app.50584489.chunk.js +112 -0
- package/build/admin-edit-roles-page.cf543488.chunk.js +216 -0
- package/build/admin-edit-users.31c20712.chunk.js +10 -0
- package/build/admin-roles-list.489c501f.chunk.js +2 -0
- package/build/{admin-users.af8c3123.chunk.js → admin-users.3e111a7d.chunk.js} +1 -1
- package/build/{api-tokens-create-page.4328b852.chunk.js → api-tokens-create-page.2a6e22bd.chunk.js} +1 -1
- package/build/{api-tokens-edit-page.bce5050f.chunk.js → api-tokens-edit-page.fa38cd63.chunk.js} +1 -1
- package/build/content-manager.f8b9710b.chunk.js +1139 -0
- package/build/content-type-builder.0f5dbcf1.chunk.js +126 -0
- package/build/{en-json.01a88a30.chunk.js → en-json.b052667a.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/main.7fa3d343.js +3783 -0
- package/build/{runtime~main.05f8f4a1.js → runtime~main.03d11c09.js} +2 -2
- package/build/sso-settings-page.272b87c8.chunk.js +1 -0
- package/build/transfer-tokens-list-page.3c9b0280.chunk.js +16 -0
- package/build/users-advanced-settings-page.1d3c14c7.chunk.js +1 -0
- package/build/{users-email-settings-page.a3c80419.chunk.js → users-email-settings-page.e8db68c4.chunk.js} +1 -1
- package/build/users-providers-settings-page.14cac425.chunk.js +1 -0
- package/build/users-roles-settings-page.2ea4de84.chunk.js +30 -0
- package/build/{webhook-edit-page.a2a2b7bb.chunk.js → webhook-edit-page.329141a5.chunk.js} +3 -3
- package/ee/server/bootstrap.js +3 -0
- package/ee/server/utils/persisted-tables.js +49 -0
- package/package.json +11 -11
- package/server/controllers/transfer/runner.js +4 -2
- package/server/middlewares/data-transfer.js +4 -1
- package/server/routes/transfer.js +13 -4
- package/server/services/constants.js +4 -0
- package/server/services/permission/permissions-manager/sanitize.js +2 -0
- package/server/services/transfer/permission.js +1 -1
- package/server/services/transfer/token.js +33 -31
- package/server/validation/transfer/token.js +10 -2
- package/build/2637.679b590b.chunk.js +0 -1
- package/build/4649.33220ac3.chunk.js +0 -30
- package/build/7259.3675c199.chunk.js +0 -1
- package/build/Admin-authenticatedApp.26f0eff6.chunk.js +0 -79
- package/build/admin-app.c0729915.chunk.js +0 -112
- package/build/admin-edit-roles-page.3b196317.chunk.js +0 -216
- package/build/admin-edit-users.af3b0f15.chunk.js +0 -10
- package/build/admin-roles-list.0ad504a7.chunk.js +0 -2
- package/build/content-manager.b2578b87.chunk.js +0 -1139
- package/build/content-type-builder.a93f97ba.chunk.js +0 -126
- package/build/main.ed856941.js +0 -3809
- package/build/sso-settings-page.5a8588ef.chunk.js +0 -1
- package/build/transfer-tokens-list-page.ce37354b.chunk.js +0 -16
- package/build/users-advanced-settings-page.c0cae03a.chunk.js +0 -1
- package/build/users-providers-settings-page.5f86e45c.chunk.js +0 -1
- package/build/users-roles-settings-page.b02986df.chunk.js +0 -30
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
useGuidedTour,
|
|
14
14
|
useRBAC,
|
|
15
15
|
useFetchClient,
|
|
16
|
+
useAPIErrorHandler,
|
|
16
17
|
} from '@strapi/helper-plugin';
|
|
17
18
|
import { ContentLayout, Main, Flex } from '@strapi/design-system';
|
|
18
19
|
import { formatAPIErrors } from '../../../../../utils';
|
|
@@ -52,6 +53,8 @@ const TransferTokenCreateView = () => {
|
|
|
52
53
|
|
|
53
54
|
const isCreating = id === 'create';
|
|
54
55
|
|
|
56
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
57
|
+
|
|
55
58
|
useEffect(() => {
|
|
56
59
|
trackUsageRef.current(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {
|
|
57
60
|
tokenType: TRANSFER_TOKEN_TYPE,
|
|
@@ -73,11 +76,22 @@ const TransferTokenCreateView = () => {
|
|
|
73
76
|
},
|
|
74
77
|
{
|
|
75
78
|
enabled: !isCreating && !transferToken,
|
|
76
|
-
onError() {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
onError(err) {
|
|
80
|
+
if (err.response.data.error.details?.code === 'INVALID_TOKEN_SALT') {
|
|
81
|
+
toggleNotification({
|
|
82
|
+
type: 'warning',
|
|
83
|
+
message: {
|
|
84
|
+
id: 'notification.error.invalid.configuration',
|
|
85
|
+
defaultMessage:
|
|
86
|
+
'You have an invalid configuration, check your server log for more information.',
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
} else {
|
|
90
|
+
toggleNotification({
|
|
91
|
+
type: 'warning',
|
|
92
|
+
message: formatAPIError(err),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
81
95
|
},
|
|
82
96
|
}
|
|
83
97
|
);
|
|
@@ -92,6 +106,8 @@ const TransferTokenCreateView = () => {
|
|
|
92
106
|
? parseInt(body.lifespan, 10)
|
|
93
107
|
: null;
|
|
94
108
|
|
|
109
|
+
const permissions = body.permissions.split('-');
|
|
110
|
+
|
|
95
111
|
try {
|
|
96
112
|
const {
|
|
97
113
|
data: { data: response },
|
|
@@ -99,13 +115,12 @@ const TransferTokenCreateView = () => {
|
|
|
99
115
|
? await post(`/admin/transfer/tokens`, {
|
|
100
116
|
...body,
|
|
101
117
|
lifespan: lifespanVal,
|
|
102
|
-
permissions
|
|
118
|
+
permissions,
|
|
103
119
|
})
|
|
104
120
|
: await put(`/admin/transfer/tokens/${id}`, {
|
|
105
121
|
name: body.name,
|
|
106
122
|
description: body.description,
|
|
107
|
-
|
|
108
|
-
permissions: ['push'],
|
|
123
|
+
permissions,
|
|
109
124
|
});
|
|
110
125
|
|
|
111
126
|
unlockApp();
|
|
@@ -132,7 +147,7 @@ const TransferTokenCreateView = () => {
|
|
|
132
147
|
});
|
|
133
148
|
|
|
134
149
|
trackUsageRef.current(isCreating ? 'didCreateToken' : 'didEditToken', {
|
|
135
|
-
type: transferToken?.
|
|
150
|
+
type: transferToken?.permissions,
|
|
136
151
|
tokenType: TRANSFER_TOKEN_TYPE,
|
|
137
152
|
});
|
|
138
153
|
} catch (err) {
|
|
@@ -144,6 +159,15 @@ const TransferTokenCreateView = () => {
|
|
|
144
159
|
type: 'warning',
|
|
145
160
|
message: err.response.data.message || 'notification.error.tokennamenotunique',
|
|
146
161
|
});
|
|
162
|
+
} else if (err?.response?.data?.error?.details?.code === 'INVALID_TOKEN_SALT') {
|
|
163
|
+
toggleNotification({
|
|
164
|
+
type: 'warning',
|
|
165
|
+
message: {
|
|
166
|
+
id: 'notification.error.invalid.configuration',
|
|
167
|
+
defaultMessage:
|
|
168
|
+
'You have an invalid configuration, check your server log for more information.',
|
|
169
|
+
},
|
|
170
|
+
});
|
|
147
171
|
} else {
|
|
148
172
|
toggleNotification({
|
|
149
173
|
type: 'warning',
|
|
@@ -161,6 +185,24 @@ const TransferTokenCreateView = () => {
|
|
|
161
185
|
return <LoadingView transferTokenName={transferToken?.name} />;
|
|
162
186
|
}
|
|
163
187
|
|
|
188
|
+
const handleErrorRegenerate = (err) => {
|
|
189
|
+
if (err?.response?.data?.error?.details?.code === 'INVALID_TOKEN_SALT') {
|
|
190
|
+
toggleNotification({
|
|
191
|
+
type: 'warning',
|
|
192
|
+
message: {
|
|
193
|
+
id: 'notification.error.invalid.configuration',
|
|
194
|
+
defaultMessage:
|
|
195
|
+
'You have an invalid configuration, check your server log for more information.',
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
} else {
|
|
199
|
+
toggleNotification({
|
|
200
|
+
type: 'warning',
|
|
201
|
+
message: formatAPIError(err),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
164
206
|
return (
|
|
165
207
|
<Main>
|
|
166
208
|
<SettingsPageTitle name="Transfer Tokens" />
|
|
@@ -173,6 +215,7 @@ const TransferTokenCreateView = () => {
|
|
|
173
215
|
lifespan: transferToken?.lifespan
|
|
174
216
|
? transferToken.lifespan.toString()
|
|
175
217
|
: transferToken?.lifespan,
|
|
218
|
+
permissions: transferToken?.permissions.join('-'),
|
|
176
219
|
}}
|
|
177
220
|
enableReinitialize
|
|
178
221
|
onSubmit={(body, actions) => handleSubmit(body, actions)}
|
|
@@ -192,6 +235,7 @@ const TransferTokenCreateView = () => {
|
|
|
192
235
|
canRegenerate={canRegenerate}
|
|
193
236
|
isSubmitting={isSubmitting}
|
|
194
237
|
regenerateUrl="/admin/transfer/tokens/"
|
|
238
|
+
onErrorRegenerate={handleErrorRegenerate}
|
|
195
239
|
/>
|
|
196
240
|
<ContentLayout>
|
|
197
241
|
<Flex direction="column" alignItems="stretch" gap={6}>
|
|
@@ -5,6 +5,7 @@ const schema = yup.object().shape({
|
|
|
5
5
|
name: yup.string(translatedErrors.string).max(100).required(translatedErrors.required),
|
|
6
6
|
description: yup.string().nullable(),
|
|
7
7
|
lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),
|
|
8
|
+
permissions: yup.string(translatedErrors.string).required(translatedErrors.required),
|
|
8
9
|
});
|
|
9
10
|
|
|
10
11
|
export default schema;
|
|
@@ -77,11 +77,24 @@ const TransferTokenListView = () => {
|
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
enabled: canRead,
|
|
80
|
-
onError() {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
onError(err) {
|
|
81
|
+
console.log('error', err);
|
|
82
|
+
|
|
83
|
+
if (err?.response?.data?.error?.details?.code === 'INVALID_TOKEN_SALT') {
|
|
84
|
+
toggleNotification({
|
|
85
|
+
type: 'warning',
|
|
86
|
+
message: {
|
|
87
|
+
id: 'notification.error.invalid.configuration',
|
|
88
|
+
defaultMessage:
|
|
89
|
+
'You have an invalid configuration, check your server log for more information.',
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
} else {
|
|
93
|
+
toggleNotification({
|
|
94
|
+
type: 'warning',
|
|
95
|
+
message: { id: 'notification.error', defaultMessage: 'An error occured' },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
85
98
|
},
|
|
86
99
|
}
|
|
87
100
|
);
|
|
@@ -101,6 +114,15 @@ const TransferTokenListView = () => {
|
|
|
101
114
|
onError(err) {
|
|
102
115
|
if (err?.response?.data?.data) {
|
|
103
116
|
toggleNotification({ type: 'warning', message: err.response.data.data });
|
|
117
|
+
} else if (err?.response?.data?.error?.details?.code === 'INVALID_TOKEN_SALT') {
|
|
118
|
+
toggleNotification({
|
|
119
|
+
type: 'warning',
|
|
120
|
+
message: {
|
|
121
|
+
id: 'notification.error.invalid.configuration',
|
|
122
|
+
defaultMessage:
|
|
123
|
+
'You have an invalid configuration, check your server log for more information.',
|
|
124
|
+
},
|
|
125
|
+
});
|
|
104
126
|
} else {
|
|
105
127
|
toggleNotification({
|
|
106
128
|
type: 'warning',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useMemo } from 'react';
|
|
2
2
|
import { useRBAC, LoadingIndicatorPage, useNotification } from '@strapi/helper-plugin';
|
|
3
3
|
import { Redirect, useLocation } from 'react-router-dom';
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
import adminPermissions from '../../../../../permissions';
|
|
6
6
|
import EditPage from '../EditPage';
|
|
7
7
|
|
|
@@ -19,7 +19,7 @@ const ProtectedEditPage = () => {
|
|
|
19
19
|
allowedActions: { canRead, canUpdate },
|
|
20
20
|
} = useRBAC(permissions);
|
|
21
21
|
const { state } = useLocation();
|
|
22
|
-
const from =
|
|
22
|
+
const from = state?.from ?? '/';
|
|
23
23
|
|
|
24
24
|
useEffect(() => {
|
|
25
25
|
if (!isLoading) {
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import { set } from 'lodash';
|
|
2
|
-
|
|
3
1
|
const cleanData = (data) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
set(webhooks, 'headers', unformatHeaders(data.headers));
|
|
7
|
-
|
|
8
|
-
return webhooks;
|
|
2
|
+
return { ...data, headers: unformatHeaders(data.headers) };
|
|
9
3
|
};
|
|
10
4
|
|
|
11
5
|
const unformatHeaders = (headers) => {
|
|
@@ -878,6 +878,7 @@
|
|
|
878
878
|
"notification.success.transfertokencreated": "Transfer Token successfully created",
|
|
879
879
|
"notification.success.transfertokenedited": "Transfer Token successfully edited",
|
|
880
880
|
"notification.error.tokennamenotunique": "Name already assigned to another token",
|
|
881
|
+
"notification.error.invalid.configuration": "You have an invalid configuration, check your server log for more information.",
|
|
881
882
|
"notification.version.update.message": "A new version of Strapi is available!",
|
|
882
883
|
"notification.warning.title": "Warning:",
|
|
883
884
|
"notification.warning.404": "404 - Not found",
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { get } from 'lodash';
|
|
2
|
-
|
|
3
1
|
const getAttributesToDisplay = (contentType) => {
|
|
4
|
-
const timestamps =
|
|
2
|
+
const timestamps = contentType?.options?.timestamps;
|
|
5
3
|
|
|
6
4
|
// Sometimes timestamps is false
|
|
7
5
|
let timestampsArray = Array.isArray(timestamps) ? timestamps : [];
|
|
8
6
|
const idsAttributes = ['id', '_id']; // For both SQL and mongo
|
|
9
7
|
const unwritableAttributes = [...idsAttributes, ...timestampsArray, 'publishedAt'];
|
|
10
|
-
const schemaAttributes =
|
|
8
|
+
const schemaAttributes = contentType?.attributes ?? {};
|
|
11
9
|
|
|
12
10
|
return Object.keys(schemaAttributes).reduce((acc, current) => {
|
|
13
11
|
if (!unwritableAttributes.includes(current)) {
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { get } from 'lodash';
|
|
2
|
-
|
|
3
1
|
const getExistingActions = (permissions) => {
|
|
4
2
|
return Array.from(
|
|
5
3
|
new Set(
|
|
@@ -23,7 +21,7 @@ const getExistingActions = (permissions) => {
|
|
|
23
21
|
...acc,
|
|
24
22
|
...getActionsPermission([
|
|
25
23
|
...Object.values(current[1].attributes || {}),
|
|
26
|
-
|
|
24
|
+
current[1]?.contentTypeActions ?? {},
|
|
27
25
|
]),
|
|
28
26
|
];
|
|
29
27
|
}, [])
|