]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Implement option to temporarily set the user session
authorJulius Härtl <jus@bitgrid.net>
Tue, 19 Mar 2024 10:12:03 +0000 (11:12 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Mon, 22 Jul 2024 12:44:21 +0000 (12:44 +0000)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/files_external/lib/Migration/DummyUserSession.php
lib/private/User/Session.php
lib/private/legacy/OC_User.php
lib/public/IUserSession.php

index e1b2b500188c59802737d1b4982e02d71061569b..ce987b3c575f8ac4d777cf8b4279a8982b48cfc0 100644 (file)
@@ -29,10 +29,7 @@ use OCP\IUserSession;
 
 class DummyUserSession implements IUserSession {
 
-       /**
-        * @var IUser
-        */
-       private $user;
+       private ?IUser $user = null;
 
        public function login($uid, $password) {
        }
@@ -44,6 +41,10 @@ class DummyUserSession implements IUserSession {
                $this->user = $user;
        }
 
+       public function setVolatileActiveUser(?IUser $user): void {
+               $this->user = $user;
+       }
+
        public function getUser() {
                return $this->user;
        }
index dff3cefd0b9f8ad3e8207cdc1003a954bf719558..c5a00aedcc6d0fd87fcbc1527a9329b030a5b89c 100644 (file)
@@ -182,6 +182,15 @@ class Session implements IUserSession, Emitter {
                $this->activeUser = $user;
        }
 
+       /**
+        * Temporarily set the currently active user without persisting in the session
+        *
+        * @param IUser|null $user
+        */
+       public function setVolatileActiveUser(?IUser $user): void {
+               $this->activeUser = $user;
+       }
+
        /**
         * get the current active user
         *
index 3d95881498869b2b7ab60980ec9a0d7c747cd886..51bf0fd6049e0acc8a0eca5f02ff7d67561e3307 100644 (file)
@@ -41,6 +41,7 @@ use OCP\EventDispatcher\IEventDispatcher;
 use OCP\IGroupManager;
 use OCP\IUser;
 use OCP\IUserManager;
+use OCP\IUserSession;
 use OCP\Server;
 use OCP\User\Events\BeforeUserLoggedInEvent;
 use OCP\User\Events\UserLoggedInEvent;
@@ -349,7 +350,7 @@ class OC_User {
         * @return string|false uid or false
         */
        public static function getUser() {
-               $uid = \OC::$server->getSession() ? \OC::$server->getSession()->get('user_id') : null;
+               $uid = Server::get(IUserSession::class)->getUser()?->getUID();
                if (!is_null($uid) && self::$incognitoMode === false) {
                        return $uid;
                } else {
index 7bc37cc67c6a105c639a949bf864878c0e3bbc5b..dc6094550bc634a7bd0c1d6dc53505b4093ed4d3 100644 (file)
@@ -63,6 +63,14 @@ interface IUserSession {
         */
        public function setUser($user);
 
+       /**
+        * Temporarily set the currently active user without persisting in the session
+        *
+        * @param IUser|null $user
+        * @since 29.0.0
+        */
+       public function setVolatileActiveUser(?IUser $user): void;
+
        /**
         * get the current active user
         *