/** * Handles the given Exception. * * @param Throwable|Exception $exception The Exception to handle * @param bool $showTrace */ public static function handleException($exception, $showTrace = true) { rex_logger::logException($exception); while (ob_get_level()) { ob_end_clean(); } $status = rex_response::HTTP_INTERNAL_ERROR; if ($exception instanceof rex_http_exception && $exception->getHttpCode()) { $status = $exception->getHttpCode(); } rex_response::setStatus($status); if (rex::isSetup() || rex::isDebugMode() || ($user = rex_backend_login::createUser()) && $user->isAdmin()) { // TODO add a beautiful error page with usefull debugging info $buf = ''; $buf .= '<pre>'; $buf .= '"' . get_class($exception) . '" thrown in ' . $exception->getFile() . ' on line ' . $exception->getLine() . "\n"; if ($exception->getMessage()) { $buf .= '<b>' . ($exception instanceof ErrorException ? self::getErrorType($exception->getSeverity()) . ': ' : '') . $exception->getMessage() . "</b>\n"; } $cause = $exception->getPrevious(); while ($cause) { $buf .= "\n"; $buf .= 'caused by ' . get_class($cause) . ' in ' . $cause->getFile() . ' on line ' . $cause->getLine() . "\n"; if ($cause->getMessage()) { $buf .= '<b>' . ($cause instanceof ErrorException ? self::getErrorType($cause->getSeverity()) . ': ' : '') . $cause->getMessage() . "</b>\n"; } $cause = $cause->getPrevious(); } if ($showTrace) { $buf .= "\n"; $buf .= $exception->getTraceAsString(); } if (!rex::isSetup() && rex::isBackend() && !rex::isSafeMode()) { $buf .= "\n\n"; $buf .= '<a href="' . rex_url::backendPage('packages', ['safemode' => 1]) . '">activate safe mode</a>'; } $buf .= '</pre>'; } else { // TODO small error page, without debug infos $buf = 'Oooops, an internal error occured!'; } rex_response::sendContent($buf); exit; }
$login = new rex_backend_login(); rex::setProperty('login', $login); $rex_user_login = rex_post('rex_user_login', 'string'); $rex_user_psw = rex_post('rex_user_psw', 'string'); $rex_user_stay_logged_in = rex_post('rex_user_stay_logged_in', 'boolean', false); if (rex_get('rex_logout', 'boolean')) { $login->setLogout(true); } // the server side encryption of pw is only required // when not already encrypted by client using javascript $login->setLogin($rex_user_login, $rex_user_psw, rex_post('javascript', 'boolean')); $login->setStayLoggedIn($rex_user_stay_logged_in); $loginCheck = $login->checkLogin(); $rex_user_loginmessage = ''; if ($loginCheck !== true) { rex_response::setStatus(rex_response::HTTP_UNAUTHORIZED); // login failed $rex_user_loginmessage = $login->getMessage(); // Fehlermeldung von der Datenbank if (is_string($loginCheck)) { $rex_user_loginmessage = $loginCheck; } $pages['login'] = rex_be_controller::getLoginPage(); $page = 'login'; rex_be_controller::setCurrentPage('login'); } else { // Userspezifische Sprache einstellen $user = $login->getUser(); $lang = $user->getLanguage(); if ($lang && $lang != 'default' && $lang != rex::getProperty('lang')) { rex_i18n::setLocale($lang);
public static function checkPage(rex_user $user) { $page = self::getCurrentPageObject(); // --- page pruefen und benoetigte rechte checken if (!$page || !$page->checkPermission($user)) { // --- fallback zur user startpage -> rechte checken $page = self::getPageObject($user->getStartPage()); if (!$page || !$page->checkPermission($user)) { // --- fallback zur system startpage -> rechte checken $page = self::getPageObject(rex::getProperty('start_page')); if (!$page || !$page->checkPermission($user)) { // --- fallback zur profile page $page = self::getPageObject('profile'); } } rex_response::setStatus(rex_response::HTTP_FORBIDDEN); rex_response::sendRedirect($page->getHref()); } if ($page !== ($leaf = $page->getFirstSubpagesLeaf())) { rex_response::setStatus(rex_response::HTTP_MOVED_PERMANENTLY); $url = $leaf->hasHref() ? $leaf->getHref() : rex_context::restore()->getUrl(['page' => $leaf->getFullKey()], false); rex_response::sendRedirect($url); } }
if (rex_be_controller::getCurrentPagePart(1) == 'content') { rex_be_controller::getPageObject('structure')->setIsActive(true); } }); if (rex_be_controller::getCurrentPagePart(1) == 'system') { rex_system_setting::register(new rex_system_setting_default_template_id()); } rex_extension::register('CLANG_DELETED', function (rex_extension_point $ep) { $del = rex_sql::factory(); $del->setQuery('delete from ' . rex::getTablePrefix() . "article_slice where clang_id='" . $ep->getParam('clang')->getId() . "'"); }); } else { rex_extension::register('FE_OUTPUT', function (rex_extension_point $ep) { $content = $ep->getSubject(); $article = new rex_article_content(); $article->setCLang(rex_clang::getCurrentId()); if ($article->setArticleId(rex_article::getCurrentId())) { $content .= $article->getArticleTemplate(); } else { $content .= 'Kein Startartikel selektiert / No starting Article selected. Please click here to enter <a href="' . rex_url::backendController() . '">redaxo</a>'; rex_response::sendPage($content); exit; } $art_id = $article->getArticleId(); if ($art_id == rex_article::getNotfoundArticleId() && $art_id != rex_article::getSiteStartArticleId()) { rex_response::setStatus(rex_response::HTTP_NOT_FOUND); } // ----- inhalt ausgeben rex_response::sendPage($content, $article->getValue('updatedate')); }); }
public static function checkPagePermissions(rex_user $user) { $check = function (rex_be_page $page) use(&$check, $user) { if (!$page->checkPermission($user)) { return false; } $subpages = $page->getSubpages(); foreach ($subpages as $key => $subpage) { if (!$check($subpage)) { unset($subpages[$key]); } } $page->setSubpages($subpages); return true; }; foreach (self::$pages as $key => $page) { if (!$check($page)) { unset(self::$pages[$key]); } } self::$pageObject = null; $page = self::getCurrentPageObject(); // --- page pruefen und benoetigte rechte checken if (!$page) { // --- fallback zur user startpage -> rechte checken $page = self::getPageObject($user->getStartPage()); if (!$page) { // --- fallback zur system startpage -> rechte checken $page = self::getPageObject(rex::getProperty('start_page')); if (!$page) { // --- fallback zur profile page $page = self::getPageObject('profile'); } } rex_response::setStatus(rex_response::HTTP_NOT_FOUND); rex_response::sendRedirect($page->getHref()); } if ($page !== ($leaf = $page->getFirstSubpagesLeaf())) { rex_response::setStatus(rex_response::HTTP_MOVED_PERMANENTLY); $url = $leaf->hasHref() ? $leaf->getHref() : rex_context::restore()->getUrl(['page' => $leaf->getFullKey()], false); rex_response::sendRedirect($url); } }