feat(user_ldap): upstream common code into Proxy class and add public getters for backends

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
pull/50691/head
Côme Chilliet 2025-01-30 11:49:58 +07:00 committed by max-nextcloud
parent 76486b7a20
commit bbcb102262
3 changed files with 59 additions and 49 deletions

@ -18,12 +18,11 @@ use OCP\GroupInterface;
use OCP\IConfig;
use OCP\IUserManager;
/**
* @template-extends Proxy<Group_LDAP>
*/
class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGetDisplayNameBackend, INamedBackend, IDeleteGroupBackend, IBatchMethodsBackend, IIsAdminBackend {
private $backends = [];
private ?Group_LDAP $refBackend = null;
private Helper $helper;
private GroupPluginManager $groupPluginManager;
private bool $isSetUp = false;
private IConfig $config;
private IUserManager $ncUserManager;
@ -35,28 +34,15 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet
IConfig $config,
IUserManager $ncUserManager,
) {
parent::__construct($ldap, $accessFactory);
$this->helper = $helper;
parent::__construct($helper, $ldap, $accessFactory);
$this->groupPluginManager = $groupPluginManager;
$this->config = $config;
$this->ncUserManager = $ncUserManager;
}
protected function setup(): void {
if ($this->isSetUp) {
return;
}
$serverConfigPrefixes = $this->helper->getServerConfigurationPrefixes(true);
foreach ($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] =
new Group_LDAP($this->getAccess($configPrefix), $this->groupPluginManager, $this->config, $this->ncUserManager);
if (is_null($this->refBackend)) {
$this->refBackend = $this->backends[$configPrefix];
}
}
$this->isSetUp = true;
protected function newInstance(string $configPrefix): Group_LDAP {
return new Group_LDAP($this->getAccess($configPrefix), $this->groupPluginManager, $this->config, $this->ncUserManager);
}
/**

@ -12,6 +12,9 @@ use OCA\User_LDAP\Mapping\UserMapping;
use OCP\ICache;
use OCP\Server;
/**
* @template T
*/
abstract class Proxy {
/** @var array<string,Access> */
private static array $accesses = [];
@ -20,7 +23,15 @@ abstract class Proxy {
private ?ICache $cache = null;
private AccessFactory $accessFactory;
/** @var T[] */
protected array $backends = [];
/** @var ?T */
protected $refBackend = null;
protected bool $isSetUp = false;
public function __construct(
private Helper $helper,
ILDAPWrapper $ldap,
AccessFactory $accessFactory
) {
@ -32,6 +43,36 @@ abstract class Proxy {
}
}
protected function setup(): void {
if ($this->isSetUp) {
return;
}
$serverConfigPrefixes = $this->helper->getServerConfigurationPrefixes(true);
foreach ($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] = $this->newInstance($configPrefix);
if (is_null($this->refBackend)) {
$this->refBackend = $this->backends[$configPrefix];
}
}
$this->isSetUp = true;
}
/**
* @return T
*/
abstract protected function newInstance(string $configPrefix): object;
/**
* @return T
*/
public function getBackend(string $configPrefix): object {
$this->setup();
return $this->backends[$configPrefix];
}
private function addAccess(string $configPrefix): void {
$userMap = Server::get(UserMapping::class);
$groupMap = Server::get(GroupMapping::class);

@ -18,13 +18,10 @@ use OCP\User\Backend\IProvideEnabledStateBackend;
use OCP\UserInterface;
use Psr\Log\LoggerInterface;
/**
* @template-extends Proxy<User_LDAP>
*/
class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP, ICountUsersBackend, ICountMappedUsersBackend, IProvideEnabledStateBackend {
/** @var User_LDAP[] */
private array $backends = [];
private ?User_LDAP $refBackend = null;
private bool $isSetUp = false;
private Helper $helper;
private INotificationManager $notificationManager;
private UserPluginManager $userPluginManager;
private LoggerInterface $logger;
@ -39,35 +36,21 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP
LoggerInterface $logger,
DeletedUsersIndex $deletedUsersIndex,
) {
parent::__construct($ldap, $accessFactory);
$this->helper = $helper;
parent::__construct($helper, $ldap, $accessFactory);
$this->notificationManager = $notificationManager;
$this->userPluginManager = $userPluginManager;
$this->logger = $logger;
$this->deletedUsersIndex = $deletedUsersIndex;
}
protected function setup(): void {
if ($this->isSetUp) {
return;
}
$serverConfigPrefixes = $this->helper->getServerConfigurationPrefixes(true);
foreach ($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] = new User_LDAP(
$this->getAccess($configPrefix),
$this->notificationManager,
$this->userPluginManager,
$this->logger,
$this->deletedUsersIndex,
);
if (is_null($this->refBackend)) {
$this->refBackend = $this->backends[$configPrefix];
}
}
$this->isSetUp = true;
protected function newInstance(string $configPrefix): User_LDAP {
return new User_LDAP(
$this->getAccess($configPrefix),
$this->notificationManager,
$this->userPluginManager,
$this->logger,
$this->deletedUsersIndex,
);
}
/**