Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions apps/user_ldap/ajax/deleteConfiguration.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<?php

use OCA\User_LDAP\Helper;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Server;
use OCP\Util;

Expand All @@ -17,7 +15,7 @@
\OC_JSON::callCheck();

$prefix = (string)$_POST['ldap_serverconfig_chooser'];
$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);
if ($helper->deleteServerConfiguration($prefix)) {
\OC_JSON::success();
} else {
Expand Down
4 changes: 1 addition & 3 deletions apps/user_ldap/ajax/getNewServerConfigPrefix.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

use OCA\User_LDAP\Configuration;
use OCA\User_LDAP\Helper;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Server;

/**
Expand All @@ -16,7 +14,7 @@
\OC_JSON::checkAppEnabled('user_ldap');
\OC_JSON::callCheck();

$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);
$serverConnections = $helper->getServerConfigurationPrefixes();
sort($serverConnections);
$lk = array_pop($serverConnections);
Expand Down
3 changes: 1 addition & 2 deletions apps/user_ldap/lib/Command/Search.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
use OCA\User_LDAP\LDAP;
use OCA\User_LDAP\User_Proxy;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Server;

use Symfony\Component\Console\Command\Command;
Expand Down Expand Up @@ -83,7 +82,7 @@ protected function validateOffsetAndLimit(int $offset, int $limit): void {
}

protected function execute(InputInterface $input, OutputInterface $output): int {
$helper = new Helper($this->ocConfig, Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);
$configPrefixes = $helper->getServerConfigurationPrefixes(true);
$ldapWrapper = new LDAP();

Expand Down
4 changes: 1 addition & 3 deletions apps/user_ldap/lib/Command/SetConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
use OCA\User_LDAP\ConnectionFactory;
use OCA\User_LDAP\Helper;
use OCA\User_LDAP\LDAP;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Server;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
Expand Down Expand Up @@ -43,7 +41,7 @@ protected function configure(): void {
}

protected function execute(InputInterface $input, OutputInterface $output): int {
$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);
$availableConfigs = $helper->getServerConfigurationPrefixes();
$configID = $input->getArgument('configID');
if (!in_array($configID, $availableConfigs)) {
Expand Down
4 changes: 1 addition & 3 deletions apps/user_ldap/lib/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
use OCA\User_LDAP\Exceptions\ConfigurationIssueException;
use OCP\ICache;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\Server;
use OCP\Util;
Expand Down Expand Up @@ -156,7 +154,7 @@ public function __construct(
if ($memcache->isAvailable()) {
$this->cache = $memcache->createDistributed();
}
$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);
$this->doNotValidate = !in_array($this->configPrefix,
$helper->getServerConfigurationPrefixes());
$this->logger = Server::get(LoggerInterface::class);
Expand Down
96 changes: 60 additions & 36 deletions apps/user_ldap/lib/Helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

use OCP\Cache\CappedMemoryCache;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\IAppConfig;
use OCP\IDBConnection;
use OCP\Server;

Expand All @@ -18,7 +18,7 @@ class Helper {
protected CappedMemoryCache $sanitizeDnCache;

public function __construct(
private IConfig $config,
private IAppConfig $appConfig,
private IDBConnection $connection,
) {
$this->sanitizeDnCache = new CappedMemoryCache(10000);
Expand All @@ -45,21 +45,37 @@ public function __construct(
* except the default (first) server shall be connected to.
*
*/
public function getServerConfigurationPrefixes($activeConfigurations = false): array {
public function getServerConfigurationPrefixes(bool $activeConfigurations = false): array {
$all = $this->getAllServerConfigurationPrefixes();
if (!$activeConfigurations) {
return $all;
}
return array_values(array_filter(
$all,
fn (string $prefix): bool => ($this->appConfig->getValueString('user_ldap', $prefix . 'ldap_configuration_active') === '1')
));
}

protected function getAllServerConfigurationPrefixes(): array {
$unfilled = ['UNFILLED'];
$prefixes = $this->appConfig->getValueArray('user_ldap', 'configuration_prefixes', $unfilled);
if ($prefixes !== $unfilled) {
return $prefixes;
}

/* Fallback to browsing key for migration from Nextcloud<32 */
$referenceConfigkey = 'ldap_configuration_active';

$keys = $this->getServersConfig($referenceConfigkey);

$prefixes = [];
foreach ($keys as $key) {
if ($activeConfigurations && $this->config->getAppValue('user_ldap', $key, '0') !== '1') {
continue;
}

$len = strlen($key) - strlen($referenceConfigkey);
$prefixes[] = substr($key, 0, $len);
}
asort($prefixes);
sort($prefixes);

$this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', $prefixes);

return $prefixes;
}
Expand All @@ -68,46 +84,45 @@ public function getServerConfigurationPrefixes($activeConfigurations = false): a
*
* determines the host for every configured connection
*
* @return array an array with configprefix as keys
* @return array<string,string> an array with configprefix as keys
*
*/
public function getServerConfigurationHosts() {
$referenceConfigkey = 'ldap_host';

$keys = $this->getServersConfig($referenceConfigkey);
public function getServerConfigurationHosts(): array {
$prefixes = $this->getServerConfigurationPrefixes();

$referenceConfigkey = 'ldap_host';
$result = [];
foreach ($keys as $key) {
$len = strlen($key) - strlen($referenceConfigkey);
$prefix = substr($key, 0, $len);
$result[$prefix] = $this->config->getAppValue('user_ldap', $key);
foreach ($prefixes as $prefix) {
$result[$prefix] = $this->appConfig->getValueString('user_ldap', $prefix . $referenceConfigkey);
}

return $result;
}

/**
* return the next available configuration prefix
*
* @return string
* return the next available configuration prefix and register it as used
*/
public function getNextServerConfigurationPrefix() {
$serverConnections = $this->getServerConfigurationPrefixes();

if (count($serverConnections) === 0) {
return 's01';
public function getNextServerConfigurationPrefix(): string {
$prefixes = $this->getServerConfigurationPrefixes();

if (count($prefixes) === 0) {
$prefix = 's01';
} else {
sort($prefixes);
$lastKey = array_pop($prefixes);
$lastNumber = (int)str_replace('s', '', $lastKey);
$prefix = 's' . str_pad((string)($lastNumber + 1), 2, '0', STR_PAD_LEFT);
}

sort($serverConnections);
$lastKey = array_pop($serverConnections);
$lastNumber = (int)str_replace('s', '', $lastKey);
return 's' . str_pad((string)($lastNumber + 1), 2, '0', STR_PAD_LEFT);
$prefixes[] = $prefix;
$this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', $prefixes);
return $prefix;
}

private function getServersConfig(string $value): array {
$regex = '/' . $value . '$/S';

$keys = $this->config->getAppKeys('user_ldap');
$keys = $this->appConfig->getKeys('user_ldap');
$result = [];
foreach ($keys as $key) {
if (preg_match($regex, $key) === 1) {
Expand All @@ -125,7 +140,9 @@ private function getServersConfig(string $value): array {
* @return bool true on success, false otherwise
*/
public function deleteServerConfiguration($prefix) {
if (!in_array($prefix, self::getServerConfigurationPrefixes())) {
$prefixes = $this->getServerConfigurationPrefixes();
$index = array_search($prefix, $prefixes);
if ($index === false) {
return false;
}

Expand All @@ -144,18 +161,25 @@ public function deleteServerConfiguration($prefix) {
$query->andWhere($query->expr()->notLike('configkey', $query->createNamedParameter('s%')));
}

$deletedRows = $query->execute();
$deletedRows = $query->executeStatement();

unset($prefixes[$index]);
$this->appConfig->setValueArray('user_ldap', 'configuration_prefixes', array_values($prefixes));

return $deletedRows !== 0;
}

/**
* checks whether there is one or more disabled LDAP configurations
*/
public function haveDisabledConfigurations(): bool {
$all = $this->getServerConfigurationPrefixes(false);
$active = $this->getServerConfigurationPrefixes(true);

return count($all) !== count($active) || count($all) === 0;
$all = $this->getServerConfigurationPrefixes();
foreach ($all as $prefix) {
if ($this->appConfig->getValueString('user_ldap', $prefix . 'ldap_configuration_active') !== '1') {
return true;
}
}
return false;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion apps/user_ldap/lib/Jobs/CleanUp.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public function setArguments($arguments): void {
if (isset($arguments['helper'])) {
$this->ldapHelper = $arguments['helper'];
} else {
$this->ldapHelper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$this->ldapHelper = Server::get(Helper::class);
}

if (isset($arguments['ocConfig'])) {
Expand Down
4 changes: 1 addition & 3 deletions apps/user_ldap/lib/Settings/Admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
use OCA\User_LDAP\Configuration;
use OCA\User_LDAP\Helper;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\Server;
use OCP\Settings\IDelegatedSettings;
Expand All @@ -26,7 +24,7 @@ public function __construct(
* @return TemplateResponse
*/
public function getForm() {
$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);
$prefixes = $helper->getServerConfigurationPrefixes();
if (count($prefixes) === 0) {
$newPrefix = $helper->getNextServerConfigurationPrefix();
Expand Down
3 changes: 1 addition & 2 deletions apps/user_ldap/tests/AccessTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
use OCP\IAppConfig;
use OCP\IAvatarManager;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\Image;
use OCP\IUserManager;
use OCP\Notification\IManager as INotificationManager;
Expand Down Expand Up @@ -110,7 +109,7 @@ private function getConnectorAndLdapMock() {
$this->createMock(INotificationManager::class),
$this->shareManager])
->getMock();
$helper = new Helper(Server::get(IConfig::class), Server::get(IDBConnection::class));
$helper = Server::get(Helper::class);

return [$lw, $connector, $um, $helper];
}
Expand Down
Loading
Loading