From bfc1c157f1e4d2e84437e6f149bdb3e8b6290b8a Mon Sep 17 00:00:00 2001 From: Philipp Date: Mon, 26 Dec 2022 13:08:41 +0100 Subject: [PATCH] Adapt UserSession - Move from App methods to UserSession methods - Deprecate corresponding App methods --- src/App.php | 52 +++++-------------- .../Capability/IHandleUserSessions.php | 14 +++++ src/Core/Session/Model/UserSession.php | 17 ++++++ src/Model/User.php | 16 ++++++ src/Security/Authentication.php | 3 -- .../Api/Twitter/DirectMessages/NewDMTest.php | 6 +-- 6 files changed, 62 insertions(+), 46 deletions(-) diff --git a/src/App.php b/src/App.php index eb0d1cc217..b41215380f 100644 --- a/src/App.php +++ b/src/App.php @@ -29,7 +29,6 @@ use Friendica\Core\Config\Factory\Config; use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Database\Definition\DbaDefinition; use Friendica\Database\Definition\ViewDefinition; -use Friendica\Model\User; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; use Friendica\Core\Config\ValueObject\Cache; @@ -73,8 +72,6 @@ class App 'videoheight' => 350, ]; - private $user_id = 0; - private $nickname = ''; private $timezone = ''; private $profile_owner = 0; private $contact_id = 0; @@ -136,64 +133,39 @@ class App private $session; /** - * Set the user ID - * - * @param int $user_id - * @return void + * @deprecated 2022.03 + * @see IHandleUserSessions::isAuthenticated() */ - public function setLoggedInUserId(int $user_id) - { - $this->user_id = $user_id; - } - - /** - * Set the nickname - * - * @param int $user_id - * @return void - */ - public function setLoggedInUserNickname(string $nickname) - { - $this->nickname = $nickname; - } - public function isLoggedIn(): bool { - return $this->session->getLocalUserId() && $this->user_id && ($this->user_id == $this->session->getLocalUserId()); + return $this->session->isAuthenticated(); } /** - * Check if current user has admin role. - * - * @return bool true if user is an admin - * @throws Exception + * @deprecated 2022.03 + * @see IHandleUserSessions::isSiteAdmin() */ public function isSiteAdmin(): bool { - return - $this->session->getLocalUserId() - && $this->database->exists('user', [ - 'uid' => $this->getLoggedInUserId(), - 'email' => User::getAdminEmailList() - ]); + return $this->session->isSiteAdmin(); } /** - * Fetch the user id - * @return int User id + * @deprecated 2022.03 + * @see IHandleUserSessions::getLocalUserId() */ public function getLoggedInUserId(): int { - return $this->user_id; + return $this->session->getLocalUserId(); } /** - * Fetch the user nick name - * @return string User's nickname + * @deprecated 2022.03 + * @see IHandleUserSessions::getLocalUserNickname() */ public function getLoggedInUserNickname(): string { - return $this->nickname; + return $this->session->getLocalUserNickname(); } /** diff --git a/src/Core/Session/Capability/IHandleUserSessions.php b/src/Core/Session/Capability/IHandleUserSessions.php index e65749c8df..7a6ca64ba1 100644 --- a/src/Core/Session/Capability/IHandleUserSessions.php +++ b/src/Core/Session/Capability/IHandleUserSessions.php @@ -33,6 +33,13 @@ interface IHandleUserSessions extends IHandleSessions */ public function getLocalUserId(); + /** + * Returns the user nickname of locally logged-in user. + * + * @return string|false User's nickname or false + */ + public function getLocalUserNickname(); + /** * Returns the public contact id of logged-in user or false. * @@ -79,6 +86,13 @@ interface IHandleUserSessions extends IHandleSessions */ public function isAuthenticated(): bool; + /** + * Check if current user has admin role. + * + * @return bool true if user is an admin + */ + public function isSiteAdmin(): bool; + /** * Returns User ID of the managed user in case it's a different identity * diff --git a/src/Core/Session/Model/UserSession.php b/src/Core/Session/Model/UserSession.php index 959ca1af2d..6cd689e9c7 100644 --- a/src/Core/Session/Model/UserSession.php +++ b/src/Core/Session/Model/UserSession.php @@ -24,6 +24,7 @@ namespace Friendica\Core\Session\Model; use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Model\Contact; +use Friendica\Model\User; /** * This class handles user sessions, which is directly extended from regular session @@ -50,6 +51,16 @@ class UserSession implements IHandleUserSessions return false; } + /** {@inheritDoc} */ + public function getLocalUserNickname() + { + if ($this->isAuthenticated()) { + return $this->session->get('nickname'); + } + + return false; + } + /** {@inheritDoc} */ public function getPublicContactId() { @@ -122,6 +133,12 @@ class UserSession implements IHandleUserSessions return $this->session->get('authenticated', false); } + /** {@inheritDoc} */ + public function isSiteAdmin(): bool + { + return User::isSiteAdmin($this->getLocalUserId()); + } + /** {@inheritDoc} */ public function setVisitorsContacts() { diff --git a/src/Model/User.php b/src/Model/User.php index 132e4f11a9..916844251e 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -830,6 +830,22 @@ class User return DBA::update('user', $fields, ['uid' => $uid]); } + /** + * Returns if the given uid is valid and in the admin list + * + * @param int $uid + * + * @return bool + * @throws Exception + */ + public static function isSiteAdmin(int $uid): bool + { + return DBA::exists('user', [ + 'uid' => $uid, + 'email' => self::getAdminEmailList() + ]); + } + /** * Checks if a nickname is in the list of the forbidden nicknames * diff --git a/src/Security/Authentication.php b/src/Security/Authentication.php index 5dcc399403..c6a8403672 100644 --- a/src/Security/Authentication.php +++ b/src/Security/Authentication.php @@ -392,9 +392,6 @@ class Authentication } } - $a->setLoggedInUserId($user_record['uid']); - $a->setLoggedInUserNickname($user_record['nickname']); - if ($login_initial) { Hook::callAll('logged_in', $user_record); } diff --git a/tests/src/Module/Api/Twitter/DirectMessages/NewDMTest.php b/tests/src/Module/Api/Twitter/DirectMessages/NewDMTest.php index b2bcfb37fa..cab3c22026 100644 --- a/tests/src/Module/Api/Twitter/DirectMessages/NewDMTest.php +++ b/tests/src/Module/Api/Twitter/DirectMessages/NewDMTest.php @@ -88,7 +88,7 @@ class NewDMTest extends ApiTest */ public function testApiDirectMessagesNewWithScreenName() { - DI::app()->setLoggedInUserNickname('selfcontact'); + DI::session()->set('nickname', 'selfcontact'); $directMessage = new DirectMessage(DI::logger(), DI::dba(), DI::twitterUser()); @@ -112,7 +112,7 @@ class NewDMTest extends ApiTest */ public function testApiDirectMessagesNewWithTitle() { - DI::app()->setLoggedInUserNickname('selfcontact'); + DI::session()->set('nickname', 'selfcontact'); $directMessage = new DirectMessage(DI::logger(), DI::dba(), DI::twitterUser()); @@ -138,7 +138,7 @@ class NewDMTest extends ApiTest */ public function testApiDirectMessagesNewWithRss() { - DI::app()->setLoggedInUserNickname('selfcontact'); + DI::session()->set('nickname', 'selfcontact'); $directMessage = new DirectMessage(DI::logger(), DI::dba(), DI::twitterUser());