parent
4b4990c48f
commit
02ec8b1726
@ -0,0 +1,22 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
$helper = new \OCA\User_LDAP\Helper(); |
||||
$helper->setLDAPProvider(); |
||||
@ -0,0 +1,48 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\User_LDAP; |
||||
|
||||
interface IUserLDAP { |
||||
|
||||
//Functions used by LDAPProvider |
||||
|
||||
/** |
||||
* Return access for LDAP interaction. |
||||
* @param string $uid |
||||
* @return Access instance of Access for LDAP interaction |
||||
*/ |
||||
public function getLDAPAccess($uid); |
||||
|
||||
/** |
||||
* Return a new LDAP connection for the specified user. |
||||
* @param string $uid |
||||
* @return resource of the LDAP connection |
||||
*/ |
||||
public function getNewLDAPConnection($uid); |
||||
|
||||
/** |
||||
* Return the username for the given LDAP DN, if available. |
||||
* @param string $dn |
||||
* @return string|false with the name to use in ownCloud |
||||
*/ |
||||
public function dn2UserName($dn); |
||||
} |
||||
@ -0,0 +1,187 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\User_LDAP; |
||||
|
||||
use OCP\IUserBackend; |
||||
use OCP\LDAP\ILDAPProvider; |
||||
use OCP\LDAP\IDeletionFlagSupport; |
||||
use OCP\IServerContainer; |
||||
use OCA\User_LDAP\User\DeletedUsersIndex; |
||||
use OCA\User_LDAP\Mapping\UserMapping; |
||||
|
||||
/** |
||||
* LDAP provider for pulic access to the LDAP backend. |
||||
*/ |
||||
class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { |
||||
|
||||
private $backend; |
||||
private $logger; |
||||
private $helper; |
||||
private $deletedUsersIndex; |
||||
|
||||
/** |
||||
* Create new LDAPProvider |
||||
* @param \OCP\IServerContainer $serverContainer |
||||
* @throws \Exception if user_ldap app was not enabled |
||||
*/ |
||||
public function __construct(IServerContainer $serverContainer, Helper $helper, DeletedUsersIndex $deletedUsersIndex) { |
||||
$this->logger = $serverContainer->getLogger(); |
||||
$this->helper = $helper; |
||||
$this->deletedUsersIndex = $deletedUsersIndex; |
||||
foreach ($serverContainer->getUserManager()->getBackends() as $backend){ |
||||
$this->logger->debug('instance '.get_class($backend).' backend.', ['app' => 'user_ldap']); |
||||
if ($backend instanceof IUserLDAP) { |
||||
$this->backend = $backend; |
||||
return; |
||||
} |
||||
} |
||||
throw new \Exception('To use the LDAPProvider, user_ldap app must be enabled'); |
||||
} |
||||
|
||||
/** |
||||
* Translate an ownCloud user id to LDAP DN |
||||
* @param string $uid ownCloud user id |
||||
* @return string with the LDAP DN |
||||
* @throws \Exception if translation was unsuccessful |
||||
*/ |
||||
public function getUserDN($uid) { |
||||
if(!$this->backend->userExists($uid)){ |
||||
throw new \Exception('User id not found in LDAP'); |
||||
} |
||||
$result = $this->backend->getLDAPAccess($uid)->username2dn($uid); |
||||
if(!$result){ |
||||
throw new \Exception('Translation to LDAP DN unsuccessful'); |
||||
} |
||||
return $result; |
||||
} |
||||
|
||||
/** |
||||
* Translate a LDAP DN to an ownCloud user name. If there is no mapping between |
||||
* the DN and the user name, a new one will be created. |
||||
* @param string $dn LDAP DN |
||||
* @return string with the ownCloud user name |
||||
* @throws \Exception if translation was unsuccessful |
||||
*/ |
||||
public function getUserName($dn) { |
||||
$result = $this->backend->dn2UserName($dn); |
||||
if(!$result){ |
||||
throw new \Exception('Translation to ownCloud user name unsuccessful'); |
||||
} |
||||
return $result; |
||||
} |
||||
|
||||
/** |
||||
* Convert a stored DN so it can be used as base parameter for LDAP queries. |
||||
* @param string $dn the DN in question |
||||
* @return string |
||||
*/ |
||||
public function DNasBaseParameter($dn) { |
||||
return $this->helper->DNasBaseParameter($dn); |
||||
} |
||||
|
||||
/** |
||||
* Sanitize a DN received from the LDAP server. |
||||
* @param array $dn the DN in question |
||||
* @return array the sanitized DN |
||||
*/ |
||||
public function sanitizeDN($dn) { |
||||
return $this->helper->sanitizeDN($dn); |
||||
} |
||||
|
||||
/** |
||||
* Return a new LDAP connection resource for the specified user. |
||||
* The connection must be closed manually. |
||||
* @param string $uid ownCloud user id |
||||
* @return resource of the LDAP connection |
||||
* @throws \Exception if user id was not found in LDAP |
||||
*/ |
||||
public function getLDAPConnection($uid) { |
||||
if(!$this->backend->userExists($uid)){ |
||||
throw new \Exception('User id not found in LDAP'); |
||||
} |
||||
return $this->backend->getNewLDAPConnection($uid); |
||||
} |
||||
|
||||
/** |
||||
* Get the LDAP base for users. |
||||
* @param string $uid ownCloud user id |
||||
* @return string the base for users |
||||
* @throws \Exception if user id was not found in LDAP |
||||
*/ |
||||
public function getLDAPBaseUsers($uid) { |
||||
if(!$this->backend->userExists($uid)){ |
||||
throw new \Exception('User id not found in LDAP'); |
||||
} |
||||
return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_users']; |
||||
} |
||||
|
||||
/** |
||||
* Get the LDAP base for groups. |
||||
* @param string $uid ownCloud user id |
||||
* @return string the base for groups |
||||
* @throws \Exception if user id was not found in LDAP |
||||
*/ |
||||
public function getLDAPBaseGroups($uid) { |
||||
if(!$this->backend->userExists($uid)){ |
||||
throw new \Exception('User id not found in LDAP'); |
||||
} |
||||
return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_groups']; |
||||
} |
||||
|
||||
/** |
||||
* Clear the cache if a cache is used, otherwise do nothing. |
||||
* @param string $uid ownCloud user id |
||||
* @throws \Exception if user id was not found in LDAP |
||||
*/ |
||||
public function clearCache($uid) { |
||||
if(!$this->backend->userExists($uid)){ |
||||
throw new \Exception('User id not found in LDAP'); |
||||
} |
||||
$this->backend->getLDAPAccess($uid)->getConnection()->clearCache(); |
||||
} |
||||
|
||||
/** |
||||
* Check whether a LDAP DN exists |
||||
* @param string $dn LDAP DN |
||||
* @return bool whether the DN exists |
||||
*/ |
||||
public function dnExists($dn) { |
||||
$result = $this->backend->dn2UserName($dn); |
||||
return !$result ? false : true; |
||||
} |
||||
|
||||
/** |
||||
* Flag record for deletion. |
||||
* @param string $uid ownCloud user id |
||||
*/ |
||||
public function flagRecord($uid) { |
||||
$this->deletedUsersIndex->markUser($uid); |
||||
} |
||||
|
||||
/** |
||||
* Unflag record for deletion. |
||||
* @param string $uid ownCloud user id |
||||
*/ |
||||
public function unflagRecord($uid) { |
||||
//do nothing |
||||
} |
||||
} |
||||
@ -0,0 +1,57 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
namespace OCA\User_LDAP; |
||||
|
||||
use OCP\LDAP\ILDAPProviderFactory; |
||||
use OCP\IServerContainer; |
||||
use OCA\User_LDAP\User\DeletedUsersIndex; |
||||
use OCA\User_LDAP\Mapping\UserMapping; |
||||
|
||||
class LDAPProviderFactory implements ILDAPProviderFactory { |
||||
/** |
||||
* Server container |
||||
* |
||||
* @var IServerContainer |
||||
*/ |
||||
private $serverContainer; |
||||
|
||||
/** |
||||
* Constructor for the LDAP provider factory |
||||
* |
||||
* @param IServerContainer $serverContainer server container |
||||
*/ |
||||
public function __construct(IServerContainer $serverContainer) { |
||||
$this->serverContainer = $serverContainer; |
||||
} |
||||
|
||||
/** |
||||
* creates and returns an instance of the ILDAPProvider |
||||
* |
||||
* @return OCP\LDAP\ILDAPProvider |
||||
*/ |
||||
public function getLDAPProvider() { |
||||
$dbConnection = $this->serverContainer->getDatabaseConnection(); |
||||
$userMapping = new UserMapping($dbConnection); |
||||
return new LDAPProvider($this->serverContainer, new Helper(), |
||||
new DeletedUsersIndex($this->serverContainer->getConfig(), |
||||
$dbConnection, $userMapping)); |
||||
} |
||||
} |
||||
@ -0,0 +1,337 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\User_LDAP\Tests; |
||||
|
||||
use OCP\IServerContainer; |
||||
use OCA\User_LDAP\IUserLDAP; |
||||
|
||||
/** |
||||
* Class LDAPProviderTest |
||||
* |
||||
* @group DB |
||||
* |
||||
* @package OCA\User_LDAP\Tests |
||||
*/ |
||||
class LDAPProviderTest extends \Test\TestCase { |
||||
|
||||
protected function setUp() { |
||||
parent::setUp(); |
||||
} |
||||
|
||||
private function getServerMock(IUserLDAP $backend) { |
||||
$server = $this->getMockBuilder('OC\Server') |
||||
->setMethods(['getUserManager', 'getBackends']) |
||||
->setConstructorArgs(['', new \OC\Config(\OC::$configDir)]) |
||||
->getMock(); |
||||
$server->expects($this->at(1)) |
||||
->method('getBackends') |
||||
->willReturn([$backend]); |
||||
$server->expects($this->any()) |
||||
->method($this->anything()) |
||||
->willReturnSelf(); |
||||
|
||||
return $server; |
||||
} |
||||
|
||||
private function getLDAPProvider(IServerContainer $serverContainer) { |
||||
$factory = new \OCA\User_LDAP\LDAPProviderFactory($serverContainer); |
||||
return $factory->getLDAPProvider(); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \Exception |
||||
* @expectedExceptionMessage User id not found in LDAP |
||||
*/ |
||||
public function testGetUserDNUserIDNotFound() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any())->method('userExists')->willReturn(false); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->getUserDN('nonexisting_user'); |
||||
} |
||||
|
||||
public function testGetUserDN() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists', 'getLDAPAccess', 'username2dn']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->at(0)) |
||||
->method('userExists') |
||||
->willReturn(true); |
||||
$backend->expects($this->at(2)) |
||||
->method('username2dn') |
||||
->willReturn('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'); |
||||
$backend->expects($this->any()) |
||||
->method($this->anything()) |
||||
->willReturnSelf(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertEquals('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org', |
||||
$ldapProvider->getUserDN('existing_user')); |
||||
} |
||||
|
||||
public function testGetUserName() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['dn2UserName']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any()) |
||||
->method('dn2UserName') |
||||
->willReturn('existing_user'); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertEquals('existing_user', |
||||
$ldapProvider->getUserName('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); |
||||
} |
||||
|
||||
public function testDNasBaseParameter() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods([]) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$helper = new \OCA\User_LDAP\Helper(); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertEquals( |
||||
$helper->DNasBaseParameter('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'), |
||||
$ldapProvider->DNasBaseParameter('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); |
||||
} |
||||
|
||||
public function testSanitizeDN() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods([]) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$helper = new \OCA\User_LDAP\Helper(); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertEquals( |
||||
$helper->sanitizeDN('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'), |
||||
$ldapProvider->sanitizeDN('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \Exception |
||||
* @expectedExceptionMessage User id not found in LDAP |
||||
*/ |
||||
public function testGetLDAPConnectionUserIDNotFound() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any())->method('userExists')->willReturn(false); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->getLDAPConnection('nonexisting_user'); |
||||
} |
||||
|
||||
public function testGetLDAPConnection() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists', 'getNewLDAPConnection']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any()) |
||||
->method('userExists') |
||||
->willReturn(true); |
||||
$backend->expects($this->any()) |
||||
->method('getNewLDAPConnection') |
||||
->willReturn(true); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertTrue($ldapProvider->getLDAPConnection('existing_user')); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \Exception |
||||
* @expectedExceptionMessage User id not found in LDAP |
||||
*/ |
||||
public function testGetLDAPBaseUsersUserIDNotFound() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any())->method('userExists')->willReturn(false); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->getLDAPBaseUsers('nonexisting_user'); |
||||
} |
||||
|
||||
public function testGetLDAPBaseUsers() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->at(0)) |
||||
->method('userExists') |
||||
->willReturn(true); |
||||
$backend->expects($this->at(3)) |
||||
->method('getConfiguration') |
||||
->willReturn(array('ldap_base_users'=>'ou=users,dc=example,dc=org')); |
||||
$backend->expects($this->any()) |
||||
->method($this->anything()) |
||||
->willReturnSelf(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertEquals('ou=users,dc=example,dc=org', $ldapProvider->getLDAPBaseUsers('existing_user')); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \Exception |
||||
* @expectedExceptionMessage User id not found in LDAP |
||||
*/ |
||||
public function testGetLDAPBaseGroupsUserIDNotFound() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any())->method('userExists')->willReturn(false); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->getLDAPBaseGroups('nonexisting_user'); |
||||
} |
||||
|
||||
public function testGetLDAPBaseGroups() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->at(0)) |
||||
->method('userExists') |
||||
->willReturn(true); |
||||
$backend->expects($this->at(3)) |
||||
->method('getConfiguration') |
||||
->willReturn(array('ldap_base_groups'=>'ou=groups,dc=example,dc=org')); |
||||
$backend->expects($this->any()) |
||||
->method($this->anything()) |
||||
->willReturnSelf(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertEquals('ou=groups,dc=example,dc=org', $ldapProvider->getLDAPBaseGroups('existing_user')); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \Exception |
||||
* @expectedExceptionMessage User id not found in LDAP |
||||
*/ |
||||
public function testClearCacheUserIDNotFound() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any())->method('userExists')->willReturn(false); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->clearCache('nonexisting_user'); |
||||
} |
||||
|
||||
public function testClearCache() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'clearCache']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->at(0)) |
||||
->method('userExists') |
||||
->willReturn(true); |
||||
$backend->expects($this->at(3)) |
||||
->method('clearCache') |
||||
->willReturn(true); |
||||
$backend->expects($this->any()) |
||||
->method($this->anything()) |
||||
->willReturnSelf(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->clearCache('existing_user'); |
||||
$this->assertTrue(TRUE); |
||||
} |
||||
|
||||
public function testDnExists() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods(['dn2UserName']) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
$backend->expects($this->any()) |
||||
->method('dn2UserName') |
||||
->willReturn('existing_user'); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$this->assertTrue($ldapProvider->dnExists('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); |
||||
} |
||||
|
||||
public function testFlagRecord() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods([]) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->flagRecord('existing_user'); |
||||
$this->assertTrue(TRUE); |
||||
} |
||||
|
||||
public function testUnflagRecord() { |
||||
$backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') |
||||
->setMethods([]) |
||||
->disableOriginalConstructor() |
||||
->getMock(); |
||||
|
||||
$server = $this->getServerMock($backend); |
||||
|
||||
$ldapProvider = $this->getLDAPProvider($server); |
||||
$ldapProvider->unflagRecord('existing_user'); |
||||
$this->assertTrue(TRUE); |
||||
} |
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\LDAP; |
||||
|
||||
/** |
||||
* Interface IDeletionFlagSupport |
||||
* |
||||
* @package OCP\LDAP |
||||
* @since 9.2.0 |
||||
*/ |
||||
interface IDeletionFlagSupport { |
||||
/** |
||||
* Flag record for deletion. |
||||
* @param string $uid ownCloud user id |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function flagRecord($uid); |
||||
|
||||
/** |
||||
* Unflag record for deletion. |
||||
* @param string $uid ownCloud user id |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function unflagRecord($uid); |
||||
} |
||||
@ -0,0 +1,104 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\LDAP; |
||||
|
||||
/** |
||||
* Interface ILDAPProvider |
||||
* |
||||
* @package OCP\LDAP |
||||
* @since 9.2.0 |
||||
*/ |
||||
interface ILDAPProvider { |
||||
/** |
||||
* Translate an ownCloud username to LDAP DN. |
||||
* @param string $uid ownCloud user id |
||||
* @return string |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function getUserDN($uid); |
||||
|
||||
/** |
||||
* Translate a LDAP DN to an ownCloud user name. |
||||
* @param string $dn LDAP DN |
||||
* @return string with the ownCloud user name |
||||
* @throws \Exception if translation was unsuccessful |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function getUserName($dn); |
||||
|
||||
/** |
||||
* Convert a stored DN so it can be used as base parameter for LDAP queries. |
||||
* @param string $dn the DN |
||||
* @return string |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function DNasBaseParameter($dn); |
||||
|
||||
/** |
||||
* Sanitize a DN received from the LDAP server. |
||||
* @param array $dn the DN in question |
||||
* @return array the sanitized DN |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function sanitizeDN($dn); |
||||
|
||||
/** |
||||
* Return a new LDAP connection resource for the specified user. |
||||
* @param string $uid ownCloud user id |
||||
* @return resource of the LDAP connection |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function getLDAPConnection($uid); |
||||
|
||||
/** |
||||
* Get the LDAP base for users. |
||||
* @param string $uid ownCloud user id |
||||
* @return string the base for users |
||||
* @throws \Exception if user id was not found in LDAP |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function getLDAPBaseUsers($uid); |
||||
|
||||
/** |
||||
* Get the LDAP base for groups. |
||||
* @param string $uid ownCloud user id |
||||
* @return string the base for groups |
||||
* @throws \Exception if user id was not found in LDAP |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function getLDAPBaseGroups($uid); |
||||
|
||||
/** |
||||
* Check whether a LDAP DN exists |
||||
* @param string $dn LDAP DN |
||||
* @return bool whether the DN exists |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function dnExists($dn); |
||||
|
||||
/** |
||||
* Clear the cache if a cache is used, otherwise do nothing. |
||||
* @param string $uid ownCloud user id |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function clearCache($uid); |
||||
} |
||||
@ -0,0 +1,51 @@ |
||||
<?php |
||||
/** |
||||
* @author Roger Szabo <roger.szabo@web.de> |
||||
* |
||||
* @copyright Copyright (c) 2016, ownCloud, Inc. |
||||
* @license AGPL-3.0 |
||||
* |
||||
* This code is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License, version 3, |
||||
* as published by the Free Software Foundation. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License, version 3, |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/> |
||||
* |
||||
*/ |
||||
namespace OCP\LDAP; |
||||
|
||||
use OCP\IServerContainer; |
||||
|
||||
/** |
||||
* Interface ILDAPProviderFactory |
||||
* |
||||
* This class is responsible for instantiating and returning an ILDAPProvider |
||||
* instance. |
||||
* |
||||
* @package OCP\LDAP |
||||
* @since 9.2.0 |
||||
*/ |
||||
interface ILDAPProviderFactory { |
||||
|
||||
/** |
||||
* Constructor for the LDAP provider factory |
||||
* |
||||
* @param IServerContainer $serverContainer server container |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function __construct(IServerContainer $serverContainer); |
||||
|
||||
/** |
||||
* creates and returns an instance of the ILDAPProvider |
||||
* |
||||
* @return ILDAPProvider |
||||
* @since 9.2.0 |
||||
*/ |
||||
public function getLDAPProvider(); |
||||
} |
||||
Loading…
Reference in new issue