]> source.dussan.org Git - nextcloud-server.git/commitdiff
Move event listener to dedicated class 21037/head
authorMorris Jobke <hey@morrisjobke.de>
Thu, 30 Jul 2020 09:53:09 +0000 (11:53 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Thu, 30 Jul 2020 10:04:56 +0000 (12:04 +0200)
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php
apps/files_external/lib/Listener/StorePasswordListener.php [new file with mode: 0644]

index 5ea4a698208e971c94aeadae5612b51cd9711a6f..982ef57f3e0439c10cfd38889fc69de73b75742b 100644 (file)
@@ -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 (file)
index 0000000..3212f2a
--- /dev/null
@@ -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);
+               }
+       }
+}