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