ensures mapping of chosen userid
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
5b754a6353
commit
660fbd64e3
4 changed files with 39 additions and 6 deletions
|
@ -635,7 +635,7 @@ class Access extends LDAPUtility {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function mapAndAnnounceIfApplicable(
|
public function mapAndAnnounceIfApplicable(
|
||||||
AbstractMapping $mapper,
|
AbstractMapping $mapper,
|
||||||
string $fdn,
|
string $fdn,
|
||||||
string $name,
|
string $name,
|
||||||
|
|
|
@ -110,7 +110,7 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface, IGroupLD
|
||||||
$members = $this->access->connection->getFromCache($cacheKeyMembers);
|
$members = $this->access->connection->getFromCache($cacheKeyMembers);
|
||||||
if(!is_null($members)) {
|
if(!is_null($members)) {
|
||||||
$this->cachedGroupMembers[$gid] = $members;
|
$this->cachedGroupMembers[$gid] = $members;
|
||||||
$isInGroup = in_array($userDN, $members);
|
$isInGroup = in_array($userDN, $members, true);
|
||||||
$this->access->connection->writeToCache($cacheKey, $isInGroup);
|
$this->access->connection->writeToCache($cacheKey, $isInGroup);
|
||||||
return $isInGroup;
|
return $isInGroup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -622,8 +622,26 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
|
||||||
if ($this->userPluginManager->implementsActions(Backend::CREATE_USER)) {
|
if ($this->userPluginManager->implementsActions(Backend::CREATE_USER)) {
|
||||||
if ($dn = $this->userPluginManager->createUser($username, $password)) {
|
if ($dn = $this->userPluginManager->createUser($username, $password)) {
|
||||||
if (is_string($dn)) {
|
if (is_string($dn)) {
|
||||||
//updates user mapping
|
// the NC user creation work flow requires a know user id up front
|
||||||
$this->access->dn2ocname($dn, $username, true);
|
$uuid = $this->access->getUUID($dn, true);
|
||||||
|
if(is_string($uuid)) {
|
||||||
|
$this->access->mapAndAnnounceIfApplicable(
|
||||||
|
$this->access->getUserMapper(),
|
||||||
|
$dn,
|
||||||
|
$username,
|
||||||
|
$uuid,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$this->access->cacheUserExists($username);
|
||||||
|
} else {
|
||||||
|
\OC::$server->getLogger()->warning(
|
||||||
|
'Failed to map created LDAP user with userid {userid}, because UUID could not be determined',
|
||||||
|
[
|
||||||
|
'app' => 'user_ldap',
|
||||||
|
'userid' => $username,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new \UnexpectedValueException("LDAP Plugin: Method createUser changed to return the user DN instead of boolean.");
|
throw new \UnexpectedValueException("LDAP Plugin: Method createUser changed to return the user DN instead of boolean.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ use OC\User\Backend;
|
||||||
use OC\User\Session;
|
use OC\User\Session;
|
||||||
use OCA\User_LDAP\Access;
|
use OCA\User_LDAP\Access;
|
||||||
use OCA\User_LDAP\Connection;
|
use OCA\User_LDAP\Connection;
|
||||||
|
use OCA\User_LDAP\Mapping\AbstractMapping;
|
||||||
use OCA\User_LDAP\Mapping\UserMapping;
|
use OCA\User_LDAP\Mapping\UserMapping;
|
||||||
use OCA\User_LDAP\User\Manager;
|
use OCA\User_LDAP\User\Manager;
|
||||||
use OCA\User_LDAP\User\OfflineUser;
|
use OCA\User_LDAP\User\OfflineUser;
|
||||||
|
@ -1437,16 +1438,30 @@ class User_LDAPTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCreateUserWithPlugin() {
|
public function testCreateUserWithPlugin() {
|
||||||
|
$uid = 'alien6372';
|
||||||
|
$uuid = '123-2345-36756-123-2345234-4431';
|
||||||
|
$pwd = 'passwørd';
|
||||||
|
|
||||||
$this->pluginManager->expects($this->once())
|
$this->pluginManager->expects($this->once())
|
||||||
->method('implementsActions')
|
->method('implementsActions')
|
||||||
->with(Backend::CREATE_USER)
|
->with(Backend::CREATE_USER)
|
||||||
->willReturn(true);
|
->willReturn(true);
|
||||||
$this->pluginManager->expects($this->once())
|
$this->pluginManager->expects($this->once())
|
||||||
->method('createUser')
|
->method('createUser')
|
||||||
->with('uid','password')
|
->with($uid, $pwd)
|
||||||
->willReturn('result');
|
->willReturn('result');
|
||||||
|
|
||||||
$this->assertEquals($this->backend->createUser('uid', 'password'),true);
|
$this->access->expects($this->atLeastOnce())
|
||||||
|
->method('getUUID')
|
||||||
|
->willReturn($uuid);
|
||||||
|
$this->access->expects($this->once())
|
||||||
|
->method('mapAndAnnounceIfApplicable')
|
||||||
|
->with($this->isInstanceOf(AbstractMapping::class), $this->anything(), $uid, $uuid, true);
|
||||||
|
$this->access->expects($this->any())
|
||||||
|
->method('getUserMapper')
|
||||||
|
->willReturn($this->createMock(AbstractMapping::class));
|
||||||
|
|
||||||
|
$this->assertEquals($this->backend->createUser($uid, $pwd),true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCreateUserFailing() {
|
public function testCreateUserFailing() {
|
||||||
|
|
Loading…
Reference in a new issue