From: Maxence Lange Date: Tue, 28 Feb 2023 01:10:46 +0000 (-0100) Subject: dispatch BeforeUserLoggedInEvent X-Git-Tag: v27.0.0beta1~373^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=980e8e24f0d5c676b91af3ad408066aa23d20080;p=nextcloud-server.git dispatch BeforeUserLoggedInEvent Signed-off-by: Maxence Lange --- diff --git a/lib/private/legacy/OC_User.php b/lib/private/legacy/OC_User.php index 8aaa9072ba4..caa4f5dca65 100644 --- a/lib/private/legacy/OC_User.php +++ b/lib/private/legacy/OC_User.php @@ -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, diff --git a/lib/public/User/Events/BeforeUserLoggedInEvent.php b/lib/public/User/Events/BeforeUserLoggedInEvent.php index a0818bff88f..ca74f926a17 100644 --- a/lib/public/User/Events/BeforeUserLoggedInEvent.php +++ b/lib/public/User/Events/BeforeUserLoggedInEvent.php @@ -24,27 +24,29 @@ declare(strict_types=1); * along with this program. If not, see . * */ + 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; + } }