openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
index.php | 20++++++++++++++++----
modules/cms-core/Dispatcher.class.php | 3++-
modules/cms-core/action/FolderAction.class.php | 2+-
modules/util/Http.class.php | 28++++++++++++++++------------
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() {