43 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
| <?php
 | |
| 
 | |
| namespace App\Core;
 | |
| 
 | |
| use Session;
 | |
| use Feedback;
 | |
| 
 | |
| class Router {
 | |
|     /**
 | |
|      * Check session validity and handle redirection for protected pages.
 | |
|      * Returns current username if session is valid, null otherwise.
 | |
|      */
 | |
|     public static function checkAuth(array $config, string $app_root, array $public_pages, string $page): ?string {
 | |
|         $validSession = Session::isValidSession();
 | |
|         if ($validSession) {
 | |
|             return Session::getUsername();
 | |
|         }
 | |
| 
 | |
|         if (!in_array($page, $public_pages, true)) {
 | |
|             // flash session timeout if needed
 | |
|             if (isset($_SESSION['LAST_ACTIVITY']) && !isset($_SESSION['session_timeout_shown'])) {
 | |
|                 Feedback::flash('LOGIN', 'SESSION_TIMEOUT');
 | |
|                 $_SESSION['session_timeout_shown'] = true;
 | |
|             }
 | |
|             // preserve flash messages
 | |
|             $flash_messages = $_SESSION['flash_messages'] ?? [];
 | |
|             Session::cleanup($config);
 | |
|             $_SESSION['flash_messages'] = $flash_messages;
 | |
| 
 | |
|             // build login URL
 | |
|             $loginUrl = $app_root . '?page=login';
 | |
|             $trimmed = trim($page, '/?');
 | |
|             if (!in_array($trimmed, INVALID_REDIRECT_PAGES, true)) {
 | |
|                 $loginUrl .= '&redirect=' . urlencode($_SERVER['REQUEST_URI']);
 | |
|             }
 | |
|             header('Location: ' . $loginUrl);
 | |
|             exit();
 | |
|         }
 | |
| 
 | |
|         return null;
 | |
|     }
 | |
| }
 |