aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2023-02-28 00:10:46 -0100
committerMaxence Lange <maxence@artificial-owl.com>2023-03-01 15:31:31 -0100
commit980e8e24f0d5c676b91af3ad408066aa23d20080 (patch)
treed559a9bf59aa42d84640ec7b6788509a619ce4f6
parent991aca154cc5e262baf0583446f0b2db87103b32 (diff)
downloadnextcloud-server-980e8e24f0d5c676b91af3ad408066aa23d20080.tar.gz
nextcloud-server-980e8e24f0d5c676b91af3ad408066aa23d20080.zip
dispatch BeforeUserLoggedInEvent
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
-rw-r--r--lib/private/legacy/OC_User.php11
-rw-r--r--lib/public/User/Events/BeforeUserLoggedInEvent.php27
2 files changed, 29 insertions, 9 deletions
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 <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;
+ }
}