99
1010use Doctrine \DBAL \Platforms \OraclePlatform ;
1111use OC \Hooks \PublicEmitter ;
12+ use OC \KnownUser \KnownUserService ;
1213use OC \Memcache \WithLocalCache ;
1314use OCP \DB \QueryBuilder \IQueryBuilder ;
1415use 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