]> source.dussan.org Git - nextcloud-server.git/commitdiff
dispatch BeforeUserLoggedInEvent 36883/head
authorMaxence Lange <maxence@artificial-owl.com>
Tue, 28 Feb 2023 01:10:46 +0000 (00:10 -0100)
committerMaxence Lange <maxence@artificial-owl.com>
Wed, 1 Mar 2023 16:31:31 +0000 (15:31 -0100)
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
lib/private/legacy/OC_User.php
lib/public/User/Events/BeforeUserLoggedInEvent.php

index 8aaa9072ba4860be87e19c2507205517a0792c18..caa4f5dca6512ff40057380b33f400b6c245c22b 100644 (file)
@@ -40,6 +40,7 @@ use OC\User\LoginException;
 use OCP\EventDispatcher\IEventDispatcher;
 use OCP\ILogger;
 use OCP\IUserManager;
+use OCP\User\Events\BeforeUserLoggedInEvent;
 use OCP\User\Events\UserLoggedInEvent;
 
 /**
@@ -172,6 +173,10 @@ class OC_User {
                        if (self::getUser() !== $uid) {
                                self::setUserId($uid);
                                $userSession = \OC::$server->getUserSession();
+
+                               /** @var IEventDispatcher $dispatcher */
+                               $dispatcher = \OC::$server->get(IEventDispatcher::class);
+
                                if ($userSession->getUser() && !$userSession->getUser()->isEnabled()) {
                                        $message = \OC::$server->getL10N('lib')->t('User disabled');
                                        throw new LoginException($message);
@@ -182,6 +187,10 @@ class OC_User {
                                if ($backend instanceof \OCP\Authentication\IProvideUserSecretBackend) {
                                        $password = $backend->getCurrentUserSecret();
                                }
+
+                               /** @var IEventDispatcher $dispatcher */
+                               $dispatcher->dispatchTyped(new BeforeUserLoggedInEvent($uid, $password, $backend));
+
                                $userSession->createSessionToken($request, $uid, $uid, $password);
                                $userSession->createRememberMeToken($userSession->getUser());
                                // setup the filesystem
@@ -199,8 +208,6 @@ class OC_User {
                                                'isTokenLogin' => false,
                                        ]
                                );
-                               /** @var IEventDispatcher $dispatcher */
-                               $dispatcher = \OC::$server->get(IEventDispatcher::class);
                                $dispatcher->dispatchTyped(new UserLoggedInEvent(
                                        \OC::$server->get(IUserManager::class)->get($uid),
                                        $uid,
index a0818bff88f323e3994940dfb0baf48c6b7abbf4..ca74f926a17f785f067ca1eb4b9b80731be76c81 100644 (file)
@@ -24,27 +24,29 @@ declare(strict_types=1);
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
  */
+
 namespace OCP\User\Events;
 
+use OCP\Authentication\IApacheBackend;
 use OCP\EventDispatcher\Event;
 
 /**
  * @since 18.0.0
  */
 class BeforeUserLoggedInEvent extends Event {
-       /** @var string */
-       private $username;
-
-       /** @var string */
-       private $password;
+       private string $username;
+       private ?string $password;
+       private ?IApacheBackend $backend;
 
        /**
         * @since 18.0.0
+        * @since 26.0.0 password can be null
         */
-       public function __construct(string $username, string $password) {
+       public function __construct(string $username, ?string $password, ?IApacheBackend $backend = null) {
                parent::__construct();
                $this->username = $username;
                $this->password = $password;
+               $this->backend = $backend;
        }
 
        /**
@@ -58,8 +60,19 @@ class BeforeUserLoggedInEvent extends Event {
 
        /**
         * @since 18.0.0
+        * @since 26.0.0 value can be null
         */
-       public function getPassword(): string {
+       public function getPassword(): ?string {
                return $this->password;
        }
+
+       /**
+        * return backend if available (or null)
+        *
+        * @return IApacheBackend|null
+        * @since 26.0.0
+        */
+       public function getBackend(): ?IApacheBackend {
+               return $this->backend;
+       }
 }