diff options
| author | s1n <[email protected]> | 2020-03-28 10:36:41 -0700 |
|---|---|---|
| committer | s1n <[email protected]> | 2020-03-28 10:36:41 -0700 |
| commit | 25b7d2aab61ae6421398d3abae5da6ffe590333d (patch) | |
| tree | 611985ec78bb2d94099c9fd5dd687f5c9cee6f3e /includes/Config | |
| parent | Initial commit (diff) | |
| download | crack.cf-backup-master.tar.xz crack.cf-backup-master.zip | |
Diffstat (limited to 'includes/Config')
| -rw-r--r-- | includes/Config/Config.php | 216 | ||||
| -rw-r--r-- | includes/Config/Init.php | 193 | ||||
| -rw-r--r-- | includes/Config/InitDefaults.php | 137 |
3 files changed, 546 insertions, 0 deletions
diff --git a/includes/Config/Config.php b/includes/Config/Config.php new file mode 100644 index 0000000..bbc4812 --- /dev/null +++ b/includes/Config/Config.php @@ -0,0 +1,216 @@ +<?php + +/** + * Define the YOURLS config + */ + +namespace YOURLS\Config; + +use YOURLS\Exceptions\ConfigException; + +class Config { + + /** + * @param string + */ + protected $root; + + /** + * @param mixed + */ + protected $config; + + /** + * @since 1.7.3 + * @param mixed $config Optional user defined config path + */ + public function __construct($config = false) { + $this->set_root( $this->fix_win32_path( dirname( dirname( __DIR__ ) ) ) ); + $this->set_config($config); + } + + /** + * Convert antislashes to slashes + * + * @since 1.7.3 + * @param string $path + * @return string path with \ converted to / + */ + public function fix_win32_path($path) { + return str_replace('\\', '/', $path); + } + + /** + * @since 1.7.3 + * @param string path to config file + * @return void + */ + public function set_config($config) { + $this->config = $config; + } + + /** + * @since 1.7.3 + * @param string path to YOURLS root directory + * @return void + */ + public function set_root($root) { + $this->root = $root; + } + + /** + * Find config.php, either user defined or from standard location + * + * @since 1.7.3 + * @return string path to found config file + * @throws ConfigException + */ + public function find_config() { + + $config = $this->fix_win32_path($this->config); + + if (!empty($config) && is_readable($config)) { + return $config; + } + + if (!empty($config) && !is_readable($config)) { + throw new ConfigException("User defined config not found at '$config'"); + } + + // config.php in /user/ + if (file_exists($this->root . '/user/config.php')) { + return $this->root . '/user/config.php'; + } + + // config.php in /includes/ + if (file_exists($this->root . '/includes/config.php')) { + return $this->root . '/includes/config.php'; + } + + // config.php not found :( + + throw new ConfigException('Cannot find config.php. Please read the readme.html to learn how to install YOURLS'); + } + + /** + * Define core constants that have not been user defined in config.php + * + * @since 1.7.3 + * @return void + * @throws ConfigException + */ + public function define_core_constants() { + // Check minimal config job has been properly done + $must_haves = array('YOURLS_DB_USER', 'YOURLS_DB_PASS', 'YOURLS_DB_NAME', 'YOURLS_DB_HOST', 'YOURLS_DB_PREFIX', 'YOURLS_SITE'); + foreach($must_haves as $must_have) { + if (!defined($must_have)) { + throw new ConfigException('Config is incomplete (missing at least '.$must_have.') Check config-sample.php and edit your config accordingly'); + } + } + + /** + * The following has an awful CRAP index and it would be much shorter reduced to something like + * defining an array of ('YOURLS_SOMETHING' => 'default value') and then a simple loop over the + * array, checking if $current is defined as a constant and otherwise define said constant with + * its default value. I did not wrote it that way because that would make it difficult for code + * parsers to identify which constants are defined and where. So, here it is, that long list of + * if (!defined) define(). Ho and by the way, such beautiful comment, much right aligned, wow ! + */ + + // physical path of YOURLS root + if (!defined( 'YOURLS_ABSPATH' )) + define('YOURLS_ABSPATH', $this->root); + + // physical path of includes directory + if (!defined( 'YOURLS_INC' )) + define('YOURLS_INC', YOURLS_ABSPATH.'/includes'); + + // physical path of user directory + if (!defined( 'YOURLS_USERDIR' )) + define( 'YOURLS_USERDIR', YOURLS_ABSPATH.'/user' ); + + // URL of user directory + if (!defined( 'YOURLS_USERURL' )) + define( 'YOURLS_USERURL', YOURLS_SITE.'/user' ); + + // physical path of asset directory + if( !defined( 'YOURLS_ASSETDIR' ) ) + define( 'YOURLS_ASSETDIR', YOURLS_ABSPATH.'/assets' ); + + // URL of asset directory + if( !defined( 'YOURLS_ASSETURL' ) ) + define( 'YOURLS_ASSETURL', YOURLS_SITE.'/assets' ); + + // physical path of translations directory + if (!defined( 'YOURLS_LANG_DIR' )) + define( 'YOURLS_LANG_DIR', YOURLS_USERDIR.'/languages' ); + + // physical path of plugins directory + if (!defined( 'YOURLS_PLUGINDIR' )) + define( 'YOURLS_PLUGINDIR', YOURLS_USERDIR.'/plugins' ); + + // URL of plugins directory + if (!defined( 'YOURLS_PLUGINURL' )) + define( 'YOURLS_PLUGINURL', YOURLS_USERURL.'/plugins' ); + + // physical path of themes directory + if( !defined( 'YOURLS_THEMEDIR' ) ) + define( 'YOURLS_THEMEDIR', YOURLS_USERDIR.'/themes' ); + + // URL of themes directory + if( !defined( 'YOURLS_THEMEURL' ) ) + define( 'YOURLS_THEMEURL', YOURLS_USERURL.'/themes' ); + + // physical path of pages directory + if (!defined( 'YOURLS_PAGEDIR' )) + define('YOURLS_PAGEDIR', YOURLS_ABSPATH.'/pages' ); + + // table to store URLs + if (!defined( 'YOURLS_DB_TABLE_URL' )) + define( 'YOURLS_DB_TABLE_URL', YOURLS_DB_PREFIX.'url' ); + + // table to store options + if (!defined( 'YOURLS_DB_TABLE_OPTIONS' )) + define( 'YOURLS_DB_TABLE_OPTIONS', YOURLS_DB_PREFIX.'options' ); + + // table to store hits, for stats + if (!defined( 'YOURLS_DB_TABLE_LOG' )) + define( 'YOURLS_DB_TABLE_LOG', YOURLS_DB_PREFIX.'log' ); + + // minimum delay in sec before a same IP can add another URL. Note: logged in users are not throttled down. + if (!defined( 'YOURLS_FLOOD_DELAY_SECONDS' )) + define( 'YOURLS_FLOOD_DELAY_SECONDS', 15 ); + + // comma separated list of IPs that can bypass flood check. + if (!defined( 'YOURLS_FLOOD_IP_WHITELIST' )) + define( 'YOURLS_FLOOD_IP_WHITELIST', '' ); + + // life span of an auth cookie in seconds (60*60*24*7 = 7 days) + if (!defined( 'YOURLS_COOKIE_LIFE' )) + define( 'YOURLS_COOKIE_LIFE', 60*60*24*7 ); + + // life span of a nonce in seconds + if (!defined( 'YOURLS_NONCE_LIFE' )) + define( 'YOURLS_NONCE_LIFE', 43200 ); // 3600 * 12 + + // if set to true, disable stat logging (no use for it, too busy servers, ...) + if (!defined( 'YOURLS_NOSTATS' )) + define( 'YOURLS_NOSTATS', false ); + + // if set to true, force https:// in the admin area + if (!defined( 'YOURLS_ADMIN_SSL' )) + define( 'YOURLS_ADMIN_SSL', false ); + + // if set to true, verbose debug infos. Will break things. Don't enable. + if (!defined( 'YOURLS_DEBUG' )) + define( 'YOURLS_DEBUG', false ); + + // Error reporting + if (defined( 'YOURLS_DEBUG' ) && YOURLS_DEBUG == true ) { + error_reporting( -1 ); + } else { + error_reporting( E_ERROR | E_PARSE ); + } + } + +} diff --git a/includes/Config/Init.php b/includes/Config/Init.php new file mode 100644 index 0000000..d2b154b --- /dev/null +++ b/includes/Config/Init.php @@ -0,0 +1,193 @@ +<?php + +/** + * YOURLS actions upon instantiating + */ + +namespace YOURLS\Config; + +class Init { + + /** + * @param InitDefaults + */ + protected $actions; + + /** + * @since 1.7.3 + * + * @param InitDefaults $actions + */ + public function __construct(InitDefaults $actions) { + + $this->actions = $actions; + + // Include core files + if ($actions->include_core_funcs === true) { + $this->include_core_functions(); + } + + // Enforce UTC timezone to suppress PHP warnings -- correct date/time will be managed using the config time offset + if ($actions->default_timezone === true) { + date_default_timezone_set( 'UTC' ); + } + + // Load locale + if ($actions->load_default_textdomain === true) { + yourls_load_default_textdomain(); + } + + // Check if we are in maintenance mode - if yes, it will die here. + if ($actions->check_maintenance_mode === true) { + yourls_check_maintenance_mode(); + } + + // Fix REQUEST_URI for IIS + if ($actions->fix_request_uri === true) { + yourls_fix_request_uri(); + } + + // If request for an admin page is http:// and SSL is required, redirect + if ($actions->redirect_ssl === true) { + $this->redirect_ssl_if_needed(); + } + + // Create the YOURLS object $ydb that will contain everything we globally need + if ($actions->include_db === true) { + $this->include_db_files(); + } + + // Allow early inclusion of a cache layer + if ($actions->include_cache === true) { + $this->include_cache_files(); + } + + // Abort initialization here if fast init wanted (for tests/debug/do not use) + if ($actions->return_if_fast_init === true && defined('YOURLS_FAST_INIT') && YOURLS_FAST_INIT){ + return; + } + + // Read options right from start + if ($actions->get_all_options === true) { + yourls_get_all_options(); + } + + // Register shutdown function + if ($actions->register_shutdown === true) { + register_shutdown_function( 'yourls_shutdown' ); + } + + // Core now loaded + if ($actions->core_loaded === true) { + yourls_do_action( 'init' ); // plugins can't see this, not loaded yet + } + + // Check if need to redirect to install procedure + if ($actions->redirect_to_install === true) { + if (!yourls_is_installed() && !yourls_is_installing()) { + yourls_redirect( yourls_admin_url('install.php'), 302 ); + } + } + + // Check if upgrade is needed (bypassed if upgrading or installing) + if ($actions->check_if_upgrade_needed === true) { + if (!yourls_is_upgrading() && !yourls_is_installing() && yourls_upgrade_is_needed()) { + yourls_redirect( yourls_admin_url('upgrade.php'), 302 ); + } + } + + // Load all plugins + if ($actions->load_plugins === true) { + yourls_load_plugins(); + } + + // Trigger plugin loaded action + if ($actions->plugins_loaded_action === true) { + yourls_do_action( 'plugins_loaded' ); + } + + // Is there a new version of YOURLS ? + if ($actions->check_new_version === true) { + if (yourls_is_installed() && !yourls_is_upgrading()) { + yourls_tell_if_new_version(); + } + } + + if ($actions->init_admin === true) { + if (yourls_is_admin()) { + yourls_do_action( 'admin_init' ); + } + } + + } + + /** + * @since 1.7.3 + * @return void + */ + public function redirect_ssl_if_needed() { + if (yourls_is_admin() && yourls_needs_ssl() && !yourls_is_ssl()) { + if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) { + yourls_redirect( preg_replace( '|^http://|', 'https://', $_SERVER['REQUEST_URI'] ) ); + } else { + yourls_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + } + exit(); + } + } + + /** + * @since 1.7.3 + * @return void + */ + public function include_db_files() { + // Allow drop-in replacement for the DB engine + if (file_exists(YOURLS_USERDIR.'/db.php')) { + require_once YOURLS_USERDIR.'/db.php'; + } else { + require_once YOURLS_INC.'/class-mysql.php'; + yourls_db_connect(); + } + } + + /** + * @since 1.7.3 + * @return void + */ + public function include_cache_files() { + if (file_exists(YOURLS_USERDIR.'/cache.php')) { + require_once YOURLS_USERDIR.'/cache.php'; + } + } + + /** + * @since 1.7.3 + * @return void + */ + public function include_core_functions() { + require_once YOURLS_INC.'/version.php'; + require_once YOURLS_INC.'/functions.php'; + require_once YOURLS_INC.'/functions-plugins.php'; + require_once YOURLS_INC.'/functions-formatting.php'; + require_once YOURLS_INC.'/functions-api.php'; + require_once YOURLS_INC.'/functions-kses.php'; + require_once YOURLS_INC.'/functions-l10n.php'; + require_once YOURLS_INC.'/functions-compat.php'; + require_once YOURLS_INC.'/functions-html.php'; + require_once YOURLS_INC.'/functions-http.php'; + require_once YOURLS_INC.'/functions-infos.php'; + require_once YOURLS_INC.'/functions-deprecated.php'; + + // Load auth functions if needed + if (yourls_is_private() || $this->actions->include_auth_funcs === true) { + require_once YOURLS_INC.'/functions-auth.php'; + } + + // Load install & upgrade functions if needed + if ($this->actions->include_install_upgrade_funcs === true) { + require_once YOURLS_INC.'/functions-upgrade.php'; + require_once YOURLS_INC.'/functions-install.php'; + } + } + +} diff --git a/includes/Config/InitDefaults.php b/includes/Config/InitDefaults.php new file mode 100644 index 0000000..71d606e --- /dev/null +++ b/includes/Config/InitDefaults.php @@ -0,0 +1,137 @@ +<?php + +/** + * YOURLS defaut actions upon instantiating + * + * This class defines all the default actions to be performed when instantiating YOURLS. The idea + * is that this is easily tuneable depending on the scenario, namely when running YOURLS for + * unit tests. + * + * @see \YOURLS\Config\Init + */ + +namespace YOURLS\Config; + +class InitDefaults { + + /** + * Whether to include core function files + * @var bool + */ + public $include_core_funcs = true; + + /** + * Whether to include auth function files + * @var bool + */ + public $include_auth_funcs = false; // by default do not load (let YOURLS decide depending on yourls_is_private() value) + + /** + * Whether to include auth function files + * @var bool + */ + public $include_install_upgrade_funcs = false; // by default do not load + + /** + * Whether to set default time zone + * @var bool + */ + public $default_timezone = true; + + /** + * Whether to load default text domain + * @var bool + */ + public $load_default_textdomain = true; + + /** + * Whether to check for maintenance mode and maybe die here + * @var bool + */ + public $check_maintenance_mode = true; + + /** + * Whether to fix $_REQUEST for IIS + * @var bool + */ + public $fix_request_uri = true; + + /** + * Whether to redirect to SSL if needed + * @var bool + */ + public $redirect_ssl = true; + + /** + * Whether to include DB engine + * @var bool + */ + public $include_db = true; + + /** + * Whether to include cache layer + * @var bool + */ + public $include_cache = true; + + /** + * Whether to end instantiating early if YOURLS_FAST_INIT is defined and true + * @var bool + */ + public $return_if_fast_init = true; + + /** + * Whether to read all options at once during starting + * @var bool + */ + public $get_all_options = true; + + /** + * Whether to register shutdown action + * @var bool + */ + public $register_shutdown = true; + + /** + * Whether to trigger action 'init' after core is loaded + * @var bool + */ + public $core_loaded = true; + + /** + * Whether to redirect to install procedure if needed + * @var bool + */ + public $redirect_to_install = true; + + /** + * Whether to redirect to upgrade procedure if needed + * @var bool + */ + public $check_if_upgrade_needed = true; + + /** + * Whether to load all plugins + * @var bool + */ + public $load_plugins = true; + + /** + * Whether to trigger the "plugins_loaded" action + * @var bool + */ + public $plugins_loaded_action = true; + + /** + * Whether to check if a new version if available + * @var bool + */ + public $check_new_version = true; + + /** + * Whether to trigger 'admin_init' if applicable + * @var bool + */ + public $init_admin = true; + +} |