/** * {@inheritDoc} * @return User */ public function loadUserByUsername($username) { $username = $this->ldap->escape($username, '', LDAP_ESCAPE_FILTER); $query = str_replace('{username}', $username, str_replace('{uid_key}', $this->uidKey, $this->filter)); $filter = array('createTimestamp', 'modifyTimestamp', '*'); $dn = "ou=Users," . $this->baseDn; try { $search = $this->ldap->find($dn, $query, $filter); } catch (ConnectionException $e) { throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username), 0, $e); } if (!$search) { throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username)); } if ($search['count'] > 1) { throw new UsernameNotFoundException('More than one user found'); } $transformer = new LdapArrayToObjectTransformer($this->reader); $user = $transformer->reverseTransform($search[0], new User(null), $dn); foreach ($this->getServices() as $serviceName => $service) { $class = $service['object_class']; $serviceObject = new $class($serviceName); $dn = "ou=Users,dc=" . $serviceName . "," . $this->baseDn; $search = $this->ldap->find($dn, $query, $filter); if ($search !== null) { $serviceObject = $transformer->reverseTransform($search[0], $serviceObject, $dn); } $user->addService($serviceObject); } return $user; }
public function testReverseTransform() { $username = "******"; $data = array(); $data["cn"] = $username; $data["uid"] = $username; $data["objectClass"] = array(); $data["objectClass"][] = "inetOrgPerson"; $data["objectClass"][] = "posixAccount"; $data["objectClass"][] = "shadowAccount"; $data["uid"] = $username; $data["homeDirectory"] = "/var/vhome/" . $username; $data["givenName"] = $username; $data["sn"] = $username; $data["displayName"] = $username; $data["mail"] = $username . "@example.com"; $data['uidNumber'] = 1337; // @TODO: probably take a autoincrement id $data['gidNumber'] = 1337; $data["loginShell"] = "/bin/false"; $data['userPassword'] = array(); $data['userPassword']['0'] = '{crypt}$6$rounds=60000$test=IbklOGzurN6$FOl9R8bgP4GVtXKeKTil2uMpJfSlEfcBM.1JJWKnrUgdA8Hxve4qONQLh9TprJviNb9TpeoMZdGGt8YnPu/uv.'; $data['userPassword']['count'] = 1; $reader = new AnnotationReader(); $transformer = new LdapArrayToObjectTransformer($reader); $entity = $transformer->reverseTransform($data); $this->assertNotNull($entity->getObject(PosixAccount::class)); $this->assertEquals($entity->getObject(PosixAccount::class)->getUid(), $username); /*$this->assertCount(1, $user->getPasswords()); $this->assertNotNull($user->getPassword("test")); $this->assertEquals($user->getPassword("test")->getHash(),$data["userPassword"]['0']);*/ }