From d4261d9a8ea627d6cf3cf2dad48f86e418ef9309 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Tue, 17 Dec 2024 08:20:20 +0000 Subject: [PATCH] fix personal redirect, fixes #5030 Closes #5030 Merge request studip/studip!3769 --- lib/middleware/AuthenticationMiddleware.php | 4 +++- lib/middleware/SeminarOpenMiddleware.php | 19 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/middleware/AuthenticationMiddleware.php b/lib/middleware/AuthenticationMiddleware.php index 739ce894261..f86b06730f0 100644 --- a/lib/middleware/AuthenticationMiddleware.php +++ b/lib/middleware/AuthenticationMiddleware.php @@ -32,7 +32,9 @@ final class AuthenticationMiddleware implements MiddlewareInterface if ($this->auth_manager->start()) { return $handler->handle($request); } else { - $_SESSION['redirect_after_login'] = \Request::url(); + if (!match_route('dispatch.php/start')) { + $_SESSION['redirect_after_login'] = \Request::url(); + } $response = $this->response_factory->createResponse(302); return $response->withHeader('Location', \URLHelper::getURL('dispatch.php/login')); } diff --git a/lib/middleware/SeminarOpenMiddleware.php b/lib/middleware/SeminarOpenMiddleware.php index 108e0edbf3e..20d7f9e1f75 100644 --- a/lib/middleware/SeminarOpenMiddleware.php +++ b/lib/middleware/SeminarOpenMiddleware.php @@ -61,6 +61,7 @@ final class SeminarOpenMiddleware implements MiddlewareInterface $jump_page = 'dispatch.php/contents/overview'; break; } + $response = $this->response_factory->createResponse(302); return $response->withHeader('Location', \URLHelper::getURL($jump_page)); } @@ -97,10 +98,7 @@ final class SeminarOpenMiddleware implements MiddlewareInterface // user init starts here if (is_object($user) && $user->id != "nobody") { - if ($_SESSION['SessionStart'] > \UserConfig::get( - $user->id - )->CURRENT_LOGIN_TIMESTAMP - ) { // just logged in + if ($_SESSION['SessionStart'] > \UserConfig::get($user->id)->CURRENT_LOGIN_TIMESTAMP) { // just logged in // store old CURRENT_LOGIN in LAST_LOGIN and set CURRENT_LOGIN to start of session \UserConfig::get($user->id)->store( 'LAST_LOGIN_TIMESTAMP', \UserConfig::get($user->id)->CURRENT_LOGIN_TIMESTAMP @@ -110,10 +108,10 @@ final class SeminarOpenMiddleware implements MiddlewareInterface $current_sem = \Semester::findDefault(); $_SESSION['_default_sem'] = $current_sem->semester_id ?? null; //redirect user to another page if he want to, redirect is deferred to allow plugins to catch the UserDidLogin notification - if (\UserConfig::get($user->id)->PERSONAL_STARTPAGE > 0 && !isset($_SESSION['redirect_after_login']) - && !$perm->have_perm( - "root" - ) + if ( + \UserConfig::get($user->id)->PERSONAL_STARTPAGE > 0 + && !isset($_SESSION['redirect_after_login']) + && !$perm->have_perm('root') ) { $seminar_open_redirected = true; } @@ -247,11 +245,12 @@ final class SeminarOpenMiddleware implements MiddlewareInterface } if ($seminar_open_redirected) { - $this->startpageRedirect(\UserConfig::get($user->id)->PERSONAL_STARTPAGE); + return $this->startpageRedirect(\UserConfig::get($user->id)->PERSONAL_STARTPAGE); } // Show terms on first login - if (is_object($GLOBALS['user']) + if ( + is_object($GLOBALS['user']) && $GLOBALS['user']->needsToAcceptTerms() && !match_route('dispatch.php/terms') && !match_route('dispatch.php/siteinfo/*') -- GitLab