Quelltext des aktuellen Standes
<?php
declare(strict_types=1);
use OpenNIT\Core\RemoteMessage;
/**
* Antwortet ein angebundenes System mit einer Fehlerseite statt mit Daten,
* steht deren Text in der Oberfläche. Er muss lesbar sein – und darf nicht
* das Stylesheet der fremden Seite mitbringen.
*/
return static function (): void {
$tomcat = <<<'HTML'
<!doctype html><html><head><title>HTTP Status 500 – Internal Server Error</title>
<style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;}
h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;}</style></head>
<body><h1>HTTP Status 500 – Internal Server Error</h1><hr/><p><b>Type</b> Exception Report</p></body></html>
HTML;
test('Stil- und Skriptblöcke verschwinden samt ihrem Inhalt', function () use ($tomcat) {
$text = RemoteMessage::lesbar($tomcat);
assertFalse(str_contains($text, 'font-family'), 'CSS steht noch in der Meldung');
assertFalse(str_contains($text, '#525D76'), 'Farbwerte stehen noch in der Meldung');
assertFalse(str_contains($text, '<'), 'Markup steht noch in der Meldung');
assertTrue(str_contains($text, 'HTTP Status 500'), 'Die eigentliche Aussage fehlt');
});
test('Mehrfacher Leerraum wird zusammengezogen, die Länge begrenzt', function () {
assertSame('a b c', RemoteMessage::lesbar("a \n\n b\tc"));
assertSame(12, mb_strlen(RemoteMessage::lesbar(str_repeat('x', 500), 12)));
assertSame('', RemoteMessage::lesbar(' '));
});
test('Entitäten werden aufgelöst', function () {
assertSame('Fehler: Zugriff verweigert („gesperrt“)', RemoteMessage::lesbar('Fehler: Zugriff verweigert („gesperrt“)'));
});
test('Jede Stelle, die eine fremde Antwort anzeigt, nutzt den Helfer', function () {
$wurzel = dirname(__DIR__);
foreach (['src/Services/RelutionSyncService.php', 'src/Xdr/DefenderProvider.php', 'src/Xdr/TrendVisionProvider.php'] as $datei) {
$quelle = (string)file_get_contents($wurzel . '/' . $datei);
assertTrue(str_contains($quelle, 'RemoteMessage::lesbar'), $datei . ' schneidet die Antwort selbst zu');
assertFalse(str_contains($quelle, 'substr(strip_tags((string)$raw)'), $datei . ' nutzt noch den alten Weg');
}
});
};