]> source.dussan.org Git - nextcloud-server.git/commitdiff
update saved credentials on password change
authorRobin Appelman <robin@icewind.nl>
Wed, 20 May 2020 13:54:16 +0000 (15:54 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Thu, 30 Jul 2020 09:43:15 +0000 (11:43 +0200)
Signed-off-by: Robin Appelman <robin@icewind.nl>
apps/files_external/lib/Lib/Auth/Password/LoginCredentials.php

index b8dace8bf53361f67cfb9b40575826714e5f9ed3..5ea4a698208e971c94aeadae5612b51cd9711a6f 100644 (file)
@@ -29,10 +29,13 @@ use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException;
 use OCA\Files_External\Lib\StorageConfig;
 use OCP\Authentication\Exceptions\CredentialsUnavailableException;
 use OCP\Authentication\LoginCredentials\IStore as CredentialsStore;
+use OCP\EventDispatcher\IEventDispatcher;
 use OCP\IL10N;
 use OCP\ISession;
 use OCP\IUser;
 use OCP\Security\ICredentialsManager;
+use OCP\User\Events\PasswordUpdatedEvent;
+use OCP\User\Events\UserLoggedInEvent;
 
 /**
  * Username and password from login credentials, saved in DB
@@ -49,7 +52,7 @@ class LoginCredentials extends AuthMechanism {
        /** @var CredentialsStore */
        private $credentialsStore;
 
-       public function __construct(IL10N $l, ISession $session, ICredentialsManager $credentialsManager, CredentialsStore $credentialsStore) {
+       public function __construct(IL10N $l, ISession $session, ICredentialsManager $credentialsManager, CredentialsStore $credentialsStore, IEventDispatcher $eventDispatcher) {
                $this->session = $session;
                $this->credentialsManager = $credentialsManager;
                $this->credentialsStore = $credentialsStore;
@@ -60,6 +63,29 @@ class LoginCredentials extends AuthMechanism {
                        ->setText($l->t('Log-in credentials, save in database'))
                        ->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);
+               }
        }
 
        private function getCredentials(IUser $user): array {