commit 647af023606984f543955ae068b708eda3738a02
parent ea040389adb001b0acf733f11d19862c053add26
Author: Jan Dankert <devnull@localhost>
Date: Sat, 30 Dec 2017 02:32:24 +0100
Schönere HTML-Serverfehlermeldung. Außerdem müssen noch an ganz vielen Stellen die HTTP-Fehler in Exceptions umgebaut werden...
Diffstat:
4 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/index.php b/index.php
@@ -5,13 +5,25 @@ require('modules/cms-ui/require.php');
use cms_ui\UI;
try {
-
UI::execute();
} catch (Exception $e) {
- echo '<h2>CMS UI Error</h2>';
- echo '<pre>' . $e->getMessage() . '</pre>';
+if (!headers_sent())
+ header('HTTP/1.0 500 Internal Server Error');
-}
+?><!DOCTYPE html>
+<html lang="en">
+<head>
+ <!-- Simple HttpErrorPages | MIT License | https://github.com/AndiDittrich/HttpErrorPages -->
+ <meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title>We've got some trouble | Service currently unavailable</title>
+ <style type="text/css">/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}/*! Simple HttpErrorPages | MIT X11 License | https://github.com/AndiDittrich/HttpErrorPages */body,html{width:100%;height:100%;background-color:#21232a}body{color:#fff;text-align:center;text-shadow:0 2px 4px rgba(0,0,0,.5);padding:0;min-height:100%;-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,.8);box-shadow:inset 0 0 100px rgba(0,0,0,.8);display:table;font-family:"Open Sans",Arial,sans-serif}h1{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;font-size:36px}h1 small{font-size:68%;font-weight:400;line-height:1;color:#777}a{text-decoration:none;color:#fff;font-size:inherit;border-bottom:dotted 1px #707070}.lead{color:silver;font-size:21px;line-height:1.4}.cover{display:table-cell;vertical-align:middle;padding:0 20px}footer{position:fixed;width:100%;height:40px;left:0;bottom:0;color:#a0a0a0;font-size:14px}</style>
+</head>
+<body>
+<div class="cover"><h1>Ooooh, sorry. Our service is currently unavailable... <small>Server Error 500</small></h1><p class="lead"><?php echo $e->getMessage() ?><br/></p></div>
+</body>
+</html><?php
+
+}
diff --git a/modules/cms-core/Dispatcher.class.php b/modules/cms-core/Dispatcher.class.php
@@ -6,6 +6,7 @@
namespace cms;
use Configuration;
+use DomainException;
use Http;
use http\Exception;
use Logger;
@@ -167,7 +168,7 @@ class Dispatcher
if (is_object($db)) {
$ok = $db->connect();
if (!$ok)
- Http::sendStatus('503', 'Service Unavailable', 'Database is not available: ' . $db->error);
+ throw new DomainException('Database is not available: ' . $db->error);
Session::setDatabase($db);
$db->start();
diff --git a/modules/cms-core/action/FolderAction.class.php b/modules/cms-core/action/FolderAction.class.php
@@ -874,7 +874,7 @@ class FolderAction extends ObjectAction
break;
default:
- Http::sendStatus(400,'Bad request','Unknown reordertype: '.$type );
+ throw new \InvalidArgumentException('Unknown reordertype: '.$type );
}
// Und jetzt die neu ermittelte Reihenfolge speichern
diff --git a/modules/util/Http.class.php b/modules/util/Http.class.php
@@ -372,7 +372,7 @@ class Http
* auch 'de' (als Fallback) ermittelt.
*
* @static
- * @return Array
+ * @return array
*/
public static function getLanguages()
{
@@ -496,7 +496,7 @@ class Http
* @param String $message Eigener Hinweistext (Default: leer)
* @param String $reason Technischer Grund (Default: leer)
*/
- public static function sendStatus( $status=501,$text='Internal Server Error',$message='',$reason='' )
+ private static function sendStatus( $status=501,$text='Internal Server Error',$message='',$reason='' )
{
if ( headers_sent() )
{
@@ -531,16 +531,20 @@ class Http
$reason = htmlentities($reason );
$signature = OR_TITLE.' '.OR_VERSION.' '.getenv('SERVER_SOFTWARE');
echo <<<HTML
-<html>
-<head><title>$status $text - OpenRat</title></head>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <!-- Simple HttpErrorPages | MIT License | https://github.com/AndiDittrich/HttpErrorPages -->
+ <meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title>We've got some trouble | Service currently unavailable</title>
+ <style type="text/css">/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}/*! Simple HttpErrorPages | MIT X11 License | https://github.com/AndiDittrich/HttpErrorPages */body,html{width:100%;height:100%;background-color:#21232a}body{color:#fff;text-align:center;text-shadow:0 2px 4px rgba(0,0,0,.5);padding:0;min-height:100%;-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,.8);box-shadow:inset 0 0 100px rgba(0,0,0,.8);display:table;font-family:"Open Sans",Arial,sans-serif}h1{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;font-size:36px}h1 small{font-size:68%;font-weight:400;line-height:1;color:#777}a{text-decoration:none;color:#fff;font-size:inherit;border-bottom:dotted 1px #707070}.lead{color:silver;font-size:21px;line-height:1.4}.cover{display:table-cell;vertical-align:middle;padding:0 20px}footer{position:fixed;width:100%;height:40px;left:0;bottom:0;color:#a0a0a0;font-size:14px}</style>
+</head>
<body>
-<h1>$text</h1>
-<p>$message</p>
-<pre>$reason</pre>
-<hr>
-<address>$signature</adddress>
+<div class="cover"><h1>Ooooh, sorry. This service is currently unavailable... <small>$text $status</small></h1><p class="lead">$message</p></div>
+
</body>
-</html>
+</html><?php
+
HTML;
}
exit;
@@ -550,7 +554,7 @@ HTML;
/**
* Liefert den Mime-Type, den der Browser (oder besser: HTTP-Client) wünscht.
*
- * @return Array Mime-Typen, welche vom User-Agent akzeptiert werden.
+ * @return array Mime-Typen, welche vom User-Agent akzeptiert werden.
*/
public static function getAccept()
{
@@ -592,7 +596,7 @@ HTML;
* Ermittelt den TCP/IP-Port des Clients.
* Achtung, bei Proxy-Zugriffen kann dies der Port des Proxys sein.
*
- * @return TCP/IP-Port
+ * @return string TCP/IP-Port
*/
public static function getClientPort()
{