/**
  * {@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']);*/
 }