Exemplo n.º 1
0
 /**
  * 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;
 }
Exemplo n.º 2
0
 $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);
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
        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'));
    });
}
Exemplo n.º 5
0
 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);
     }
 }