/**
* Set user data using imap data source
*
* @param \FOS\UserBundle\Entity\User $user
* @param \Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken $token
*/
private function setUserData(BaseUser $user, UsernamePasswordToken $token)
{
$parts = $this->emailParser->parse($user->getUsername());
$this->verifyDomain($parts['domain']);
$localPart = $parts['local'];
$unumber = str_replace('u', '', $localPart);
$url = "http://www.kuleuven.be/wieiswie/en/person/" . $unumber;
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);
$dom = new \DOMDocument();
@$dom->loadHTML($html);
$uname = "";
foreach ($dom->getElementsByTagName('h1') as $h1) {
$uname = $h1->nodeValue;
}
$uemail = "";
foreach ($dom->getElementsByTagName('script') as $script) {
$emailPre = trim($script->nodeValue);
if (!empty($emailPre)) {
$emailPre = str_replace('document.write(String.fromCharCode(', '', $emailPre);
$emailPre = str_replace('))', '', $emailPre);
$emailArray = explode(',', $emailPre);
$emailLink = "";
foreach ($emailArray as $element) {
$emailLink .= chr(eval('return ' . $element . ';'));
}
$domInner = new \DOMDocument();
@$domInner->loadHTML($emailLink);
foreach ($domInner->getElementsByTagName('a') as $a) {
$uemail = $a->nodeValue;
}
}
}
$names = explode(" ", $uname);
$mailparts = $this->emailParser->parse($uemail);
$mailuname = $mailparts['local'];
$mailnames = explode(".", $mailuname);
$surnameIndex = 0;
foreach ($names as $index => $name) {
if (strtolower(substr($mailnames[1], 0, strlen($name))) === strtolower($name)) {
$surnameIndex = $index;
}
}
if ($user instanceof User) {
$givenName = implode(" ", array_slice($names, 0, $surnameIndex));
$user->setGivenName($givenName);
$lastName = implode(" ", array_slice($names, $surnameIndex));
$user->setSurname($lastName);
}
$user->setEmail($uemail);
$user->setPlainPassword($this->generateRandomString());
$user->addRole('ROLE_USER');
$user->addRole('ROLE_KULEUVEN');
$user->setEnabled(true);
$this->userManager->updateUser($user);
}