]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat: Implement IPasswordHashBackend in database user backend
authorChristopher Ng <chrng8@gmail.com>
Tue, 25 Jun 2024 22:47:50 +0000 (15:47 -0700)
committerChristopher Ng <chrng8@gmail.com>
Mon, 8 Jul 2024 23:30:52 +0000 (16:30 -0700)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
lib/private/User/Database.php

index cc7050f2da8216eca5f270525d49a0951c264286..0a0231a778421e0bbf14c208d21f0a6c1afc4b69 100644 (file)
@@ -21,6 +21,7 @@ use OCP\User\Backend\ICreateUserBackend;
 use OCP\User\Backend\IGetDisplayNameBackend;
 use OCP\User\Backend\IGetHomeBackend;
 use OCP\User\Backend\IGetRealUIDBackend;
+use OCP\User\Backend\IPasswordHashBackend;
 use OCP\User\Backend\ISearchKnownUsersBackend;
 use OCP\User\Backend\ISetDisplayNameBackend;
 use OCP\User\Backend\ISetPasswordBackend;
@@ -37,7 +38,8 @@ class Database extends ABackend implements
        IGetHomeBackend,
        ICountUsersBackend,
        ISearchKnownUsersBackend,
-       IGetRealUIDBackend {
+       IGetRealUIDBackend,
+       IPasswordHashBackend {
        /** @var CappedMemoryCache */
        private $cache;
 
@@ -176,6 +178,34 @@ class Database extends ABackend implements
                return false;
        }
 
+       public function getPasswordHash(string $userId): ?string {
+               $this->fixDI();
+               if (!$this->userExists($userId)) {
+                       return null;
+               }
+               $qb = $this->dbConn->getQueryBuilder();
+               $qb->select('password')
+                       ->from($this->table)
+                       ->where($qb->expr()->eq('uid_lower', $qb->createNamedParameter(mb_strtolower($userId))));
+               /** @var false|string $hash */
+               $hash = $qb->executeQuery()->fetchOne();
+               if ($hash === false) {
+                       return null;
+               }
+               $this->cache[$userId]['password'] = $hash;
+               return $hash;
+       }
+
+       public function setPasswordHash(string $userId, string $passwordHash): bool {
+               $this->fixDI();
+               $result = $this->updatePassword($userId, $passwordHash);
+               if (!$result) {
+                       return false;
+               }
+               $this->cache[$userId]['password'] = $passwordHash;
+               return true;
+       }
+
        /**
         * Set display name
         *