From 1c4621c55ba209a22bae29d0c26f621e771fcbff Mon Sep 17 00:00:00 2001 From: netkas Date: Mon, 6 Jan 2025 04:44:12 -0500 Subject: [PATCH] Enhance flag handling for session operations. --- src/Socialbox/Managers/SessionManager.php | 11 +++++++++-- .../Objects/Database/SessionRecord.php | 17 +++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Socialbox/Managers/SessionManager.php b/src/Socialbox/Managers/SessionManager.php index ef36946..0a86bef 100644 --- a/src/Socialbox/Managers/SessionManager.php +++ b/src/Socialbox/Managers/SessionManager.php @@ -436,14 +436,21 @@ return; } + // Don't do anything if the flags to remove are not present + if(!$session->flagExists($flagsToRemove)) + { + return; + } + + // Remove & update the session flags self::removeFlags($session->getUuid(), $flagsToRemove); $session = self::getSession($session->getUuid()); // Check if all registration/authentication requirements are met if(SessionFlags::isComplete($session->getFlags())) { - SessionManager::setAuthenticated($session->getUuid(), true); - SessionManager::removeFlags($session->getUuid(), [SessionFlags::REGISTRATION_REQUIRED, SessionFlags::AUTHENTICATION_REQUIRED]); + SessionManager::removeFlags($session->getUuid(), [SessionFlags::REGISTRATION_REQUIRED, SessionFlags::AUTHENTICATION_REQUIRED]); // Remove the registration/authentication flags + SessionManager::setAuthenticated($session->getUuid(), true); // Mark the session as authenticated } } } \ No newline at end of file diff --git a/src/Socialbox/Objects/Database/SessionRecord.php b/src/Socialbox/Objects/Database/SessionRecord.php index 6492528..515dd88 100644 --- a/src/Socialbox/Objects/Database/SessionRecord.php +++ b/src/Socialbox/Objects/Database/SessionRecord.php @@ -213,11 +213,24 @@ /** * Checks if a given flag exists in the list of session flags. * - * @param string|SessionFlags $flag The flag to check, either as a string or a SessionFlags object. + * @param string|SessionFlags|array $flag The flag to check, either as a string or a SessionFlags object. If an array is provided, all flags must exist. * @return bool True if the flag exists, false otherwise. */ - public function flagExists(string|SessionFlags $flag): bool + public function flagExists(string|SessionFlags|array $flag): bool { + if(is_array($flag)) + { + foreach($flag as $f) + { + if(!$this->flagExists($f)) + { + return false; + } + } + + return true; + } + if(is_string($flag)) { $flag = SessionFlags::tryFrom($flag);