commit
73311091bf
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
$helper = new \OCA\User_LDAP\Helper();
|
||||
$helper->setLDAPProvider();
|
||||
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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 username
|
||||
*/
|
||||
public function dn2UserName($dn);
|
||||
}
|
||||
@ -0,0 +1,188 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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 user id to LDAP DN
|
||||
* @param string $uid 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 internal 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 internal user name
|
||||
* @throws \Exception if translation was unsuccessful
|
||||
*/
|
||||
public function getUserName($dn) {
|
||||
$result = $this->backend->dn2UserName($dn);
|
||||
if(!$result){
|
||||
throw new \Exception('Translation to internal 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 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 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 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 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 user id
|
||||
*/
|
||||
public function flagRecord($uid) {
|
||||
$this->deletedUsersIndex->markUser($uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unflag record for deletion.
|
||||
* @param string $uid user id
|
||||
*/
|
||||
public function unflagRecord($uid) {
|
||||
//do nothing
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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,338 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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,45 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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 user id
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function flagRecord($uid);
|
||||
|
||||
/**
|
||||
* Unflag record for deletion.
|
||||
* @param string $uid user id
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function unflagRecord($uid);
|
||||
}
|
||||
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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 a user id to LDAP DN.
|
||||
* @param string $uid user id
|
||||
* @return string
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function getUserDN($uid);
|
||||
|
||||
/**
|
||||
* Translate a LDAP DN to an internal user name.
|
||||
* @param string $dn LDAP DN
|
||||
* @return string with the internal 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 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 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 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 user id
|
||||
* @since 9.2.0
|
||||
*/
|
||||
public function clearCache($uid);
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
* 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