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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |