mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-22 10:21:36 +03:00
bd597db829
- This is part of the quest to separate the frontend and server & get rid of all the places where there are cross-requires - At the moment the settings cache is one big shared cache used by the frontend and server liberally - This change doesn't really solve the fundamental problems, as we still depend on events, and requires from inside frontend - However it allows us to control the misuse slightly better by getting rid of restricted requires and turning on that eslint ruleset
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
/**
|
|
* Settings Lib
|
|
* A collection of utilities for handling settings including a cache
|
|
*/
|
|
const events = require('../../lib/common/events');
|
|
const models = require('../../models');
|
|
const SettingsCache = require('../../../shared/settings-cache');
|
|
|
|
// The string returned when a setting is set as write-only
|
|
const obfuscatedSetting = '••••••••';
|
|
|
|
// The function used to decide whether a setting is write-only
|
|
function isSecretSetting(setting) {
|
|
return /secret/.test(setting.key);
|
|
}
|
|
|
|
// The function that obfuscates a write-only setting
|
|
function hideValueIfSecret(setting) {
|
|
if (setting.value && isSecretSetting(setting)) {
|
|
return {...setting, value: obfuscatedSetting};
|
|
}
|
|
return setting;
|
|
}
|
|
|
|
module.exports = {
|
|
/**
|
|
* Initialise the cache, used in boot and in testing
|
|
*/
|
|
async init() {
|
|
const settingsCollection = await models.Settings.populateDefaults();
|
|
SettingsCache.init(events, settingsCollection);
|
|
},
|
|
|
|
/**
|
|
* Shutdown the cache, used in force boot during testing
|
|
*/
|
|
shutdown() {
|
|
SettingsCache.reset(events);
|
|
},
|
|
|
|
/**
|
|
* Handles syncronization of routes.yaml hash loaded in the frontend with
|
|
* the value stored in the settings table.
|
|
* getRoutesHash is a function to allow keeping "frontend" decoupled from settings
|
|
*
|
|
* @param {function} getRoutesHash function fetching currently loaded routes file hash
|
|
*/
|
|
async syncRoutesHash(getRoutesHash) {
|
|
const currentRoutesHash = await getRoutesHash();
|
|
|
|
if (SettingsCache.get('routes_hash') !== currentRoutesHash) {
|
|
return await models.Settings.edit([{
|
|
key: 'routes_hash',
|
|
value: currentRoutesHash
|
|
}], {context: {internal: true}});
|
|
}
|
|
},
|
|
|
|
obfuscatedSetting,
|
|
isSecretSetting,
|
|
hideValueIfSecret
|
|
};
|