Skip to content

Commit 1f45c24

Browse files
committed
fix: Correctly filter users when the backend does not implement ISearchKnownUsersBackend
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
1 parent be53081 commit 1f45c24

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

‎lib/private/User/Manager.php‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use Doctrine\DBAL\Platforms\OraclePlatform;
1111
use OC\Hooks\PublicEmitter;
12+
use OC\KnownUser\KnownUserService;
1213
use OC\Memcache\WithLocalCache;
1314
use OCP\DB\QueryBuilder\IQueryBuilder;
1415
use OCP\EventDispatcher\IEventDispatcher;
@@ -67,6 +68,9 @@ class Manager extends PublicEmitter implements IUserManager {
6768

6869
private DisplayNameCache $displayNameCache;
6970

71+
// These services cannot be injected through DI because user manager is used early in install process
72+
private ?KnownUserService $knownUserService = null;
73+
7074
public function __construct(
7175
private IConfig $config,
7276
ICacheFactory $cacheFactory,
@@ -80,6 +84,10 @@ public function __construct(
8084
$this->displayNameCache = new DisplayNameCache($cacheFactory, $this);
8185
}
8286

87+
private function getKnownUserService(): KnownUserService {
88+
return $this->knownUserService ??= Server::get(KnownUserService::class);
89+
}
90+
8391
/**
8492
* Get the active backends
8593
* @return UserInterface[]
@@ -363,7 +371,12 @@ public function searchKnownUsersByDisplayName(string $searcher, string $pattern,
363371
$backendUsers = $backend->searchKnownUsersByDisplayName($searcher, $pattern, $limit, $offset);
364372
} else {
365373
// Better than nothing, but filtering after pagination can remove lots of results.
366-
$backendUsers = $backend->getDisplayNames($pattern, $limit, $offset);
374+
$backendUsers = array_filter(
375+
$backend->getDisplayNames($pattern, $limit, $offset),
376+
fn (string $uid): bool => $this->getKnownUserService()->isKnownToUser($searcher, $uid),
377+
ARRAY_FILTER_USE_KEY,
378+
);
379+
367380
}
368381
if (is_array($backendUsers)) {
369382
foreach ($backendUsers as $uid => $displayName) {

0 commit comments

Comments
 (0)