diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2026-02-07 12:43:24 +0000 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2026-02-07 13:42:46 +0000 |
| commit | 0714892d0a8fa1702559149068e8f0f8e8d58a0e (patch) | |
| tree | f09a5f4ecb6df60590cb7c25cd338df835b936c9 /app | |
| parent | e468574bd999c26fe99e1853eafc731f054511c9 (diff) | |
| download | webtrees-0714892d0a8fa1702559149068e8f0f8e8d58a0e.tar.gz webtrees-0714892d0a8fa1702559149068e8f0f8e8d58a0e.tar.bz2 webtrees-0714892d0a8fa1702559149068e8f0f8e8d58a0e.zip | |
Move SQL logger to its own class
Diffstat (limited to 'app')
36 files changed, 86 insertions, 295 deletions
diff --git a/app/Http/Middleware/AuthAdministrator.php b/app/Http/Middleware/AuthAdministrator.php index d5fe158d23..3066220d05 100644 --- a/app/Http/Middleware/AuthAdministrator.php +++ b/app/Http/Middleware/AuthAdministrator.php @@ -33,17 +33,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function redirect; use function route; -/** - * Middleware to restrict access to administrators. - */ class AuthAdministrator implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $user = Validator::attributes($request)->user(); diff --git a/app/Http/Middleware/AuthEditor.php b/app/Http/Middleware/AuthEditor.php index 8840bb55be..7d9ae66792 100644 --- a/app/Http/Middleware/AuthEditor.php +++ b/app/Http/Middleware/AuthEditor.php @@ -33,17 +33,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function redirect; use function route; -/** - * Middleware to restrict access to editors. - */ class AuthEditor implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $tree = Validator::attributes($request)->tree(); diff --git a/app/Http/Middleware/AuthLoggedIn.php b/app/Http/Middleware/AuthLoggedIn.php index cf27e43b34..afb94e5eec 100644 --- a/app/Http/Middleware/AuthLoggedIn.php +++ b/app/Http/Middleware/AuthLoggedIn.php @@ -29,17 +29,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function redirect; -/** - * Middleware to restrict access to logged-in users. - */ class AuthLoggedIn implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $tree = Validator::attributes($request)->treeOptional(); diff --git a/app/Http/Middleware/AuthManager.php b/app/Http/Middleware/AuthManager.php index 02a7a2718c..0d310d1d43 100644 --- a/app/Http/Middleware/AuthManager.php +++ b/app/Http/Middleware/AuthManager.php @@ -33,17 +33,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function redirect; use function route; -/** - * Middleware to restrict access to managers. - */ class AuthManager implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $tree = Validator::attributes($request)->tree(); diff --git a/app/Http/Middleware/AuthMember.php b/app/Http/Middleware/AuthMember.php index 67a650fb9e..863a7faec0 100644 --- a/app/Http/Middleware/AuthMember.php +++ b/app/Http/Middleware/AuthMember.php @@ -33,17 +33,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function redirect; use function route; -/** - * Middleware to restrict access to editors. - */ class AuthMember implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $tree = Validator::attributes($request)->tree(); diff --git a/app/Http/Middleware/AuthModerator.php b/app/Http/Middleware/AuthModerator.php index 747b547451..03f15210b6 100644 --- a/app/Http/Middleware/AuthModerator.php +++ b/app/Http/Middleware/AuthModerator.php @@ -33,17 +33,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function redirect; use function route; -/** - * Middleware to restrict access to moderators. - */ class AuthModerator implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $tree = Validator::attributes($request)->tree(); diff --git a/app/Http/Middleware/AuthNotRobot.php b/app/Http/Middleware/AuthNotRobot.php index 57e7c7f5a9..9a86323080 100644 --- a/app/Http/Middleware/AuthNotRobot.php +++ b/app/Http/Middleware/AuthNotRobot.php @@ -27,17 +27,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function response; -/** - * Middleware to deny access to robots. - */ class AuthNotRobot implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if ($request->getAttribute(BadBotBlocker::ROBOT_ATTRIBUTE_NAME) !== null) { diff --git a/app/Http/Middleware/BadBotBlocker.php b/app/Http/Middleware/BadBotBlocker.php index 6a45a3068d..55dcc46d0a 100644 --- a/app/Http/Middleware/BadBotBlocker.php +++ b/app/Http/Middleware/BadBotBlocker.php @@ -43,9 +43,6 @@ use function response; use function str_contains; use function str_ends_with; -/** - * Middleware to block bad robots before they waste our valuable CPU cycles. - */ class BadBotBlocker implements MiddlewareInterface { public const string ROBOT_ATTRIBUTE_NAME = 'is-a-robot'; diff --git a/app/Http/Middleware/BaseUrl.php b/app/Http/Middleware/BaseUrl.php index ae53cc4252..ff5679a77d 100644 --- a/app/Http/Middleware/BaseUrl.php +++ b/app/Http/Middleware/BaseUrl.php @@ -34,17 +34,8 @@ use const PHP_URL_PATH; use const PHP_URL_PORT; use const PHP_URL_SCHEME; -/** - * Middleware to set the base URL. - */ class BaseUrl implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // The request URL, as auto-detected from the environment. diff --git a/app/Http/Middleware/BootModules.php b/app/Http/Middleware/BootModules.php index 5ad60ceb1f..f60b0d5905 100644 --- a/app/Http/Middleware/BootModules.php +++ b/app/Http/Middleware/BootModules.php @@ -26,9 +26,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to bootstrap the modules. - */ class BootModules implements MiddlewareInterface { private ModuleService $module_service; @@ -45,12 +42,6 @@ class BootModules implements MiddlewareInterface $this->theme = $theme; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $this->module_service->bootModules($this->theme); diff --git a/app/Http/Middleware/CheckCsrf.php b/app/Http/Middleware/CheckCsrf.php index d1db5f6847..a38c0ef54a 100644 --- a/app/Http/Middleware/CheckCsrf.php +++ b/app/Http/Middleware/CheckCsrf.php @@ -34,9 +34,6 @@ use Psr\Http\Server\RequestHandlerInterface; use function in_array; -/** - * Middleware to wrap a request in a transaction. - */ class CheckCsrf implements MiddlewareInterface { private const array EXCLUDE_ROUTES = [ @@ -45,12 +42,6 @@ class CheckCsrf implements MiddlewareInterface SelectTheme::class, ]; - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if ($request->getMethod() === RequestMethodInterface::METHOD_POST) { diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php index d12785a91f..717277a791 100644 --- a/app/Http/Middleware/CheckForMaintenanceMode.php +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -27,9 +27,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to check whether the site is offline. - */ readonly class CheckForMaintenanceMode implements MiddlewareInterface, StatusCodeInterface { public function __construct( diff --git a/app/Http/Middleware/CheckForNewVersion.php b/app/Http/Middleware/CheckForNewVersion.php index 256a010e66..e711a2ed23 100644 --- a/app/Http/Middleware/CheckForNewVersion.php +++ b/app/Http/Middleware/CheckForNewVersion.php @@ -26,9 +26,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to check if a new version of webtrees is available. - */ class CheckForNewVersion implements MiddlewareInterface { private UpgradeService $upgrade_service; @@ -41,12 +38,6 @@ class CheckForNewVersion implements MiddlewareInterface $this->upgrade_service = $upgrade_service; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // Only run on full page requests. diff --git a/app/Http/Middleware/ClientIp.php b/app/Http/Middleware/ClientIp.php index a5846f563b..ccbcdd3bac 100644 --- a/app/Http/Middleware/ClientIp.php +++ b/app/Http/Middleware/ClientIp.php @@ -25,17 +25,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function explode; -/** - * Middleware to detect the client's IP address. - */ class ClientIp extends \Middlewares\ClientIp { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // The configuration comes from config.ini.php, via request attributes. diff --git a/app/Http/Middleware/CompressResponse.php b/app/Http/Middleware/CompressResponse.php index a88d6c0f59..92bc2d85fe 100644 --- a/app/Http/Middleware/CompressResponse.php +++ b/app/Http/Middleware/CompressResponse.php @@ -35,9 +35,6 @@ use function strstr; use function strtolower; use function strtr; -/** - * Middleware to compress (gzip or deflate) a response. - */ class CompressResponse implements MiddlewareInterface { // Non-text responses that will benefit from compression. @@ -54,12 +51,6 @@ class CompressResponse implements MiddlewareInterface { } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $response = $handler->handle($request); diff --git a/app/Http/Middleware/ContentLength.php b/app/Http/Middleware/ContentLength.php index d661aecc46..bdeb5a0c1f 100644 --- a/app/Http/Middleware/ContentLength.php +++ b/app/Http/Middleware/ContentLength.php @@ -24,17 +24,8 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to add a "Content-Length" header to a response. - */ class ContentLength implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $response = $handler->handle($request); diff --git a/app/Http/Middleware/DebugLogger.php b/app/Http/Middleware/DebugLogger.php new file mode 100644 index 0000000000..fe3a5055d4 --- /dev/null +++ b/app/Http/Middleware/DebugLogger.php @@ -0,0 +1,83 @@ +<?php + +/** + * webtrees: online genealogy + * Copyright (C) 2025 webtrees development team + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +declare(strict_types=1); + +namespace Fisharebest\Webtrees\Http\Middleware; + +use Fisharebest\Webtrees\DB; +use Fisharebest\Webtrees\Validator; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\MiddlewareInterface; +use Psr\Http\Server\RequestHandlerInterface; + +use function memory_get_peak_usage; +use function sprintf; +use function Symfony\Component\String\s; + +class DebugLogger implements MiddlewareInterface +{ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $debug = Validator::attributes($request)->boolean('debug', false); + + if (!$debug) { + return $handler->handle($request); + } + + $start = microtime(true); + + // Log SQL queries in response headers + DB::connection()->enableQueryLog(); + $response = $handler->handle($request); + $queries = DB::connection()->getQueryLog(); + $slowest = max(array_column($queries, 'time')); + $total = array_sum(array_column($queries, 'time')); + $message = sprintf('Queries: %d, slowest: %.3f ms, total: %.3f ms', count($queries), $slowest, $total); + $response = $response->withAddedHeader('x-debug-sql', $message); + + foreach ($queries as $query) { + $sql = $query['query']; + $time = $query['time']; + $bindings = $query['bindings']; + foreach ($bindings as $binding) { + if (is_string($binding)) { + if (mb_strlen($binding) > 10) { + $binding = mb_substr($binding, 0, 9) . '...'; + } + + $binding = "'" . $binding . "'"; + } else { + $binding = (string) $binding; + } + + $sql = preg_replace('/\?/', $binding, $sql, 1); + } + $message = sprintf('%s (%.3f ms)', $sql, $time); + $response = $response->withAddedHeader('x-debug-sql', $message); + } + + $message = sprintf('%.3f seconds', microtime(true) - $start); + $response = $response->withAddedHeader('x-debug-processing-time', $message); + + $message = sprintf('%d KB', intdiv(memory_get_peak_usage(), 1024)); + $response = $response->withAddedHeader('x-debug-memory-peak-usage', $message); + + return $response; + } +} diff --git a/app/Http/Middleware/DoHousekeeping.php b/app/Http/Middleware/DoHousekeeping.php index 355fd21128..7fe619eebe 100644 --- a/app/Http/Middleware/DoHousekeeping.php +++ b/app/Http/Middleware/DoHousekeeping.php @@ -28,9 +28,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Run the housekeeping service at irregular intervals. - */ class DoHousekeeping implements MiddlewareInterface { // Delete old thumbnails after 90 days. @@ -60,12 +57,6 @@ class DoHousekeeping implements MiddlewareInterface $this->housekeeping_service = $housekeeping_service; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $response = $handler->handle($request); diff --git a/app/Http/Middleware/EmitResponse.php b/app/Http/Middleware/EmitResponse.php index dde3e391b0..0a5b970b47 100644 --- a/app/Http/Middleware/EmitResponse.php +++ b/app/Http/Middleware/EmitResponse.php @@ -38,9 +38,6 @@ use function sprintf; use const CONNECTION_NORMAL; -/** - * Middleware to emit the response - send it back to the webserver. - */ class EmitResponse implements MiddlewareInterface { // Stream the output in chunks. diff --git a/app/Http/Middleware/HandleExceptions.php b/app/Http/Middleware/HandleExceptions.php index ea574d9dd0..b9b8f0e57d 100644 --- a/app/Http/Middleware/HandleExceptions.php +++ b/app/Http/Middleware/HandleExceptions.php @@ -49,9 +49,6 @@ use function view; use const E_ERROR; use const PHP_EOL; -/** - * Middleware to handle and render errors. - */ class HandleExceptions implements MiddlewareInterface, StatusCodeInterface { use ViewResponseTrait; diff --git a/app/Http/Middleware/LoadRoutes.php b/app/Http/Middleware/LoadRoutes.php index 9828483cea..29d790424f 100644 --- a/app/Http/Middleware/LoadRoutes.php +++ b/app/Http/Middleware/LoadRoutes.php @@ -33,9 +33,6 @@ use function parse_url; use const PHP_URL_PATH; -/** - * Load the routing table. - */ class LoadRoutes implements MiddlewareInterface { private ApiRoutes $api_routes; @@ -52,12 +49,6 @@ class LoadRoutes implements MiddlewareInterface $this->web_routes = $web_routes; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $base_url = Validator::attributes($request)->string('base_url'); diff --git a/app/Http/Middleware/PublicFiles.php b/app/Http/Middleware/PublicFiles.php index f4598f851a..0bed3f754e 100644 --- a/app/Http/Middleware/PublicFiles.php +++ b/app/Http/Middleware/PublicFiles.php @@ -36,9 +36,6 @@ use function strtoupper; use const PATHINFO_EXTENSION; -/** - * Provide access to files in the folder /public, for cli-server requests and in case the web-server doesn't do this. - */ class PublicFiles implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface diff --git a/app/Http/Middleware/ReadConfigIni.php b/app/Http/Middleware/ReadConfigIni.php index bb6b5c2f92..d9df67b7fc 100644 --- a/app/Http/Middleware/ReadConfigIni.php +++ b/app/Http/Middleware/ReadConfigIni.php @@ -29,9 +29,6 @@ use Psr\Http\Server\RequestHandlerInterface; use function file_exists; use function parse_ini_file; -/** - * Middleware to read (or create) the webtrees configuration file. - */ class ReadConfigIni implements MiddlewareInterface { private SetupWizard $setup_wizard; @@ -44,12 +41,6 @@ class ReadConfigIni implements MiddlewareInterface $this->setup_wizard = $setup_wizard; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // Read the configuration settings. diff --git a/app/Http/Middleware/RegisterGedcomTags.php b/app/Http/Middleware/RegisterGedcomTags.php index 5014e91503..a07b041c77 100644 --- a/app/Http/Middleware/RegisterGedcomTags.php +++ b/app/Http/Middleware/RegisterGedcomTags.php @@ -26,9 +26,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to register GEDCOM tags. - */ class RegisterGedcomTags implements MiddlewareInterface { private Gedcom $gedcom; @@ -41,12 +38,6 @@ class RegisterGedcomTags implements MiddlewareInterface $this->gedcom = $gedcom; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $this->gedcom->registerTags(Registry::elementFactory(), true); diff --git a/app/Http/Middleware/RequestHandler.php b/app/Http/Middleware/RequestHandler.php index 2e2ffdc495..5c41ab63a6 100644 --- a/app/Http/Middleware/RequestHandler.php +++ b/app/Http/Middleware/RequestHandler.php @@ -28,17 +28,8 @@ use Psr\Http\Server\RequestHandlerInterface; use function is_string; -/** - * Middleware to run a request-handler. - */ class RequestHandler implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $route = Validator::attributes($request)->route(); diff --git a/app/Http/Middleware/Router.php b/app/Http/Middleware/Router.php index e51e33dcfc..cebbe314f5 100644 --- a/app/Http/Middleware/Router.php +++ b/app/Http/Middleware/Router.php @@ -39,9 +39,6 @@ use function explode; use function implode; use function str_contains; -/** - * Simple class to help migrate to a third-party routing library. - */ readonly class Router implements MiddlewareInterface { public function __construct( diff --git a/app/Http/Middleware/SecurityHeaders.php b/app/Http/Middleware/SecurityHeaders.php index d3f089b474..b222f5fee5 100644 --- a/app/Http/Middleware/SecurityHeaders.php +++ b/app/Http/Middleware/SecurityHeaders.php @@ -25,9 +25,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to set security-related HTTP headers. - */ class SecurityHeaders implements MiddlewareInterface { private const array SECURITY_HEADERS = [ @@ -38,12 +35,6 @@ class SecurityHeaders implements MiddlewareInterface 'X-XSS-Protection' => '1; mode=block', ]; - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $response = $handler->handle($request); diff --git a/app/Http/Middleware/UpdateDatabaseSchema.php b/app/Http/Middleware/UpdateDatabaseSchema.php index e0f921d585..384fea32c4 100644 --- a/app/Http/Middleware/UpdateDatabaseSchema.php +++ b/app/Http/Middleware/UpdateDatabaseSchema.php @@ -26,9 +26,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to update the database automatically, after an upgrade. - */ class UpdateDatabaseSchema implements MiddlewareInterface { private MigrationService $migration_service; diff --git a/app/Http/Middleware/UseDatabase.php b/app/Http/Middleware/UseDatabase.php index c77e471989..778b89c803 100644 --- a/app/Http/Middleware/UseDatabase.php +++ b/app/Http/Middleware/UseDatabase.php @@ -26,17 +26,8 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to connect to the database. - */ class UseDatabase implements MiddlewareInterface { - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { DB::connect( @@ -53,42 +44,6 @@ class UseDatabase implements MiddlewareInterface verify_certificate: Validator::attributes($request)->boolean('dbverify', false), ); - $debug = Validator::attributes($request)->boolean('debug', false); - - if (!$debug) { - return $handler->handle($request); - } - - // Log SQL queries in response headers - DB::connection()->enableQueryLog(); - $response = $handler->handle($request); - $queries = DB::connection()->getQueryLog(); - $slowest = max(array_column($queries, 'time')); - $total = array_sum(array_column($queries, 'time')); - $message = sprintf('Queries: %d, slowest: %.3f ms, total: %.3f ms', count($queries), $slowest, $total); - $response = $response->withAddedHeader('x-debug-sql', $message); - - foreach ($queries as $query) { - $sql = $query['query']; - $time = $query['time']; - $bindings = $query['bindings']; - foreach ($bindings as $binding) { - if (is_string($binding)) { - if (mb_strlen($binding) > 10) { - $binding = mb_substr($binding, 0, 9) . '...'; - } - - $binding = "'" . $binding . "'"; - } else { - $binding = (string) $binding; - } - - $sql = preg_replace('/\?/', $binding, $sql, 1); - } - $message = sprintf('%s (%.3f ms)', $sql, $time); - $response = $response->withAddedHeader('x-debug-sql', $message); - } - - return $response; + return $handler->handle($request); } } diff --git a/app/Http/Middleware/UseLanguage.php b/app/Http/Middleware/UseLanguage.php index 5bbf5c822f..929b3215e0 100644 --- a/app/Http/Middleware/UseLanguage.php +++ b/app/Http/Middleware/UseLanguage.php @@ -33,9 +33,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to select a language. - */ class UseLanguage implements MiddlewareInterface { private ModuleService $module_service; @@ -48,12 +45,6 @@ class UseLanguage implements MiddlewareInterface $this->module_service = $module_service; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { foreach ($this->languages($request) as $language) { diff --git a/app/Http/Middleware/UseSession.php b/app/Http/Middleware/UseSession.php index 6d68e17e14..8f5f105136 100644 --- a/app/Http/Middleware/UseSession.php +++ b/app/Http/Middleware/UseSession.php @@ -34,20 +34,11 @@ use function time; use const PHP_SESSION_ACTIVE; -/** - * Middleware to activate sessions. - */ class UseSession implements MiddlewareInterface { // To avoid read-write contention on the wt_user_setting table, don't update the last-active time on every request. private const int UPDATE_ACTIVITY_INTERVAL = 60; - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // Some sites (e.g. Wordpress/NinjaFirewall) use the PHP auto_prepend_file diff --git a/app/Http/Middleware/UseTheme.php b/app/Http/Middleware/UseTheme.php index 0304606299..aae56722f1 100644 --- a/app/Http/Middleware/UseTheme.php +++ b/app/Http/Middleware/UseTheme.php @@ -31,9 +31,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to select a theme. - */ class UseTheme implements MiddlewareInterface { private ModuleService $module_service; @@ -46,12 +43,6 @@ class UseTheme implements MiddlewareInterface $this->module_service = $module_service; } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { foreach ($this->themes() as $theme) { diff --git a/app/Http/Middleware/UseTransaction.php b/app/Http/Middleware/UseTransaction.php index 5cdca62804..3e7090b817 100644 --- a/app/Http/Middleware/UseTransaction.php +++ b/app/Http/Middleware/UseTransaction.php @@ -25,20 +25,11 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -/** - * Middleware to wrap a request in a transaction. - */ class UseTransaction implements MiddlewareInterface { // If a transaction deadlock occurs, try again. private const int DEADLOCK_RETRY_ATTEMPTS = 3; - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { DB::connection()->transaction(static function () use ($request, $handler, &$response): void { diff --git a/app/Module/CheckForNewVersion.php b/app/Module/CheckForNewVersion.php index c8a695feaf..6649c1e37a 100644 --- a/app/Module/CheckForNewVersion.php +++ b/app/Module/CheckForNewVersion.php @@ -66,12 +66,6 @@ class CheckForNewVersion extends AbstractModule implements MiddlewareInterface return I18N::translate('Send an email to all administrators when an upgrade is available.'); } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if ($this->upgrade_service->isUpgradeAvailable()) { diff --git a/app/Module/HitCountFooterModule.php b/app/Module/HitCountFooterModule.php index 2a0ae692e8..31a3ebea74 100644 --- a/app/Module/HitCountFooterModule.php +++ b/app/Module/HitCountFooterModule.php @@ -109,12 +109,6 @@ class HitCountFooterModule extends AbstractModule implements ModuleFooterInterfa ]); } - /** - * @param ServerRequestInterface $request - * @param RequestHandlerInterface $handler - * - * @return ResponseInterface - */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $route = Validator::attributes($request)->route(); diff --git a/app/Webtrees.php b/app/Webtrees.php index 66a9497b28..671357a449 100644 --- a/app/Webtrees.php +++ b/app/Webtrees.php @@ -67,6 +67,7 @@ use Fisharebest\Webtrees\Http\Middleware\ReadConfigIni; use Fisharebest\Webtrees\Http\Middleware\RegisterGedcomTags; use Fisharebest\Webtrees\Http\Middleware\Router; use Fisharebest\Webtrees\Http\Middleware\SecurityHeaders; +use Fisharebest\Webtrees\Http\Middleware\DebugLogger; use Fisharebest\Webtrees\Http\Middleware\UpdateDatabaseSchema; use Fisharebest\Webtrees\Http\Middleware\UseDatabase; use Fisharebest\Webtrees\Http\Middleware\UseLanguage; @@ -159,6 +160,7 @@ class Webtrees CompressResponse::class, BadBotBlocker::class, UseDatabase::class, + DebugLogger::class, UpdateDatabaseSchema::class, UseSession::class, UseLanguage::class, |
