Skip to content

Commit 75634a3

Browse files
committed
fix: recursively santize all config except for content_manager_configuration items
1 parent e4e3825 commit 75634a3

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

server/config/type.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,10 @@ const ConfigType = class ConfigType {
109109
if (softImport && !force) return false;
110110

111111
// Format JSON fields.
112-
configContent = sanitizeConfig(configContent);
112+
configContent = sanitizeConfig({
113+
config: configContent,
114+
configName,
115+
});
113116
const query = { ...configContent };
114117
this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field]));
115118

@@ -120,8 +123,8 @@ const ConfigType = class ConfigType {
120123
// Delete/create relations.
121124
await Promise.all(this.relations.map(async ({ queryString, relationName, parentName, relationSortFields }) => {
122125
const relationQueryApi = strapi.query(queryString);
123-
existingConfig = sanitizeConfig(existingConfig, relationName, relationSortFields);
124-
configContent = sanitizeConfig(configContent, relationName, relationSortFields);
126+
existingConfig = sanitizeConfig({ config: existingConfig, configName, relation: relationName, relationSortFields });
127+
configContent = sanitizeConfig({ config: configContent, configName, relation: relationName, relationSortFields });
125128

126129
const configToAdd = difference(configContent[relationName], existingConfig[relationName], relationSortFields);
127130
const configToDelete = difference(existingConfig[relationName], configContent[relationName], relationSortFields);
@@ -201,7 +204,7 @@ const ConfigType = class ConfigType {
201204
});
202205
const configs = {};
203206

204-
await Promise.all(Object.values(AllConfig).map(async (config) => {
207+
await Promise.all(Object.entries(AllConfig).map(async ([configName, config]) => {
205208
const combinedUid = getCombinedUid(this.uidKeys, config);
206209
const combinedUidWhereFilter = getCombinedUidWhereFilter(this.uidKeys, config);
207210

@@ -214,13 +217,13 @@ const ConfigType = class ConfigType {
214217
const shouldExclude = !isEmpty(strapi.config.get('plugin.config-sync.excludedConfig').filter((option) => `${this.configPrefix}.${combinedUid}`.startsWith(option)));
215218
if (shouldExclude) return;
216219

217-
const formattedConfig = { ...sanitizeConfig(config) };
220+
const formattedConfig = { ...sanitizeConfig({ config, configName }) };
218221
await Promise.all(this.relations.map(async ({ queryString, relationName, relationSortFields, parentName }) => {
219222
const relations = await noLimit(strapi.query(queryString), {
220223
where: { [parentName]: combinedUidWhereFilter },
221224
});
222225

223-
relations.map((relation) => sanitizeConfig(relation));
226+
relations.map((relation) => sanitizeConfig({ config: relation, configName: relationName }));
224227
relationSortFields.map((sortField) => {
225228
relations.sort(dynamicSort(sortField));
226229
});

server/utils/index.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ const dynamicSort = (property) => {
4646
};
4747
};
4848

49-
const sanitizeConfig = (config, relation, relationSortFields) => {
49+
const sanitizeConfig = ({
50+
config,
51+
relation,
52+
relationSortFields,
53+
configName,
54+
}) => {
5055
delete config._id;
5156
delete config.id;
5257
delete config.updatedAt;
@@ -74,6 +79,26 @@ const sanitizeConfig = (config, relation, relationSortFields) => {
7479
config[relation] = formattedRelations;
7580
}
7681

82+
// We recursively sanitize the config to remove environment specific data.
83+
// Except for the plugin_content_manager_configuration.
84+
// This is because that stores the "edit the view" data which includes only configuration, not content.
85+
if (configName && !configName.startsWith('plugin_content_manager_configuration_')) {
86+
const recursiveSanitizeConfig = (recursivedSanitizedConfig) => {
87+
delete recursivedSanitizedConfig._id;
88+
delete recursivedSanitizedConfig.id;
89+
delete recursivedSanitizedConfig.updatedAt;
90+
delete recursivedSanitizedConfig.createdAt;
91+
92+
Object.keys(recursivedSanitizedConfig).map((key, index) => {
93+
if (recursivedSanitizedConfig[key] && typeof recursivedSanitizedConfig[key] === "object") {
94+
recursiveSanitizeConfig(recursivedSanitizedConfig[key]);
95+
}
96+
});
97+
};
98+
99+
recursiveSanitizeConfig(config);
100+
}
101+
77102
return config;
78103
};
79104

0 commit comments

Comments
 (0)