Neue PSR-15-Middleware ClientErrorMiddleware: nimmt Browser-Fehler des
React-Frontends als JSON {url, message, stack, release, userAgent}
entgegen und antwortet 204 ohne Body. Schutz: 30 Meldungen pro Minute
und IP (Sliding Window ueber TYPO3-RateLimiter, 429 + Retry-After),
8-KB-Body-Limit (413, Content-Length und tatsaechliche Bytes), kein
JSON-Objekt oder leere message = 400, GET = 405. Keine Session, keine
Cookies; der /_json-Praefix funktioniert ebenfalls.
Speicherung in der neuen Tabelle tx_vitec_clienterrorlog mit
anonymisierter IP (IPv4 letztes Oktett 0, IPv6 /48). Sichtbar als
Tabelle "Client errors (last 24 h)" im Modul VITEC SSR (mit Stack als
Aufklapper) und als Zeile "Client errors reported (24 h / 7 d)" in der
Dashboard-Kachel VITEC: SSR statistics.
CLI vitec:client-error-cleanup [--days=30] loescht Eintraege aelter als
30 Tage (taeglich per Cron).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
96 lines
3.4 KiB
PHP
Executable File
96 lines
3.4 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Frontend middleware registration for EXT:vitec.
|
|
*/
|
|
return [
|
|
'frontend' => [
|
|
'vitec/json-prefix-rewrite' => [
|
|
'target' => \Evomedien\Vitec\Middleware\JsonPrefixRewrite::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
'before' => [
|
|
'typo3/cms-frontend/site',
|
|
'vitec/form-submission',
|
|
'vitec/success-story-path-rewrite',
|
|
'vitec/download-file',
|
|
],
|
|
],
|
|
'vitec/form-submission' => [
|
|
'target' => \Evomedien\Vitec\Middleware\FormSubmissionMiddleware::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
'before' => [
|
|
'typo3/cms-frontend/site',
|
|
],
|
|
],
|
|
'vitec/success-story-path-rewrite' => [
|
|
'target' => \Evomedien\Vitec\Middleware\SuccessStoryPathRewrite::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
'before' => [
|
|
'typo3/cms-frontend/site',
|
|
],
|
|
],
|
|
'vitec/download-file' => [
|
|
'target' => \Evomedien\Vitec\Middleware\DownloadFileMiddleware::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
'before' => [
|
|
'typo3/cms-frontend/site',
|
|
],
|
|
],
|
|
// Self-healing sync of the SSR routing flag file against the
|
|
// Site Set switch vitec.ssr.enabled (no core event fires on
|
|
// settings save, hence per-request sync; cheap file_exists when
|
|
// nothing changed). Also registered for the backend below.
|
|
'vitec/sync-ssr-flag' => [
|
|
'target' => \Evomedien\Vitec\Middleware\SyncSsrFlag::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
],
|
|
// Client error reports from the React frontend:
|
|
// POST /api/vitec/client-error -> tx_vitec_clienterrorlog, 204
|
|
// (0072-FE section 4 / 0077-BE). Answers before site resolution,
|
|
// no session, rate-limited per IP, 8 KB body limit. Placed after
|
|
// the /_json strip so the prefixed form reaches it as well.
|
|
'vitec/client-error' => [
|
|
'target' => \Evomedien\Vitec\Middleware\ClientErrorMiddleware::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
'vitec/json-prefix-rewrite',
|
|
],
|
|
'before' => [
|
|
'typo3/cms-frontend/site',
|
|
'vitec/form-submission',
|
|
],
|
|
],
|
|
// Outer response filter: Cache-Control: no-cache + ETag/304 for
|
|
// /_json (tickets 0011-FE / 0055-BE).
|
|
'vitec/json-cache-headers' => [
|
|
'target' => \Evomedien\Vitec\Middleware\JsonCacheHeaders::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
'before' => [
|
|
'vitec/json-prefix-rewrite',
|
|
],
|
|
],
|
|
],
|
|
'backend' => [
|
|
'vitec/sync-ssr-flag' => [
|
|
'target' => \Evomedien\Vitec\Middleware\SyncSsrFlag::class,
|
|
'after' => [
|
|
'typo3/cms-core/normalized-params-attribute',
|
|
],
|
|
],
|
|
],
|
|
];
|