diff options
author | Morris Jobke <hey@morrisjobke.de> | 2020-07-30 12:53:09 +0300 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2020-07-30 13:04:56 +0300 |
commit | 0b0cc48c8830b71e9ed237c1866163bb85c5d379 (patch) | |
tree | 6127b36cba90092518ec993e21072cce7b65109c /apps/files_external | |
parent | d1bd3ba594e2ee949a29a0ce53aaa6ba78aaf354 (diff) |
Move event listener to dedicated class
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'apps/files_external')
-rw-r--r-- | apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php | 25 | ||||
-rw-r--r-- | apps/files_external/lib/Listener/StorePasswordListener.php | 64 |
2 files changed, 67 insertions, 22 deletions
diff --git a/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php b/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php index 5ea4a698208..982ef57f3e0 100644 --- a/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php +++ b/apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php @@ -27,6 +27,7 @@ namespace OCA\Files_External\Lib\Auth\Password; use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; use OCA\Files_External\Lib\StorageConfig; +use OCA\Files_External\Listener\StorePasswordListener; use OCP\Authentication\Exceptions\CredentialsUnavailableException; use OCP\Authentication\LoginCredentials\IStore as CredentialsStore; use OCP\EventDispatcher\IEventDispatcher; @@ -64,28 +65,8 @@ class LoginCredentials extends AuthMechanism { ->addParameters([ ]); - $eventDispatcher->addListener(UserLoggedInEvent::class, [$this, 'updateCredentials']); - $eventDispatcher->addListener(PasswordUpdatedEvent::class, [$this, 'updateCredentials']); - } - - /** - * @param UserLoggedInEvent | PasswordUpdatedEvent $event - */ - public function updateCredentials($event) { - if ($event instanceof UserLoggedInEvent && $event->isTokenLogin()) { - return; - } - - $stored = $this->credentialsManager->retrieve($event->getUser()->getUID(), self::CREDENTIALS_IDENTIFIER); - - if ($stored && $stored['password'] != $event->getPassword()) { - $credentials = [ - 'user' => $stored['user'], - 'password' => $event->getPassword() - ]; - - $this->credentialsManager->store($event->getUser()->getUID(), self::CREDENTIALS_IDENTIFIER, $credentials); - } + $eventDispatcher->addServiceListener(UserLoggedInEvent::class, StorePasswordListener::class); + $eventDispatcher->addServiceListener(PasswordUpdatedEvent::class, StorePasswordListener::class); } private function getCredentials(IUser $user): array { diff --git a/apps/files_external/lib/Listener/StorePasswordListener.php b/apps/files_external/lib/Listener/StorePasswordListener.php new file mode 100644 index 00000000000..3212f2a48c7 --- /dev/null +++ b/apps/files_external/lib/Listener/StorePasswordListener.php @@ -0,0 +1,64 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2020, Morris Jobke <hey@morrisjobke.de> + * + * @author Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files_External\Listener; + +use OCA\Files_External\Lib\Auth\Password\LoginCredentials; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventListener; +use OCP\Security\ICredentialsManager; +use OCP\User\Events\PasswordUpdatedEvent; +use OCP\User\Events\UserLoggedInEvent; + +class StorePasswordListener implements IEventListener { + /** @var ICredentialsManager */ + private $credentialsManager; + + public function __construct(ICredentialsManager $credentialsManager) { + $this->credentialsManager = $credentialsManager; + } + + public function handle(Event $event): void { + if (!$event instanceof UserLoggedInEvent && !$event instanceof PasswordUpdatedEvent) { + return; + } + + if ($event instanceof UserLoggedInEvent && $event->isTokenLogin()) { + return; + } + + $stored = $this->credentialsManager->retrieve($event->getUser()->getUID(), LoginCredentials::CREDENTIALS_IDENTIFIER); + + if ($stored && $stored['password'] !== $event->getPassword()) { + $credentials = [ + 'user' => $stored['user'], + 'password' => $event->getPassword() + ]; + + $this->credentialsManager->store($event->getUser()->getUID(), LoginCredentials::CREDENTIALS_IDENTIFIER, $credentials); + } + } +} |