public static function enable() { require_once 'KokenPlugin.php'; require_once 'Contracts/KokenCache.php'; require_once 'Contracts/KokenEmail.php'; require_once 'Contracts/KokenDatabaseConfiguration.php'; require_once 'Contracts/KokenEncryptionKey.php'; require_once 'Contracts/KokenOriginalStore.php'; $root = dirname(dirname(dirname(dirname(__FILE__)))); self::scan('app/plugins', true, true); if (getenv('KOKEN_SHUTTER_AUTOLOAD')) { self::scan(getenv('KOKEN_SHUTTER_AUTOLOAD'), true, true); } $compiled = self::get_cache('plugins/compiled.cache'); if (!$compiled && strpos($_SERVER['QUERY_STRING'], 'plugins/compile') === false) { include dirname(__DIR__) . '/Utils/KokenAPI.php'; $api = new KokenAPI(); $api->get('/plugins/compile'); } $compiled = self::get_cache('plugins/compiled.cache'); Shutter::$email_provider = self::$class_map['DDI_Email']; if ($compiled) { $compiled_plugins = unserialize($compiled['data']); foreach ($compiled_plugins['plugins'] as $plugin) { self::parse($root . '/storage/plugins/' . $plugin['path'], true, false, isset($plugin['data']) ? $plugin['data'] : array()); } if (isset($compiled_plugins['info']['email_handler']) && isset(self::$class_map[$compiled_plugins['info']['email_handler']])) { self::$email_provider = self::$class_map[$compiled_plugins['info']['email_handler']]; } if (isset($compiled_plugins['info']['email_delivery_address'])) { self::$email_delivery_address = $compiled_plugins['info']['email_delivery_address']; } } }
preg_match('/^\\/((?:[0-9]{3}\\/[0-9]{3})|custom)\\/(.*)[,\\/]([0-9]+)\\.([0-9]+)\\.([0-9]{1,3})\\.([0-9]{1,3})\\.(crop\\.)?(2x\\.)?(?:\\d{9,10}\\.)?(?P<ext>jpe?g|gif|png|svg)(\\.dl|.64)?$/i', $path, $matches); $preset = false; } if (empty($matches)) { // Bad request header('HTTP/1.1 403 Forbidden'); exit; } $custom = $matches[1] === 'custom'; // No path traversing in file name if (preg_match("/[^a-zA-Z0-9._-]/", $matches[2])) { header('HTTP/1.1 403 Forbidden'); exit; } $KokenAPI = new KokenAPI(); $settings = $KokenAPI->get('/settings'); if ($custom) { $original = $root . $ds . 'storage' . $ds . 'custom' . $ds . preg_replace('/\\-(jpe?g|gif|png)$/i', '.$1', $matches[2]); list($source_width, $source_height) = getimagesize($original); } else { $id = (int) str_replace('/', '', $matches[1]); $content = $KokenAPI->get('/content/' . $id); $original_info = pathinfo($content['filename']); if (!isset($content['html']) && strtolower($original_info['filename']) !== strtolower($matches[2])) { $KokenAPI->clear(); header('HTTP/1.1 404 Not Found'); exit; } if (isset($content['original']['preview'])) { if (isset($content['original']['preview']['relative_url'])) { $original = $root . $content['original']['preview']['relative_url'];