inject oc config to User_LDAP

This commit is contained in:
Arthur Schiwon 2015-01-06 23:28:49 +01:00
parent 8e488f726c
commit 40ecd30fba
9 changed files with 90 additions and 54 deletions

View File

@ -27,8 +27,8 @@ OCP\App::registerAdmin('user_ldap', 'settings');
$helper = new \OCA\user_ldap\lib\Helper();
$configPrefixes = $helper->getServerConfigurationPrefixes(true);
$ldapWrapper = new OCA\user_ldap\lib\LDAP();
$ocConfig = \OC::$server->getConfig();
if(count($configPrefixes) === 1) {
$ocConfig = \OC::$server->getConfig();
$userManager = new OCA\user_ldap\lib\user\Manager($ocConfig,
new OCA\user_ldap\lib\FilesystemHelper(),
new OCA\user_ldap\lib\LogWrapper(),
@ -39,10 +39,12 @@ if(count($configPrefixes) === 1) {
$dbc = \OC::$server->getDatabaseConnection();
$ldapAccess->setUserMapper(new OCA\User_LDAP\Mapping\UserMapping($dbc));
$ldapAccess->setGroupMapper(new OCA\User_LDAP\Mapping\GroupMapping($dbc));
$userBackend = new OCA\user_ldap\USER_LDAP($ldapAccess);
$userBackend = new OCA\user_ldap\USER_LDAP($ldapAccess, $ocConfig);
$groupBackend = new OCA\user_ldap\GROUP_LDAP($ldapAccess);
} else if(count($configPrefixes) > 1) {
$userBackend = new OCA\user_ldap\User_Proxy($configPrefixes, $ldapWrapper);
$userBackend = new OCA\user_ldap\User_Proxy(
$configPrefixes, $ldapWrapper, $ocConfig
);
$groupBackend = new OCA\user_ldap\Group_Proxy($configPrefixes, $ldapWrapper);
}

View File

@ -15,12 +15,14 @@ use OCA\User_LDAP\lib\User\DeletedUsersIndex;
$dbConnection = \OC::$server->getDatabaseConnection();
$userMapping = new UserMapping($dbConnection);
$helper = new Helper();
$ocConfig = \OC::$server->getConfig();
$uBackend = new User_Proxy(
$helper->getServerConfigurationPrefixes(true),
new LDAP()
new LDAP(),
$ocConfig
);
$deletedUsersIndex = new DeletedUsersIndex(
\OC::$server->getConfig(), $dbConnection, $userMapping
$ocConfig, $dbConnection, $userMapping
);
$application->add(new OCA\user_ldap\Command\ShowConfig());
@ -28,7 +30,7 @@ $application->add(new OCA\user_ldap\Command\SetConfig());
$application->add(new OCA\user_ldap\Command\TestConfig());
$application->add(new OCA\user_ldap\Command\CreateEmptyConfig());
$application->add(new OCA\user_ldap\Command\DeleteConfig());
$application->add(new OCA\user_ldap\Command\Search());
$application->add(new OCA\user_ldap\Command\Search($ocConfig));
$application->add(new OCA\user_ldap\Command\ShowRemnants($deletedUsersIndex));
$application->add(new OCA\user_ldap\Command\CheckUser(
$uBackend, $helper, $deletedUsersIndex, $userMapping)

View File

@ -18,8 +18,20 @@ use OCA\user_ldap\User_Proxy;
use OCA\user_ldap\Group_Proxy;
use OCA\user_ldap\lib\Helper;
use OCA\user_ldap\lib\LDAP;
use OCP\IConfig;
class Search extends Command {
/** @var \OCP\IConfig */
protected $ocConfig;
/**
* @param \OCP\IConfig $ocConfig
*/
public function __construct(IConfig $ocConfig) {
$this->ocConfig = $ocConfig;
parent::__construct();
}
protected function configure() {
$this
->setName('ldap:search')
@ -87,7 +99,7 @@ class Search extends Command {
$getMethod = 'getGroups';
$printID = false;
} else {
$proxy = new User_Proxy($configPrefixes, $ldapWrapper);
$proxy = new User_Proxy($configPrefixes, $ldapWrapper, $this->ocConfig);
$getMethod = 'getDisplayNames';
$printID = true;
}

View File

@ -73,7 +73,8 @@ class CleanUp extends \OC\BackgroundJob\TimedJob {
} else {
$this->userBackend = new User_Proxy(
$this->ldapHelper->getServerConfigurationPrefixes(true),
new LDAP()
new LDAP(),
$this->ocConfig
);
}

View File

@ -72,8 +72,7 @@ class Manager {
/**
* @brief Constructor
* @param \OCP\IConfig respectively an instance that provides the methods
* setUserValue and getUserValue as implemented in \OCP\Config
* @param \OCP\IConfig
* @param \OCA\user_ldap\lib\FilesystemHelper object that gives access to
* necessary functions from the OC filesystem
* @param \OCA\user_ldap\lib\LogWrapper

View File

@ -92,7 +92,7 @@ class User {
* @param string the LDAP DN
* @param IUserTools $access an instance that implements IUserTools for
* LDAP interaction
* @param \OCP\Config
* @param \OCP\IConfig
* @param FilesystemHelper
* @param \OCP\Image any empty instance
* @param LogWrapper

View File

@ -156,7 +156,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'dt19');
@ -167,7 +167,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'wrong');
@ -178,7 +178,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('mallory', 'evil');
@ -193,7 +193,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
->method('username2dn')
->will($this->returnValue(false));
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = $backend->checkPassword('roland', 'dt19');
@ -203,7 +203,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testCheckPasswordPublicAPI() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('roland', 'dt19');
@ -213,7 +213,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testCheckPasswordPublicAPIWrongPassword() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('roland', 'wrong');
@ -223,7 +223,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testCheckPasswordPublicAPIWrongUser() {
$access = $this->getAccessMock();
$this->prepareAccessForCheckPassword($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::checkPassword('mallory', 'evil');
@ -232,7 +232,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testDeleteUserCancel() {
$access = $this->getAccessMock();
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->deleteUser('notme');
$this->assertFalse($result);
}
@ -249,10 +249,12 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
->method('getUserMapper')
->will($this->returnValue($mapping));
$backend = new UserLDAP($access);
$config = $this->getMock('\OCP\IConfig');
$config->expects($this->exactly(2))
->method('getUserValue')
->will($this->returnValue(1));
$pref = \OC::$server->getConfig();
$pref->setUserValue('jeremy', 'user_ldap', 'isDeleted', 1);
$backend = new UserLDAP($access, $config);
$result = $backend->deleteUser('jeremy');
$this->assertTrue($result);
@ -310,7 +312,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersNoParam() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers();
$this->assertEquals(3, count($result));
@ -319,7 +321,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersLimitOffset() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('', 1, 2);
$this->assertEquals(1, count($result));
@ -328,7 +330,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersLimitOffset2() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('', 2, 1);
$this->assertEquals(2, count($result));
@ -337,7 +339,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersSearchWithResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('yo');
$this->assertEquals(2, count($result));
@ -346,7 +348,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersSearchEmptyResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->getUsers('nix');
$this->assertEquals(0, count($result));
@ -355,7 +357,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersViaAPINoParam() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers();
@ -365,7 +367,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersViaAPILimitOffset() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('', 1, 2);
@ -375,7 +377,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersViaAPILimitOffset2() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('', 2, 1);
@ -385,7 +387,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersViaAPISearchWithResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('yo');
@ -395,7 +397,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetUsersViaAPISearchEmptyResult() {
$access = $this->getAccessMock();
$this->prepareAccessForGetUsers($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
\OC_User::useBackend($backend);
$result = \OCP\User::getUsers('nix');
@ -404,7 +406,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testUserExists() {
$access = $this->getAccessMock();
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
$access->expects($this->any())
@ -431,7 +433,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testUserExistsPublicAPI() {
$access = $this->getAccessMock();
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@ -459,7 +461,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testDeleteUser() {
$access = $this->getAccessMock();
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
//we do not support deleting users at all
$result = $backend->deleteUser('gunslinger');
@ -468,7 +470,8 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetHome() {
$access = $this->getAccessMock();
$backend = new UserLDAP($access);
$config = $this->getMock('\OCP\IConfig');
$backend = new UserLDAP($access, $config);
$this->prepareMockForUserExists($access);
$access->connection->expects($this->any())
@ -501,14 +504,17 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
}
}));
$datadir = '/my/data/dir';
$config->expects($this->once())
->method('getSystemValue')
->will($this->returnValue($datadir));
//absolut path
$result = $backend->getHome('gunslinger');
$this->assertEquals('/tmp/rolandshome/', $result);
//datadir-relativ path
$result = $backend->getHome('ladyofshadows');
$datadir = \OCP\Config::getSystemValue('datadirectory',
\OC::$SERVERROOT.'/data');
$this->assertEquals($datadir.'/susannah/', $result);
//no path at all triggers OC default behaviour
@ -546,7 +552,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetDisplayName() {
$access = $this->getAccessMock();
$this->prepareAccessForGetDisplayName($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
//with displayName
@ -561,7 +567,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
public function testGetDisplayNamePublicAPI() {
$access = $this->getAccessMock();
$this->prepareAccessForGetDisplayName($access);
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$this->prepareMockForUserExists($access);
\OC_User::useBackend($backend);
@ -584,7 +590,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
->method('countUsers')
->will($this->returnValue(5));
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->countUsers();
$this->assertEquals(5, $result);
@ -597,7 +603,7 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
->method('countUsers')
->will($this->returnValue(false));
$backend = new UserLDAP($access);
$backend = new UserLDAP($access, $this->getMock('\OCP\IConfig'));
$result = $backend->countUsers();
$this->assertFalse($result);

View File

@ -26,15 +26,27 @@
namespace OCA\user_ldap;
use OCA\user_ldap\lib\BackendUtility;
use OCA\user_ldap\lib\Access;
use OCA\user_ldap\lib\user\OfflineUser;
use OCA\User_LDAP\lib\User\User;
use OCP\IConfig;
class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface {
/**
* @var string[] $homesToKill
*/
/** @var string[] $homesToKill */
protected $homesToKill = array();
/** @var \OCP\IConfig */
protected $ocConfig;
/**
* @param \OCA\user_ldap\lib\Access $access
* @param \OCP\IConfig $ocConfig
*/
public function __construct(Access $access, IConfig $ocConfig) {
parent::__construct($access);
$this->ocConfig = $ocConfig;
}
/**
* checks whether the user is allowed to change his avatar in ownCloud
* @param string $uid the ownCloud user name
@ -214,8 +226,7 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
* @return bool
*/
public function deleteUser($uid) {
$pref = \OC::$server->getConfig();
$marked = $pref->getUserValue($uid, 'user_ldap', 'isDeleted', 0);
$marked = $this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0);
if(intval($marked) === 0) {
\OC::$server->getLogger()->notice(
'User '.$uid . ' is not marked as deleted, not cleaning up.',
@ -227,7 +238,7 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
//Get Home Directory out of user preferences so we can return it later,
//necessary for removing directories as done by OC_User.
$home = $pref->getUserValue($uid, 'user_ldap', 'homePath', '');
$home = $this->ocConfig->getUserValue($uid, 'user_ldap', 'homePath', '');
$this->homesToKill[$uid] = $home;
$this->access->getUserMapper()->unmap($uid);
@ -254,7 +265,6 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
if($this->access->connection->isCached($cacheKey)) {
return $this->access->connection->getFromCache($cacheKey);
}
$pref = \OC::$server->getConfig();
if(strpos($this->access->connection->homeFolderNamingRule, 'attr:') === 0) {
$attr = substr($this->access->connection->homeFolderNamingRule, strlen('attr:'));
$homedir = $this->access->readAttribute(
@ -270,13 +280,15 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
) {
$homedir = $path;
} else {
$homedir = \OC::$server->getConfig()->getSystemValue('datadirectory',
$homedir = $this->ocConfig->getSystemValue('datadirectory',
\OC::$SERVERROOT.'/data' ) . '/' . $homedir[0];
}
$this->access->connection->writeToCache($cacheKey, $homedir);
//we need it to store it in the DB as well in case a user gets
//deleted so we can clean up afterwards
$pref->setUserValue($uid, 'user_ldap', 'homePath', $homedir);
$this->ocConfig->setUserValue(
$uid, 'user_ldap', 'homePath', $homedir
);
//TODO: if home directory changes, the old one needs to be removed.
return $homedir;
}
@ -284,7 +296,7 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
//false will apply default behaviour as defined and done by OC_User
$this->access->connection->writeToCache($cacheKey, false);
$pref->setUserValue($uid, 'user_ldap', 'homePath', '');
$this->ocConfig->setUserValue($uid, 'user_ldap', 'homePath', '');
return false;
}

View File

@ -25,6 +25,8 @@ namespace OCA\user_ldap;
use OCA\user_ldap\lib\ILDAPWrapper;
use OCA\User_LDAP\lib\User\User;
use \OCA\user_ldap\User_LDAP;
use OCP\IConfig;
class User_Proxy extends lib\Proxy implements \OCP\IUserBackend, \OCP\UserInterface {
private $backends = array();
@ -34,11 +36,11 @@ class User_Proxy extends lib\Proxy implements \OCP\IUserBackend, \OCP\UserInterf
* Constructor
* @param array $serverConfigPrefixes array containing the config Prefixes
*/
public function __construct($serverConfigPrefixes, ILDAPWrapper $ldap) {
public function __construct(array $serverConfigPrefixes, ILDAPWrapper $ldap, IConfig $ocConfig) {
parent::__construct($ldap);
foreach($serverConfigPrefixes as $configPrefix) {
$this->backends[$configPrefix] =
new \OCA\user_ldap\USER_LDAP($this->getAccess($configPrefix));
new User_LDAP($this->getAccess($configPrefix), $ocConfig);
if(is_null($this->refBackend)) {
$this->refBackend = &$this->backends[$configPrefix];
}