summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2026-02-07 12:43:24 +0000
committerGreg Roach <greg@subaqua.co.uk>2026-02-07 13:42:46 +0000
commit0714892d0a8fa1702559149068e8f0f8e8d58a0e (patch)
treef09a5f4ecb6df60590cb7c25cd338df835b936c9 /app
parente468574bd999c26fe99e1853eafc731f054511c9 (diff)
downloadwebtrees-0714892d0a8fa1702559149068e8f0f8e8d58a0e.tar.gz
webtrees-0714892d0a8fa1702559149068e8f0f8e8d58a0e.tar.bz2
webtrees-0714892d0a8fa1702559149068e8f0f8e8d58a0e.zip
Move SQL logger to its own class
Diffstat (limited to 'app')
-rw-r--r--app/Http/Middleware/AuthAdministrator.php9
-rw-r--r--app/Http/Middleware/AuthEditor.php9
-rw-r--r--app/Http/Middleware/AuthLoggedIn.php9
-rw-r--r--app/Http/Middleware/AuthManager.php9
-rw-r--r--app/Http/Middleware/AuthMember.php9
-rw-r--r--app/Http/Middleware/AuthModerator.php9
-rw-r--r--app/Http/Middleware/AuthNotRobot.php9
-rw-r--r--app/Http/Middleware/BadBotBlocker.php3
-rw-r--r--app/Http/Middleware/BaseUrl.php9
-rw-r--r--app/Http/Middleware/BootModules.php9
-rw-r--r--app/Http/Middleware/CheckCsrf.php9
-rw-r--r--app/Http/Middleware/CheckForMaintenanceMode.php3
-rw-r--r--app/Http/Middleware/CheckForNewVersion.php9
-rw-r--r--app/Http/Middleware/ClientIp.php9
-rw-r--r--app/Http/Middleware/CompressResponse.php9
-rw-r--r--app/Http/Middleware/ContentLength.php9
-rw-r--r--app/Http/Middleware/DebugLogger.php83
-rw-r--r--app/Http/Middleware/DoHousekeeping.php9
-rw-r--r--app/Http/Middleware/EmitResponse.php3
-rw-r--r--app/Http/Middleware/HandleExceptions.php3
-rw-r--r--app/Http/Middleware/LoadRoutes.php9
-rw-r--r--app/Http/Middleware/PublicFiles.php3
-rw-r--r--app/Http/Middleware/ReadConfigIni.php9
-rw-r--r--app/Http/Middleware/RegisterGedcomTags.php9
-rw-r--r--app/Http/Middleware/RequestHandler.php9
-rw-r--r--app/Http/Middleware/Router.php3
-rw-r--r--app/Http/Middleware/SecurityHeaders.php9
-rw-r--r--app/Http/Middleware/UpdateDatabaseSchema.php3
-rw-r--r--app/Http/Middleware/UseDatabase.php47
-rw-r--r--app/Http/Middleware/UseLanguage.php9
-rw-r--r--app/Http/Middleware/UseSession.php9
-rw-r--r--app/Http/Middleware/UseTheme.php9
-rw-r--r--app/Http/Middleware/UseTransaction.php9
-rw-r--r--app/Module/CheckForNewVersion.php6
-rw-r--r--app/Module/HitCountFooterModule.php6
-rw-r--r--app/Webtrees.php2
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,