From da10377b3c263d96a46cf9101c202554343d2cd0 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sun, 29 May 2016 16:10:32 +0200 Subject: Rename configuration keys and fix GLOBALS in templates --- application/config/ConfigJson.php | 33 +++++++------- application/config/ConfigManager.php | 83 +++++++++++++++++++++++------------- application/config/ConfigPhp.php | 45 +++++++++++++++++++ 3 files changed, 115 insertions(+), 46 deletions(-) (limited to 'application/config') diff --git a/application/config/ConfigJson.php b/application/config/ConfigJson.php index cbafbf6d..94693c86 100644 --- a/application/config/ConfigJson.php +++ b/application/config/ConfigJson.php @@ -7,30 +7,16 @@ */ class ConfigJson implements ConfigIO { - /** - * The JSON data is wrapped in a PHP file for security purpose. - * This way, even if the file is accessible, credentials and configuration won't be exposed. - * - * @var string PHP start tag and comment tag. - */ - public static $PHP_HEADER; - - public function __construct() - { - // The field can't be initialized directly with concatenation before PHP 5.6. - self::$PHP_HEADER = 'configIO instanceof ConfigPhp && isset(ConfigPhp::$LEGACY_KEYS_MAPPING[$setting])) { + $setting = ConfigPhp::$LEGACY_KEYS_MAPPING[$setting]; + } + $settings = explode('.', $setting); $value = self::getConfig($settings, $this->loadedConfig); if ($value === self::$NOT_FOUND) { @@ -142,6 +147,11 @@ class ConfigManager throw new Exception('Invalid setting key parameter. String expected, got: '. gettype($setting)); } + // During the ConfigIO transition, map legacy settings to the new ones. + if ($this->configIO instanceof ConfigPhp && isset(ConfigPhp::$LEGACY_KEYS_MAPPING[$setting])) { + $setting = ConfigPhp::$LEGACY_KEYS_MAPPING[$setting]; + } + $settings = explode('.', $setting); self::setConfig($settings, $value, $this->loadedConfig); if ($write) { @@ -160,6 +170,11 @@ class ConfigManager */ public function exists($setting) { + // During the ConfigIO transition, map legacy settings to the new ones. + if ($this->configIO instanceof ConfigPhp && isset(ConfigPhp::$LEGACY_KEYS_MAPPING[$setting])) { + $setting = ConfigPhp::$LEGACY_KEYS_MAPPING[$setting]; + } + $settings = explode('.', $setting); $value = self::getConfig($settings, $this->loadedConfig); if ($value === self::$NOT_FOUND) { @@ -183,8 +198,15 @@ class ConfigManager { // These fields are required in configuration. $mandatoryFields = array( - 'login', 'hash', 'salt', 'timezone', 'title', 'titleLink', - 'redirector', 'disablesessionprotection', 'privateLinkByDefault' + 'credentials.login', + 'credentials.hash', + 'credentials.salt', + 'security.session_protection_disabled', + 'general.timezone', + 'general.title', + 'general.header_link', + 'general.default_private_links', + 'extras.redirector', ); // Only logged in user can alter config. @@ -265,75 +287,78 @@ class ConfigManager protected function setDefaultValues() { // Data subdirectory - $this->setEmpty('config.DATADIR', 'data'); + $this->setEmpty('path.data_dir', 'data'); // Main configuration file - $this->setEmpty('config.CONFIG_FILE', 'data/config.php'); + $this->setEmpty('path.config', 'data/config.php'); // Link datastore - $this->setEmpty('config.DATASTORE', 'data/datastore.php'); + $this->setEmpty('path.datastore', 'data/datastore.php'); // Banned IPs - $this->setEmpty('config.IPBANS_FILENAME', 'data/ipbans.php'); + $this->setEmpty('path.ban_file', 'data/ipbans.php'); // Processed updates file. - $this->setEmpty('config.UPDATES_FILE', 'data/updates.txt'); + $this->setEmpty('path.updates', 'data/updates.txt'); // Access log - $this->setEmpty('config.LOG_FILE', 'data/log.txt'); + $this->setEmpty('path.log', 'data/log.txt'); // For updates check of Shaarli - $this->setEmpty('config.UPDATECHECK_FILENAME', 'data/lastupdatecheck.txt'); + $this->setEmpty('path.update_check', 'data/lastupdatecheck.txt'); // Set ENABLE_UPDATECHECK to disabled by default. - $this->setEmpty('config.ENABLE_UPDATECHECK', false); + $this->setEmpty('general.check_updates', false); // RainTPL cache directory (keep the trailing slash!) - $this->setEmpty('config.RAINTPL_TMP', 'tmp/'); + $this->setEmpty('path.raintpl_tmp', 'tmp/'); // Raintpl template directory (keep the trailing slash!) - $this->setEmpty('config.RAINTPL_TPL', 'tpl/'); + $this->setEmpty('path.raintpl_tpl', 'tpl/'); // Thumbnail cache directory - $this->setEmpty('config.CACHEDIR', 'cache'); + $this->setEmpty('path.thumbnails_cache', 'cache'); // Atom & RSS feed cache directory - $this->setEmpty('config.PAGECACHE', 'pagecache'); + $this->setEmpty('path.page_cache', 'pagecache'); // Ban IP after this many failures - $this->setEmpty('config.BAN_AFTER', 4); + $this->setEmpty('security.ban_after', 4); // Ban duration for IP address after login failures (in seconds) - $this->setEmpty('config.BAN_DURATION', 1800); + $this->setEmpty('security.ban_after', 1800); // Feed options // Enable RSS permalinks by default. // This corresponds to the default behavior of shaarli before this was added as an option. - $this->setEmpty('config.ENABLE_RSS_PERMALINKS', true); + $this->setEmpty('general.rss_permalinks', true); // If true, an extra "ATOM feed" button will be displayed in the toolbar - $this->setEmpty('config.SHOW_ATOM', false); + $this->setEmpty('extras.show_atom', false); // Link display options - $this->setEmpty('config.HIDE_PUBLIC_LINKS', false); - $this->setEmpty('config.HIDE_TIMESTAMPS', false); - $this->setEmpty('config.LINKS_PER_PAGE', 20); + $this->setEmpty('extras.hide_public_links', false); + $this->setEmpty('extras.hide_timestamps', false); + $this->setEmpty('general.links_per_page', 20); + + // Private checkbox is checked by default + $this->setEmpty('general.default_private_links', false); // Open Shaarli (true): anyone can add/edit/delete links without having to login - $this->setEmpty('config.OPEN_SHAARLI', false); + $this->setEmpty('extras.open_shaarli', false); // Thumbnails // Display thumbnails in links - $this->setEmpty('config.ENABLE_THUMBNAILS', true); + $this->setEmpty('general.enable_thumbnails', true); // Store thumbnails in a local cache - $this->setEmpty('config.ENABLE_LOCALCACHE', true); + $this->setEmpty('general.enable_localcache', true); // Update check frequency for Shaarli. 86400 seconds=24 hours - $this->setEmpty('config.UPDATECHECK_BRANCH', 'stable'); - $this->setEmpty('config.UPDATECHECK_INTERVAL', 86400); + $this->setEmpty('general.check_updates_branch', 'stable'); + $this->setEmpty('general.check_updates_interval', 86400); - $this->setEmpty('redirector', ''); - $this->setEmpty('config.REDIRECTOR_URLENCODE', true); + $this->setEmpty('extras.redirector', ''); + $this->setEmpty('extras.redirector_encode_url', true); // Enabled plugins. - $this->setEmpty('config.ENABLED_PLUGINS', array('qrcode')); + $this->setEmpty('general.enabled_plugins', array('qrcode')); // Initialize plugin parameters array. $this->setEmpty('plugins', array()); diff --git a/application/config/ConfigPhp.php b/application/config/ConfigPhp.php index f99073af..b122f4f1 100644 --- a/application/config/ConfigPhp.php +++ b/application/config/ConfigPhp.php @@ -23,6 +23,51 @@ class ConfigPhp implements ConfigIO 'privateLinkByDefault', ); + /** + * Map legacy config keys with the new ones. + * If ConfigPhp is used, getting will actually look for . + * The Updater will use this array to transform keys when switching to JSON. + * + * @var array current key => legacy key. + */ + public static $LEGACY_KEYS_MAPPING = array( + 'credentials.login' => 'login', + 'credentials.hash' => 'hash', + 'credentials.salt' => 'salt', + 'path.data_dir' => 'config.DATADIR', + 'path.config' => 'config.CONFIG_FILE', + 'path.datastore' => 'config.DATASTORE', + 'path.updates' => 'config.UPDATES_FILE', + 'path.log' => 'config.LOG_FILE', + 'path.update_check' => 'config.UPDATECHECK_FILENAME', + 'path.raintpl_tpl' => 'config.RAINTPL_TPL', + 'path.raintpl_tmp' => 'config.RAINTPL_TMP', + 'path.thumbnails_cache' => 'config.CACHEDIR', + 'path.page_cache' => 'config.PAGECACHE', + 'path.ban_file' => 'config.IPBANS_FILENAME', + 'security.session_protection_disabled' => 'disablesessionprotection', + 'security.ban_after' => 'config.BAN_AFTER', + 'security.ban_duration' => 'config.BAN_DURATION', + 'general.title' => 'title', + 'general.timezone' => 'timezone', + 'general.header_link' => 'titleLink', + 'general.check_updates' => 'config.ENABLE_UPDATECHECK', + 'general.check_updates_branch' => 'config.UPDATECHECK_BRANCH', + 'general.check_updates_interval' => 'config.UPDATECHECK_INTERVAL', + 'general.default_private_links' => 'privateLinkByDefault', + 'general.rss_permalinks' => 'config.ENABLE_RSS_PERMALINKS', + 'general.links_per_page' => 'config.LINKS_PER_PAGE', + 'general.enable_thumbnails' => 'config.ENABLE_THUMBNAILS', + 'general.enable_localcache' => 'config.ENABLE_LOCALCACHE', + 'general.enabled_plugins' => 'config.ENABLED_PLUGINS', + 'extras.redirector' => 'redirector', + 'extras.redirector_encode_url' => 'config.REDIRECTOR_URLENCODE', + 'extras.show_atom' => 'config.SHOW_ATOM', + 'extras.hide_public_links' => 'config.HIDE_PUBLIC_LINKS', + 'extras.hide_timestamps' => 'config.HIDE_TIMESTAMPS', + 'extras.open_shaarli' => 'config.OPEN_SHAARLI', + ); + /** * @inheritdoc */ -- cgit v1.2.3