From 1cd587fa0413bdbae1fc3bdca10ccc2a1fee7c07 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Mon, 16 Dec 2024 07:35:56 +0000 Subject: [PATCH] fix coding style and some bugs, re #1552 Merge request studip/studip!3764 --- app/controllers/login.php | 53 ++++---- app/views/login/index.php | 6 +- lib/authentication/Manager.php | 114 ++++++++++-------- .../auth_plugins/StudipAuthAbstract.php | 4 +- lib/session/CacheSessionHandler.php | 55 ++++----- lib/session/DbSessionHandler.php | 78 ++++++------ lib/session/Manager.php | 68 +++-------- public/plugins.php | 9 -- 8 files changed, 186 insertions(+), 201 deletions(-) diff --git a/app/controllers/login.php b/app/controllers/login.php index 1364362e11f..ea8935c9995 100644 --- a/app/controllers/login.php +++ b/app/controllers/login.php @@ -2,7 +2,6 @@ /** * login.php - login * - * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of @@ -22,9 +21,9 @@ class LoginController extends AuthenticatedController parent::__construct($dispatcher); } - public function index_action() + public function index_action(): void { - if ($GLOBALS['user']->id !== 'nobody') { + if (User::findCurrent()) { $this->redirect(URLHelper::getURL('dispatch.php/start')); return; } @@ -64,11 +63,17 @@ class LoginController extends AuthenticatedController if (Request::isPost()) { CSRFProtection::verifyUnsafeRequest(); - $check_auth = StudipAuthAbstract::CheckAuthentication(Request::get('loginname'), Request::get('password')); + $check_auth = StudipAuthAbstract::CheckAuthentication( + Request::get('loginname'), + Request::get('password') + ); if ($check_auth['uid']) { $uid = $check_auth['uid']; - if (isset($check_auth['need_email_activation']) && $check_auth['need_email_activation'] == $uid) { + if ( + isset($check_auth['need_email_activation']) + && $check_auth['need_email_activation'] === $uid + ) { $this->need_email_activation = $uid; $_SESSION['semi_logged_in'] = $uid; $this->redirect('login/activate_email', ['uid' => $uid]); @@ -76,7 +81,7 @@ class LoginController extends AuthenticatedController } else { auth()->setAuthenticatedUser($check_auth['user']); Metrics::increment('core.login.succeeded'); - sess()->regenerateId(['auth', '_language', 'phpCAS', 'contrast']); + sess()->regenerateId(['auth', '_language', 'phpCAS', 'contrast', 'redirect_after_login']); if (isset($_SESSION['redirect_after_login'] )) { $this->redirect($_SESSION['redirect_after_login']); return; @@ -95,20 +100,26 @@ class LoginController extends AuthenticatedController PageLayout::postException(_('Bei der Anmeldung trat ein Fehler auf!'), $this->error_msg); $this->has_login_error = true; } - $this->uname = (isset($this->auth["uname"]) ? $this->auth["uname"] : Request::username('loginname')); - $this->self_registration_activated = Config::get()->ENABLE_SELF_REGISTRATION; + $this->uname = $this->auth['uname'] ?? Request::username('loginname'); + $this->self_registration_activated = Config::get()->getValue('ENABLE_SELF_REGISTRATION'); + + $this->news_entries = []; + if (Config::get()->getValue('LOGIN_NEWS_VISIBILITY')) { + $news_entries = StudipNews::GetNewsByRange('login', true); + $this->news_entries = array_values($news_entries); + } - $news_entries = StudipNews::GetNewsByRange('login', true, false); - if (class_exists('LoginFaq')) { - $this->faq_entries = LoginFaq::findBySQL("1 ORDER BY `faq_id` ASC"); + $this->faq_entries = []; + if (Config::get()->getValue('LOGIN_FAQ_VISIBILITY')) { + $this->faq_entries = LoginFaq::findBySQL("1 ORDER BY `faq_id`"); } - $this->news_entries = array_values($news_entries); + PageLayout::setHelpKeyword('Basis.AnmeldungLogin'); PageLayout::disableSidebar(); PageLayout::setBodyElementId('login'); } - public function activate_email_action() + public function activate_email_action(): void { PageLayout::setTitle(_('E-Mail Aktivierung')); $uid = Request::option('uid'); @@ -126,34 +137,34 @@ class LoginController extends AuthenticatedController unset($_SESSION['semi_logged_in']); PageLayout::postSuccess(_('Ihre E-Mail-Adresse wurde erfolgreich geändert.')); $this->redirect(URLHelper::getURL('dispatch.php/start')); - return; - } else if ($key == '') { + } else if (!$key) { PageLayout::postInfo(_('Ihre E-Mail-Adresse ist bereits geändert.')); $this->redirect(URLHelper::getURL('dispatch.php/start')); - return; } else { if (Request::get('key')) { PageLayout::postError(_("Falscher Bestätigungscode.")); } $this->mail_explain = true; - if ($_SESSION['semi_logged_in'] == Request::option('uid')) { + if ($_SESSION['semi_logged_in'] === Request::option('uid')) { $this->reenter_mail = true; } else { PageLayout::postInfo(_('Sie können sich einloggen und sich den Bestätigungscode neu oder an eine andere E-Mail-Adresse schicken lassen.')); $this->redirect(URLHelper::getURL('dispatch.php/start')); - return; } } // checking semi_logged_in is important to avoid abuse - } else if (Request::get('email1') && Request::get('email2') && $_SESSION['semi_logged_in'] == Request::option('uid')) { + } elseif ( + Request::get('email1') + && Request::get('email2') + && $_SESSION['semi_logged_in'] === Request::option('uid') + ) { if (Request::get('email1') == Request::get('email2')) { // change mail $tmp_user = User::find(Request::option('uid')); if ($tmp_user && $tmp_user->changeEmail(Request::get('email1'), true)) { $_SESSION['semi_logged_in'] = false; } - } else { PageLayout::postError(_('Die eingegebenen E-Mail-Adressen stimmen nicht überein. Bitte überprüfen Sie Ihre Eingabe.')); } @@ -164,7 +175,7 @@ class LoginController extends AuthenticatedController } } - public function privacy_info_action() + public function privacy_info_action(): void { // this page must be accessible during visibility decision Config::get()->USER_VISIBILITY_CHECK = false; diff --git a/app/views/login/index.php b/app/views/login/index.php index 7e70089022d..fc06e62a235 100644 --- a/app/views/login/index.php +++ b/app/views/login/index.php @@ -2,6 +2,8 @@ /** * @var bool $has_login_error * @var string $error_msg + * @var LoginFaq[] $faq_entries + * @var StudipNews[] $news_entries */ // Get background images (this should be resolved differently since mobile @@ -25,8 +27,8 @@ if (!match_route('web_migrate.php')) { } $show_login = !(current(StudipAuthAbstract::getInstance()) instanceof StudipAuthSSO) && StudipAuthAbstract::isLoginEnabled(); $show_hidden_login = !$show_login && StudipAuthAbstract::isLoginEnabled(); -$enable_faq = Config::get()->LOGIN_FAQ_VISIBILITY && count($faq_entries) > 0; -$enable_news = Config::get()->LOGIN_NEWS_VISIBILITY && count($news_entries) > 0; +$enable_faq = count($faq_entries) > 0; +$enable_news = count($news_entries) > 0; ?> <main id="content" class="loginpage"> <div id="background-desktop" style="background: url(<?= $bg_desktop ?>) no-repeat top left/cover;"></div> diff --git a/lib/authentication/Manager.php b/lib/authentication/Manager.php index 64419cac723..6055f9f1b54 100644 --- a/lib/authentication/Manager.php +++ b/lib/authentication/Manager.php @@ -11,117 +11,137 @@ */ namespace Studip\Authentication; +use AccessDeniedException; +use Config; +use Metrics; +use Request; +use Seminar_Perm; +use Seminar_User; +use StudipAuthAbstract; +use StudipMail; +use Token; +use User; + class Manager { - private $auth = []; - public function __construct(private $nobody = false) - { + private ?array $auth = []; + + public function __construct( + private bool $nobody = false + ) { } - /** - * @return false|mixed - */ - public function getNobody(): mixed + public function getNobody(): bool { return $this->nobody; } - public function setNobody($allow_nobody = false): void + public function setNobody(bool $allow_nobody = false): void { $this->nobody = $allow_nobody; } - public function start() + public function start(): bool { $this->auth =& $_SESSION['auth']; if (!$this->isAuthenticated()) { $user = null; - if (($provider = \Request::option('sso'))) { - \Metrics::increment('core.sso_login.attempted'); + + $provider = Request::option('sso'); + + if ($provider) { + Metrics::increment('core.sso_login.attempted'); // then do login - $authplugin = \StudipAuthAbstract::GetInstance($provider); + $authplugin = StudipAuthAbstract::GetInstance($provider); if ($authplugin) { $authplugin->authenticateUser('', ''); if ($authplugin->getUser()) { $user = $authplugin->getStudipUser($authplugin->getUser()); - $exp_d = \UserConfig::get($user->id)->EXPIRATION_DATE; - if ($exp_d > 0 && $exp_d < time()) { - throw new \AccessDeniedException( + if ($user->isExpired()) { + throw new AccessDeniedException( _('Dieses Benutzerkonto ist abgelaufen. Wenden Sie sich bitte an die Administration.') ); } - if ($user->locked == 1) { - throw new \AccessDeniedException( + if ($user->locked) { + throw new AccessDeniedException( _('Dieser Benutzer ist gesperrt! Wenden Sie sich bitte an die Administration.') ); } - \Metrics::increment('core.sso_login.succeeded'); + Metrics::increment('core.sso_login.succeeded'); + sess()->regenerateId(['auth', '_language', 'phpCAS', 'contrast']); } } } if (!$user) { - if ($this->nobody && !\Request::get('again')) { - $this->setAuthenticatedUser(\User::build(['user_id' => 'nobody', 'perms' => null])); - } - if (!match_route('dispatch.php/login')) { + if ($this->nobody && !Request::get('again')) { + $this->setAuthenticatedUser(User::build(['user_id' => 'nobody', 'perms' => null])); + } elseif (!match_route('dispatch.php/login')) { return false; } } } else { - if ($this->auth['uid'] !== 'nobody' && \Request::get('again') && !match_route('dispatch.php/login')) { + if ( + $this->auth['uid'] !== 'nobody' + && Request::get('again') + && !match_route('dispatch.php/login') + ) { return false; } - $this->setAuthenticatedUser($this->auth['uid'] !== 'nobody' ? \User::find($this->auth['uid']) : \User::build(['user_id' => 'nobody', 'perms' => null])); + $this->setAuthenticatedUser($this->auth['uid'] !== 'nobody' ? User::find($this->auth['uid']) : User::build(['user_id' => 'nobody', 'perms' => null])); } return true; } - public function isAuthenticated() + public function isAuthenticated(): string|false { if (!is_array($this->auth)) { $this->auth = []; } - if (isset($this->auth['uid']) && $this->auth['uid'] === 'nobody' && (!$this->nobody || \Request::option('again'))) { + if ( + isset($this->auth['uid']) + && $this->auth['uid'] === 'nobody' + && (!$this->nobody || Request::option('again')) + ) { $this->auth['uid'] = null; } - $cfg = \Config::GetInstance(); + + $maintenance_mode = Config::get()->getValue('MAINTENANCE_MODE'); + //check if the user got kicked meanwhile, or if user is locked out + $user = null; if (!empty($this->auth['uid']) && !in_array($this->auth['uid'], ['nobody'])) { - $user = null; - if (isset($GLOBALS['user']) && $GLOBALS['user']->id == $this->auth['uid']) { - $user = $GLOBALS['user']; + if (isset($GLOBALS['user']) && $GLOBALS['user']->id === $this->auth['uid']) { + $user = User::findCurrent(); } else { - $user = \User::find($this->auth['uid']); + $user = User::find($this->auth['uid']); } - $exp_d = $user->username ? \UserConfig::get($user->id)->EXPIRATION_DATE : 0; - if (!$user->username || $user->locked || ($exp_d > 0 && $exp_d < time())) { + if (!$user->username || $user->isBlocked()) { $this->auth = []; } - } elseif ($cfg->getValue('MAINTENANCE_MODE_ENABLE') && \Request::username('loginname')) { - $user = \User::findByUsername(\Request::username('loginname')); + } elseif ($maintenance_mode && Request::username('loginname')) { + $user = User::findByUsername(Request::username('loginname')); } - if ($cfg->getValue('MAINTENANCE_MODE_ENABLE') && $user->perms != 'root') { + if ($maintenance_mode && $user?->perms !== 'root') { $this->auth = []; - throw new \AccessDeniedException(_("Das System befindet sich im Wartungsmodus. Zur Zeit ist kein Zugriff möglich.")); + throw new AccessDeniedException(_("Das System befindet sich im Wartungsmodus. Zur Zeit ist kein Zugriff möglich.")); } - return @$this->auth['uid'] ? : false; + return $this->auth['uid'] ?? false; } - public function setAuthenticatedUser(\User $user): void + public function setAuthenticatedUser(User $user): void { $this->auth['uid'] = $user->id; - $GLOBALS['user'] = new \Seminar_User($user); - $GLOBALS['perm'] = new \Seminar_Perm(); + + $GLOBALS['user'] = new Seminar_User($user); + $GLOBALS['perm'] = new Seminar_Perm(); } - public function sendValidationMail(\User $user = null): void + public function sendValidationMail(?User $user = null): void { - if (is_null($user)) { - $user = \User::findCurrent(); - } + $user ??= User::findCurrent(); // template-variables for the include partial $Zeit = date('H:i:s, d.m.Y', $user->mkdate); @@ -132,9 +152,9 @@ class Manager // (re-)send the confirmation mail $to = $user->email; - $token = \Token::create(7 * 24 * 60 * 60, $user->id); // Link is valid for 1 week + $token = Token::create(7 * 24 * 60 * 60, $user->id); // Link is valid for 1 week $url = $GLOBALS['ABSOLUTE_URI_STUDIP'] . 'dispatch.php/registration/email_validation?secret=' . $token; - $mail = new \StudipMail(); + $mail = new StudipMail(); $abuse = $mail->getReplyToEmail(); $lang_path = getUserLanguagePath($user->id); diff --git a/lib/classes/auth_plugins/StudipAuthAbstract.php b/lib/classes/auth_plugins/StudipAuthAbstract.php index 65da54bc7be..eea4538a416 100644 --- a/lib/classes/auth_plugins/StudipAuthAbstract.php +++ b/lib/classes/auth_plugins/StudipAuthAbstract.php @@ -111,7 +111,7 @@ class StudipAuthAbstract * always use this method to instantiate a plugin object, it will ensure that only one object of each * plugin will exist * @param string $plugin_name name of plugin, if omitted an array with all plugin objects will be returned - * @return mixed either a reference to the plugin with the passed name, or an array with references to all plugins + * @return static|static[] either a reference to the plugin with the passed name, or an array with references to all plugins */ public static function getInstance($plugin_name = false) { @@ -341,7 +341,7 @@ class StudipAuthAbstract * initialize the new user * @param string $username the username to check * @param string $password the password to check - * @return string if authentication succeeds the Stud.IP user , else false + * @return User|false if authentication succeeds the Stud.IP user , else false */ public function authenticateUser($username, $password) { diff --git a/lib/session/CacheSessionHandler.php b/lib/session/CacheSessionHandler.php index c416ceb348e..6eea688e4b5 100644 --- a/lib/session/CacheSessionHandler.php +++ b/lib/session/CacheSessionHandler.php @@ -11,80 +11,71 @@ */ namespace Studip\Session; -class CacheSessionHandler implements \SessionHandlerInterface, \SessionIdInterface, \SessionUpdateTimestampHandlerInterface +use SessionHandlerInterface; +use SessionIdInterface; +use SessionUpdateTimestampHandlerInterface; +use Studip\Cache\Cache; +use Studip\Cache\Factory; + +class CacheSessionHandler implements + SessionHandlerInterface, + SessionIdInterface, + SessionUpdateTimestampHandlerInterface { - const CACHE_KEY_PREFIX = 'session_data'; + private const CACHE_KEY_PREFIX = 'session_data'; - private $session_lifetime = 7200; + private int $session_lifetime = 7200; - private $cache; + private Cache $cache; - public function __construct($session_lifetime = null) + public function __construct(?int $session_lifetime = null) { if ($session_lifetime) { $this->session_lifetime = $session_lifetime; } } - /** - * @inheritDoc - */ public function close(): bool { return true; } - /** - * @inheritDoc - */ - public function destroy($id): bool + public function destroy(string $id): bool { $cache_key = self::CACHE_KEY_PREFIX . '/' . $id; $this->cache->expire($cache_key); return true; } - /** - * @inheritDoc - */ - public function gc($max_lifetime): int|false + public function gc(int $max_lifetime): int|false { return false; } - /** - * @inheritDoc - */ - public function open($path, $name): bool + public function open(string $path, string $name): bool { - $this->cache = \Studip\Cache\Factory::getCache(); + $this->cache = Factory::getCache(); return true; } - /** - * @inheritDoc - */ - public function read($id): string|false + public function read(string $id): string|false { $cache_key = self::CACHE_KEY_PREFIX . '/' . $id; return $this->cache->read($cache_key); } - /** - * @inheritDoc - */ - public function write($id, $data): bool + public function write(string $id, string $data): bool { $cache_key = self::CACHE_KEY_PREFIX . '/' . $id; - return (bool)$this->cache->write($cache_key, $data, $this->session_lifetime); + return $this->cache->write($cache_key, $data, $this->session_lifetime); } public function create_sid(): string { do { $new_id = md5(bin2hex(random_bytes(128))); - } while (!$this->read($new_id)); + } while ($this->read($new_id)); return $new_id; } @@ -95,6 +86,6 @@ class CacheSessionHandler implements \SessionHandlerInterface, \SessionIdInterfa public function validateId(string $id): bool { - return (bool)$this->read($id); + return (bool) $this->read($id); } } diff --git a/lib/session/DbSessionHandler.php b/lib/session/DbSessionHandler.php index 05a31a486e6..d64fe464be8 100644 --- a/lib/session/DbSessionHandler.php +++ b/lib/session/DbSessionHandler.php @@ -11,70 +11,69 @@ */ namespace Studip\Session; -use \DBManager, \Config, \CronjobTask; +use DBManager; +use Config; +use CronjobTask; +use SessionGcJob; +use SessionHandlerInterface; +use SessionIdInterface; +use SessionUpdateTimestampHandlerInterface; -class DbSessionHandler implements \SessionHandlerInterface, \SessionIdInterface, \SessionUpdateTimestampHandlerInterface +class DbSessionHandler implements + SessionHandlerInterface, + SessionIdInterface, + SessionUpdateTimestampHandlerInterface { + private ?string $exists = null; - private $exists; - - /** - * @inheritDoc - */ public function close(): bool { return true; } - /** - * @inheritDoc - */ - public function destroy($id): bool + public function destroy(string $id): bool { - return (bool)DBManager::get()->execute("DELETE FROM session_data WHERE sid = ? LIMIT 1", [$id]); + return (bool) DBManager::get()->execute( + "DELETE FROM session_data WHERE sid = ? LIMIT 1", + [$id] + ); } - /** - * @inheritDoc - */ - public function gc($max_lifetime): false|int + public function gc(int $max_lifetime): false|int { - //bail out if cronjob activated and not called in cli context - if (Config::getInstance()->getValue('CRONJOBS_ENABLE') - && ($task = array_pop(CronjobTask::findByClass('SessionGcJob'))) + // bail out if cronjob activated and not called in cli context + if ( + Config::getInstance()->getValue('CRONJOBS_ENABLE') + && ($task = CronjobTask::findOneByClass(SessionGcJob::class)) && count($task->schedules->findBy('active', 1)) && PHP_SAPI !== 'cli' ) { return false; } - return DBManager::get()->execute("DELETE FROM session_data WHERE changed < FROM_UNIXTIME(?) ", [time() - $max_lifetime]); + return DBManager::get()->execute( + "DELETE FROM session_data WHERE changed < FROM_UNIXTIME(?) ", + [time() - $max_lifetime] + ); } - /** - * @inheritDoc - */ - public function open($path, $name): bool + public function open(string $path, string $name): bool { return true; } - /** - * @inheritDoc - */ - #[\ReturnTypeWillChange] - public function read($id) + public function read(string $id): false|string { - $str = DBManager::get()->fetchColumn("SELECT val FROM session_data where sid = ?", [$id]); + $str = DBManager::get()->fetchColumn( + "SELECT val FROM session_data where sid = ?", + [$id] + ); if ($str) { $this->exists = $id; } - return (string)$str; + return $str ?: ''; } - /** - * @inheritDoc - */ - public function write($id, $data): bool + public function write(string $id, string $data): bool { $db = DBManager::get(); if ($this->exists === $id) { @@ -85,9 +84,12 @@ class DbSessionHandler implements \SessionHandlerInterface, \SessionIdInterface, return (bool) $stmt->execute([$data, $id]); } - public function exists($id) + public function exists(string $id): bool { - return (bool)DBManager::get()->fetchColumn("SELECT 1 FROM session_data where sid = ?", [$id]); + return (bool) DBManager::get()->fetchColumn( + "SELECT 1 FROM session_data where sid = ?", + [$id] + ); } public function create_sid(): string @@ -107,7 +109,7 @@ class DbSessionHandler implements \SessionHandlerInterface, \SessionIdInterface, public function validateId(string $id): bool { - return (bool)$this->exists($id); + return $this->exists($id); } diff --git a/lib/session/Manager.php b/lib/session/Manager.php index ea95dbea469..60246b27a41 100644 --- a/lib/session/Manager.php +++ b/lib/session/Manager.php @@ -14,13 +14,10 @@ namespace Studip\Session; class Manager { - /** - * @var \SessionHandlerInterface - */ - protected \SessionHandlerInterface $handler; - /** - * @var array - */ + public const STATE_UNKNOWN = false; + public const STATE_AUTHENTICATED = 'authenticated'; + public const STATE_NOBODY = 'authenticated'; + protected array $options = [ 'name' => 'Seminar_Session', 'lifetime' => 7200, @@ -31,19 +28,13 @@ class Manager 'samesite' => 'Lax', 'cache_limiter' => 'nocache' ]; - /** - * @var null - */ - protected $current_session_state = null; + protected string|false|null $current_session_state = null; - /** - * @param \SessionHandlerInterface $session_handler - * @param array $session_options - */ - public function __construct(\SessionHandlerInterface $session_handler, array $session_options = []) - { - $this->handler = $session_handler; + public function __construct( + protected \SessionHandlerInterface $handler, + array $session_options = [] + ) { $keys = array_keys($this->options); foreach ($keys as $key) { if (array_key_exists($key, $session_options)) { @@ -61,16 +52,15 @@ class Manager public function start(): void { if (!$this->isStarted()) { - ini_set('session.use_strict_mode', 1); $current = session_get_cookie_params(); - $lifetime = (int)($this->options['lifetime'] ?: $current['lifetime']); + $lifetime = (int) ($this->options['lifetime'] ?: $current['lifetime']); $path = $this->options['path'] ?: $current['path']; $domain = $this->options['domain'] ?: $current['domain']; $samesite = $this->options['samesite'] ?: $current['samesite']; - $secure = (bool)$this->options['secure']; - $httponly = (bool)$this->options['httponly']; + $secure = (bool) $this->options['secure']; + $httponly = (bool) $this->options['httponly']; session_set_cookie_params(compact('lifetime', 'path', 'domain', 'secure', 'samesite', 'httponly')); session_name($this->options['name']); @@ -81,18 +71,11 @@ class Manager } } - /** - * @return bool - */ public function isStarted(): bool { return session_status() === PHP_SESSION_ACTIVE; } - /** - * @param array $keep_session_vars - * @return void - */ public function regenerateId(array $keep_session_vars = []): void { if (!$this->isStarted()) { @@ -115,17 +98,11 @@ class Manager } } - /** - * @return string - */ public function getName(): string { return $this->options['name']; } - /** - * @return void - */ public function destroy(): void { if (!$this->isStarted()) { @@ -149,9 +126,6 @@ class Manager session_destroy(); } - /** - * @return void - */ public function save() : void { session_write_close(); @@ -160,13 +134,10 @@ class Manager /** * Returns true, if the current session is valid and belongs to an * authenticated user. Does not start a session. - * - * @static - * @return bool */ public function isCurrentSessionAuthenticated(): bool { - return self::getCurrentSessionState() === 'authenticated'; + return $this->getCurrentSessionState() === self::STATE_AUTHENTICATED; } /** @@ -175,28 +146,25 @@ class Manager * 'authenticated' - session is valid and user is authenticated * 'nobody' - session is valid, but user is not authenticated * false - no valid session - * - * @static - * @return string|false */ public function getCurrentSessionState(): false|string|null { - if (!is_null($this->current_session_state)) { + if ($this->current_session_state !== null) { return $this->current_session_state; } - $state = false; + $state = self::STATE_UNKNOWN; if (isset($GLOBALS['user']) && is_object($GLOBALS['user'])) { - $state = in_array($GLOBALS['user']->id, ['nobody', 'form']) ? 'nobody' : 'authenticated'; + $state = in_array($GLOBALS['user']->id, ['nobody', 'form']) ? self::STATE_NOBODY : self::STATE_AUTHENTICATED; } else { $sid = $_COOKIE[$this->getName()]; if ($sid) { $session_vars = $this->getSessionVars($sid); $session_auth = $session_vars['auth']; if ($session_auth['uid'] && !in_array($session_auth['uid'], ['nobody', 'form'])) { - $state = 'authenticated'; + $state = self::STATE_AUTHENTICATED; } else { - $state = in_array($session_auth['uid'], ['nobody', 'form']) ? 'nobody' : false; + $state = in_array($session_auth['uid'], ['nobody', 'form']) ? self::STATE_NOBODY : self::STATE_UNKNOWN; } } } diff --git a/public/plugins.php b/public/plugins.php index 176ccfa98f2..0edb9957f76 100644 --- a/public/plugins.php +++ b/public/plugins.php @@ -40,10 +40,6 @@ $plugin_dispatch = function (ServerRequestInterface $request, RequestHandlerInte return $response->withHeader('Location', URLHelper::getURL('dispatch.php/course/forum/' . $unconsumed)); } - // retrieve corresponding plugin info - $plugin_manager = PluginManager::getInstance(); - $plugin_info = $plugin_manager->getPluginInfo($plugin_class); - // create an instance of the queried plugin $plugin = PluginEngine::getPlugin($plugin_class); @@ -56,11 +52,6 @@ $plugin_dispatch = function (ServerRequestInterface $request, RequestHandlerInte // set default page title PageLayout::setTitle($plugin->getPluginName()); - // deprecated, the plugin should override perform() instead - if (is_callable([$plugin, 'initialize'])) { - $plugin->initialize(); - } - $route_callable = $plugin->getRouteCallable($unconsumed); $app->any(Request::pathInfo(), $route_callable); } catch (AccessDeniedException $ade) { -- GitLab