mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-22 10:21:36 +03:00
0bf1542bc6
refs #10790 refs #9528 - The settings service was designed to handle more settings then just routing, but till this day there wasn't anything else added. As routes.yaml is only being used by frontend router so conceptually it fits better to have this code in frontend, so that it doesn't have to reach out to server - The code left in server settings is the one that interacts with the database `settings` table and only partially provides information to frontend. That part is known as 'settings cache' and will be accessed through API controllers.
46 lines
1.9 KiB
JavaScript
46 lines
1.9 KiB
JavaScript
const fs = require('fs-extra'),
|
|
Promise = require('bluebird'),
|
|
path = require('path'),
|
|
debug = require('ghost-ignition').debug('services:settings:ensure-settings'),
|
|
common = require('../../../server/lib/common'),
|
|
config = require('../../../server/config');
|
|
|
|
/**
|
|
* Makes sure that all supported settings files are in the
|
|
* `/content/settings` directory. If not, copy the default files
|
|
* over.
|
|
* @param {Array} knownSettings
|
|
* @returns {Promise}
|
|
* @description Reads the `/settings` folder of the content path and makes
|
|
* sure that the associated yaml file for each setting exists. If it doesn't
|
|
* copy the default yaml file over.
|
|
*/
|
|
module.exports = function ensureSettingsFiles(knownSettings) {
|
|
const contentPath = config.getContentPath('settings'),
|
|
defaultSettingsPath = config.get('paths').defaultSettings;
|
|
|
|
return Promise.each(knownSettings, function (setting) {
|
|
const fileName = `${setting}.yaml`,
|
|
defaultFileName = `default-${fileName}`,
|
|
filePath = path.join(contentPath, fileName);
|
|
|
|
return fs.readFile(filePath, 'utf8')
|
|
.catch({code: 'ENOENT'}, () => {
|
|
// CASE: file doesn't exist, copy it from our defaults
|
|
return fs.copy(
|
|
path.join(defaultSettingsPath, defaultFileName),
|
|
path.join(contentPath, fileName)
|
|
).then(() => {
|
|
debug(`'${defaultFileName}' copied to ${contentPath}.`);
|
|
});
|
|
}).catch((error) => {
|
|
// CASE: we might have a permission error, as we can't access the directory
|
|
throw new common.errors.GhostError({
|
|
message: common.i18n.t('errors.services.settings.ensureSettings', {path: contentPath}),
|
|
err: error,
|
|
context: error.path
|
|
});
|
|
});
|
|
});
|
|
};
|