Skip to content

Commit ed8dfa6

Browse files
committed
Expose mapped user count from LDAP and use that for user limit check
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
1 parent 6435191 commit ed8dfa6

3 files changed

Lines changed: 27 additions & 4 deletions

File tree

apps/user_ldap/lib/User_LDAP.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,15 @@
4545
use OCA\User_LDAP\User\OfflineUser;
4646
use OCA\User_LDAP\User\User;
4747
use OCP\IConfig;
48+
use OCP\IUserBackend;
4849
use OCP\IUserSession;
4950
use OCP\Notification\IManager as INotificationManager;
51+
use OCP\User\Backend\ICountMappedUsersBackend;
5052
use OCP\User\Backend\ICountUsersBackend;
51-
use OCP\IUserBackend;
5253
use OCP\UserInterface;
5354
use Psr\Log\LoggerInterface;
5455

55-
class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend {
56+
class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend {
5657
/** @var \OCP\IConfig */
5758
protected $ocConfig;
5859

@@ -598,6 +599,10 @@ public function countUsers() {
598599
return $entries;
599600
}
600601

602+
public function countMappedUsers(): int {
603+
return $this->access->getUserMapper()->count();
604+
}
605+
601606
/**
602607
* Backend name to be shown in user management
603608
* @return string the name of the backend to be shown

apps/user_ldap/lib/User_Proxy.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,14 @@
3333

3434
use OCA\User_LDAP\User\User;
3535
use OCP\IConfig;
36+
use OCP\IUserBackend;
3637
use OCP\IUserSession;
3738
use OCP\Notification\IManager as INotificationManager;
39+
use OCP\User\Backend\ICountMappedUsersBackend;
3840
use OCP\User\Backend\ICountUsersBackend;
41+
use OCP\UserInterface;
3942

40-
class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP, ICountUsersBackend {
43+
class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend {
4144
private $backends = [];
4245
/** @var User_LDAP */
4346
private $refBackend = null;
@@ -389,6 +392,19 @@ public function countUsers() {
389392
return $users;
390393
}
391394

395+
/**
396+
* Count the number of mapped users
397+
*/
398+
public function countMappedUsers(): int {
399+
$this->setup();
400+
401+
$users = 0;
402+
foreach ($this->backends as $backend) {
403+
$users += $backend->countMappedUsers();
404+
}
405+
return $users;
406+
}
407+
392408
/**
393409
* Return access for LDAP interaction.
394410
*

lib/private/Support/Subscription/Registry.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,9 @@ private function getUserCount(): int {
189189
$userCount = 0;
190190
$backends = $this->userManager->getBackends();
191191
foreach ($backends as $backend) {
192-
if ($backend->implementsActions(Backend::COUNT_USERS)) {
192+
if ($backend instanceof ICountMappedUsersBackend::class) {
193+
$userCount += $backend->countMappedUsers();
194+
} elseif ($backend->implementsActions(Backend::COUNT_USERS)) {
193195
/** @var ICountUsersBackend $backend */
194196
$backendUsers = $backend->countUsers();
195197
if ($backendUsers !== false) {

0 commit comments

Comments
 (0)