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']);*/ }
/** * {@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 update(User $user) { $errors = $this->validator->validate($user); if (count($errors) > 0) { throw new InvalidArgumentException((string) $errors); } // rehash changed passwords if ($user->getPasswordObject()->getPasswordPlain() !== null) { $this->encodePassword($user->getEncoder(), $user->getPasswordObject()); } // validate ldap schemas foreach ($user->getObjects() as $object) { $errors = $this->validator->validate($object); if (count($errors) > 0) { throw new InvalidArgumentException($this->getUsername() . '(User):' . (string) $errors); } } $transformer = new LdapArrayToObjectTransformer(null); $this->client->replace('uid=' . $user->getUsername() . ',ou=users,' . $this->baseDn, $transformer->transform($user)); foreach ($user->getServices() as $service) { $dn = 'uid=' . $user->getUsername() . ',ou=users,dc=' . $service->getName() . ',' . $this->baseDn; if ($service->isEnabled()) { foreach ($service->getPasswords() as $password) { if ($password->getPasswordPlain() !== null) { $this->encodePassword($service->getEncoder(), $password); } } // validate ldap schemas foreach ($service->getObjects() as $object) { $errors = $this->validator->validate($object); if (count($errors) > 0) { throw new InvalidArgumentException($service->getName() . "(Service): " . (string) $errors); } } if ($this->client->isEntityExist($dn)) { $this->client->replace($dn, $transformer->transform($service)); } else { $this->client->add($dn, $transformer->transform($service)); } //add groups foreach ($service->getGroups() as $group) { $dnGroup = 'uid=' . $user->getUsername() . ',ou=groups,dc=' . $service->getName() . ',' . $this->baseDn; $errors = $this->validator->validate($group); if (count($errors) > 0) { throw new InvalidArgumentException($group->getName() . "(Group): " . (string) $errors); } if ($group->isEnabled()) { if ($this->client->isEntityExist($dnGroup)) { $this->client->replace($dnGroup, $transformer->transform($service)); } else { $this->client->add($dnGroup, $transformer->transform($service)); } } else { if ($this->client->isEntityExist($dnGroup)) { $this->client->delete($dnGroup); } } } } else { // !$service->isEnabled() if ($this->client->isEntityExist($dn)) { $this->client->delete($dn); } } } }