Initial import/export backend
parent
f6f9beb786
commit
2535d76909
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"destination": "extensions/config/files/",
|
||||||
|
"exclude": []
|
||||||
|
}
|
|
@ -2,8 +2,16 @@
|
||||||
"routes": [
|
"routes": [
|
||||||
{
|
{
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"path": "/",
|
"path": "/export",
|
||||||
"handler": "config.index",
|
"handler": "config.export",
|
||||||
|
"config": {
|
||||||
|
"policies": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "GET",
|
||||||
|
"path": "/import",
|
||||||
|
"handler": "config.import",
|
||||||
"config": {
|
"config": {
|
||||||
"policies": []
|
"policies": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* config.js controller
|
* config.js controller
|
||||||
*
|
*
|
||||||
|
@ -14,12 +16,37 @@ module.exports = {
|
||||||
* @return {Object}
|
* @return {Object}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
index: async (ctx) => {
|
export: async (ctx) => {
|
||||||
// Add your own logic here.
|
const coreStoreAPI = strapi.query('core_store');
|
||||||
|
const coreStore = await coreStoreAPI.find({ _limit: -1 });
|
||||||
|
|
||||||
|
Object.values(coreStore).map(async ({ key, value }) => {
|
||||||
|
await strapi.plugins.config.services.config.writeConfigFile(key, value);
|
||||||
|
});
|
||||||
|
|
||||||
// Send 200 `ok`
|
|
||||||
ctx.send({
|
ctx.send({
|
||||||
message: 'ok'
|
message: `Config was successfully exported to ${strapi.plugins.config.config.destination}.`
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
import: async (ctx) => {
|
||||||
|
// Check for existance of the config file destination dir.
|
||||||
|
if (!fs.existsSync(strapi.plugins.config.config.destination)) {
|
||||||
|
ctx.send({
|
||||||
|
message: 'No config files were found.'
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const configFiles = fs.readdirSync(strapi.plugins.config.config.destination);
|
||||||
|
|
||||||
|
configFiles.map((file) => {
|
||||||
|
strapi.plugins.config.services.config.importFromFile(file.slice(0, -5));
|
||||||
|
});
|
||||||
|
|
||||||
|
ctx.send({
|
||||||
|
message: 'Config was successfully imported.'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const util = require('util');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* config.js service
|
* config.js service
|
||||||
*
|
*
|
||||||
|
@ -7,5 +10,46 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
writeConfigFile: async (configName, fileContents) => {
|
||||||
|
await strapi.fs.writePluginFile(
|
||||||
|
'config',
|
||||||
|
`files/${configName}.json`,
|
||||||
|
fileContents
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
readConfigFile: async (configName) => {
|
||||||
|
const readFile = util.promisify(fs.readFile);
|
||||||
|
return await readFile(`${strapi.plugins.config.config.destination}${configName}.json`)
|
||||||
|
.then((data) => {
|
||||||
|
return JSON.parse(data);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
importFromFile: async (configName) => {
|
||||||
|
const coreStoreAPI = strapi.query('core_store');
|
||||||
|
const fileContents = await strapi.plugins.config.services.config.readConfigFile(configName);
|
||||||
|
|
||||||
|
// If there is no corresponding config file we should not try to import.
|
||||||
|
if (!fileContents) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const configExists = await strapi
|
||||||
|
.query('core_store')
|
||||||
|
.findOne({ key: configName });
|
||||||
|
|
||||||
|
if (!configExists) {
|
||||||
|
await coreStoreAPI.create({ key: configName, value: fileContents });
|
||||||
|
} else {
|
||||||
|
await coreStoreAPI.update({ key: configName }, { value: fileContents });
|
||||||
|
}
|
||||||
|
|
||||||
|
return { success: true };
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue