From 8b75aafd53b8bdba067e5eb0806bd4b16c86f7eb Mon Sep 17 00:00:00 2001 From: s396447 Date: Wed, 17 Jan 2018 19:43:52 +0100 Subject: [PATCH] creates test taker and adds it to LDAP group when logging with ldap credentials for first time --- model/LdapAdapter.php | 65 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/model/LdapAdapter.php b/model/LdapAdapter.php index aae61a7..7fa1677 100644 --- a/model/LdapAdapter.php +++ b/model/LdapAdapter.php @@ -36,6 +36,11 @@ use oat\generisHard\models\hardsql\Exception; use oat\oatbox\user\auth\LoginAdapter; use Zend\Authentication\Adapter\Ldap; use common_persistence_Manager; +use oat\taoTestTaker\models\CrudService; +use core_kernel_classes_Class; +use oat\oatbox\user\LoginService; +use oat\taoGroups\models\CrudGroupsService; +use oat\taoGroups\models\GroupsService; /** * Adapter to authenticate users stored in the Ldap implementation @@ -123,10 +128,12 @@ class LdapAdapter implements LoginAdapter $mapping = $this->hasOption(self::OPTION_USER_MAPPING) ? $this->getOption(self::OPTION_USER_MAPPING) : array(); - $factory = new LdapUserFactory($mapping); - $user = $factory->createUser($params); - return $user; + //TODO: change this + $user = $this->createTestTaker($this->getUsername(), $this->getPassword(), $params); + $this->addUserToGroup($user, 'LDAP'); + + return LoginService::authenticate($this->getUsername(), $this->getPassword()); } else { throw new core_kernel_users_InvalidLoginException('User "'.$this->getUsername().'" failed LDAP authentication.'); @@ -135,6 +142,57 @@ class LdapAdapter implements LoginAdapter } + + + private function createTestTaker($login, $password, $params) + { + $testTakerCrudService = CrudService::singleton(); + $testTakerClass = new core_kernel_classes_Class(('http://www.tao.lu/Ontologies/TAO.rdf#User')); + + $data = [ + PROPERTY_USER_LOGIN => $login, + PROPERTY_USER_PASSWORD => $password, + RDFS_LABEL => $login . ' - ' . $params['givenname'] . ' ' . $params['sn'], + PROPERTY_USER_FIRSTNAME => $params['givenname'], + PROPERTY_USER_LASTNAME => $params['sn'], + ]; + + try { + $testTaker = $testTakerCrudService->createFromLdapData($data); + } catch (\common_exception_PreConditionFailure $e) { + //TODO: throw better exception + throw new core_kernel_users_InvalidLoginException('Error while creating test taker: ' . $login); + } + + return $testTaker; + } + + private function addUserToGroup($user, $groupLabel) + { + $groupCrudService = CrudGroupsService::singleton(); + $groupService = GroupsService::singleton(); + $groupClass = $groupService->getRootClass(); + + $instances = $groupClass->searchInstances(array( + RDFS_LABEL => $groupLabel + ), array( + 'recursive' => true, + 'like' => false + )); + + if (count($instances)) { + $group = current($instances); + } else { + $group = $groupCrudService->createFromArray([ + RDFS_LABEL => $groupLabel + ]); + } + + $groupService->addUser($user->getUri(), $group); + } + + + /** * @param \Zend\Authentication\Adapter\Ldap $adapter */ @@ -202,3 +260,4 @@ class LdapAdapter implements LoginAdapter } +