diff --git a/CHANGELOG.md b/CHANGELOG.md index 69897485..398ba645 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ 1. [](#new) * Pass phpstan level 1 tests * Updated semver library to v1.5 +* [](#improved) + * Added some debugging messages (turned off by default) # v1.10.0-rc.5 ## 02/03/2020 diff --git a/admin.php b/admin.php index 5815b1dd..5219e252 100644 --- a/admin.php +++ b/admin.php @@ -300,9 +300,9 @@ class AdminPlugin extends Plugin $form = $event['form']; $action = $event['action']; + Admin::DEBUG && Admin::addDebugMessage('Admin Form: ' . $action); switch ($action) { case 'register_admin_user': - if (Admin::doAnyUsersExist()) { throw new \RuntimeException('A user account already exists, please create an admin account manually.'); } @@ -455,6 +455,7 @@ class AdminPlugin extends Plugin // Force SSL with redirect if required if ($config->get('system.force_ssl')) { if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') { + Admin::DEBUG && Admin::addDebugMessage('Admin SSL forced on, redirect'); $url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $this->grav->redirect($url); } @@ -478,6 +479,7 @@ class AdminPlugin extends Plugin // Handle tasks. $this->admin->task = $task = $this->grav['task'] ?? $this->grav['action']; if ($task) { + Admin::DEBUG && Admin::addDebugMessage("Admin task: {$task}"); $this->initializeController($task, $post); } elseif ($this->template === 'logs' && $this->route) { // Display RAW error message. @@ -502,14 +504,18 @@ class AdminPlugin extends Plugin $page = $event['page']; if ($page->slug()) { + Admin::DEBUG && Admin::addDebugMessage('Admin page: from event'); return $page; } } // Look in the pages provided by the Admin plugin itself if (file_exists(__DIR__ . "/pages/admin/{$self->template}.md")) { + Admin::DEBUG && Admin::addDebugMessage("Admin page: {$self->template}"); + $page->init(new \SplFileInfo(__DIR__ . "/pages/admin/{$self->template}.md")); $page->slug(basename($self->template)); + return $page; } @@ -525,6 +531,8 @@ class AdminPlugin extends Plugin $path = $locator->findResource("plugins://{$plugin->name}/admin/pages/{$self->template}.md"); if ($path) { + Admin::DEBUG && Admin::addDebugMessage("Admin page: plugin {$plugin->name}/{$self->template}"); + $page->init(new \SplFileInfo($path)); $page->slug(basename($self->template)); @@ -537,6 +545,7 @@ class AdminPlugin extends Plugin if (empty($this->grav['page'])) { if ($this->grav['user']->authenticated) { + Admin::DEBUG && Admin::addDebugMessage('Admin page: fire onPageNotFound event'); $event = new Event(['page' => null]); $event->page = null; $event = $this->grav->fireEvent('onPageNotFound', $event); @@ -544,6 +553,7 @@ class AdminPlugin extends Plugin $page = $event->page; if (!$page || !$page->routable()) { + Admin::DEBUG && Admin::addDebugMessage('Admin page: 404 Not Found'); $error_file = $this->grav['locator']->findResource('plugins://admin/pages/admin/error.md'); $page = new Page(); $page->init(new \SplFileInfo($error_file)); @@ -554,6 +564,7 @@ class AdminPlugin extends Plugin unset($this->grav['page']); $this->grav['page'] = $page; } else { + Admin::DEBUG && Admin::addDebugMessage('Admin page: login'); // Not Found and not logged in: Display login page. $login_file = $this->grav['locator']->findResource('plugins://admin/pages/admin/login.md'); $page = new Page(); @@ -903,6 +914,8 @@ class AdminPlugin extends Plugin protected function initializeController($task, $post) { + Admin::DEBUG && Admin::addDebugMessage('Admin controller: execute'); + $controller = new AdminController(); $controller->initialize($this->grav, $this->template, $task, $this->route, $post); $controller->execute(); diff --git a/classes/plugin/Admin.php b/classes/plugin/Admin.php index 746dd8d2..1ac9acab 100644 --- a/classes/plugin/Admin.php +++ b/classes/plugin/Admin.php @@ -5,6 +5,7 @@ namespace Grav\Plugin\Admin; use DateTime; use Grav\Common\Data; use Grav\Common\Data\Data as GravData; +use Grav\Common\Debugger; use Grav\Common\File\CompiledYamlFile; use Grav\Common\Flex\Users\UserObject; use Grav\Common\GPM\GPM; @@ -52,8 +53,9 @@ define('LOGIN_REDIRECT_COOKIE', 'grav-login-redirect'); class Admin { - const MEDIA_PAGINATION_INTERVAL = 20; - const TMP_COOKIE_NAME = 'tmp-admin-message'; + public const DEBUG = 1; + public const MEDIA_PAGINATION_INTERVAL = 20; + public const TMP_COOKIE_NAME = 'tmp-admin-message'; /** @var Grav */ public $grav; @@ -182,6 +184,17 @@ class Admin } } + /** + * @param string $message + * @param array $data + */ + public static function addDebugMessage(string $message, $data = []) + { + /** @var Debugger $debugger */ + $debugger = Grav::instance()['debugger']; + $debugger->addMessage($message, 'debug', $data); + } + /** * Return the languages available in the admin * @@ -400,6 +413,8 @@ class Admin return; } + Admin::DEBUG && Admin::addDebugMessage("Admin redirect: {$redirectCode} {$redirect}"); + $redirect = '/' . ltrim(preg_replace('`//+`', '/', $redirect), '/'); $base = $this->base; $root = Grav::instance()['uri']->rootUrl(); @@ -536,11 +551,15 @@ class Admin // Check rate limit for both IP and user, but allow each IP a single try even if user is already rate limited. if ($rateLimiter->isRateLimited($ipKey, 'ip') || ($attempts && $rateLimiter->isRateLimited($userKey))) { + Admin::DEBUG && Admin::addDebugMessage('Admin login: rate limit, redirecting', $credentials); + $this->setMessage(static::translate(['PLUGIN_LOGIN.TOO_MANY_LOGIN_ATTEMPTS', $rateLimiter->getInterval()]), 'error'); $this->grav->redirect('/'); } + Admin::DEBUG && Admin::addDebugMessage('Admin login', $credentials); + // Fire Login process. $event = $login->login( $credentials, @@ -549,6 +568,8 @@ class Admin ); $user = $event->getUser(); + Admin::DEBUG && Admin::addDebugMessage('Admin login: user', $user); + if ($user->authenticated) { $rateLimiter->resetRateLimit($ipKey, 'ip')->resetRateLimit($userKey); if ($user->authorized) {