// # Configuration API // RESTful API for browsing the configuration const Promise = require('bluebird'), {isPlainObject} = require('lodash'), urlService = require('../services/url'), models = require('../models'), config = require('../config'), labs = require('../services/labs'), settingsCache = require('../services/settings/cache'), ghostVersion = require('../lib/ghost-version'); let configuration; function fetchAvailableTimezones() { const timezones = require('../data/timezones.json'); return timezones; } function getAboutConfig() { return { version: ghostVersion.full, environment: config.get('env'), database: config.get('database').client, mail: isPlainObject(config.get('mail')) ? config.get('mail').transport : '' }; } function getBaseConfig() { return { useGravatar: !config.isPrivacyDisabled('useGravatar'), publicAPI: labs.isSet('publicAPI'), blogUrl: urlService.utils.urlFor('home', true), blogTitle: settingsCache.get('title'), clientExtensions: config.get('clientExtensions'), enableDeveloperExperiments: config.get('enableDeveloperExperiments') }; } /** * ## Configuration API Methods * * We need to load the client credentials dynamically. * * **See:** [API Methods](constants.js.html#api%20methods) */ configuration = { /** * Always returns {configuration: []} * Sometimes the array contains configuration items * @param {Object} options * @returns {Promise} */ read: function read(options) { options = options || {}; if (!options.key) { return models.Client.findOne({slug: 'ghost-admin'}) .then((ghostAdmin) => { const configuration = getBaseConfig(); configuration.clientId = ghostAdmin.get('slug'); configuration.clientSecret = ghostAdmin.get('secret'); return {configuration: [configuration]}; }); } if (options.key === 'about') { return Promise.resolve({configuration: [getAboutConfig()]}); } // Timezone endpoint if (options.key === 'timezones') { return Promise.resolve({configuration: [fetchAvailableTimezones()]}); } return Promise.resolve({configuration: []}); } }; module.exports = configuration;